diff --git a/Cucumberish/Core/Managers/CCIStepsManager.m b/Cucumberish/Core/Managers/CCIStepsManager.m index bb4bd53453c..b23327fa45e 100644 --- a/Cucumberish/Core/Managers/CCIStepsManager.m +++ b/Cucumberish/Core/Managers/CCIStepsManager.m @@ -29,6 +29,8 @@ #import "CCIStep.h" #import "CCIStepDefinition.h" +typedef void (^XCTContextActivityBlock)(id _Nullable activity); + static CCIStepsManager * instance = nil; @@ -197,14 +199,14 @@ - (void)executeStep:(CCIStep *)step inTestCase:(id)testCase implementation.type = @"And"; } + XCTContextActivityBlock activityBlock = ^(id activity) { + implementation.body(implementation.matchedValues, implementation.additionalContent); + }; + id xctContextClass = NSClassFromString(@"XCTContext"); if (xctContextClass) { SEL aSelector = NSSelectorFromString(@"runActivityNamed:block:"); - id block = ^(id activity) { - implementation.body(implementation.matchedValues, implementation.additionalContent); - }; - if ([xctContextClass respondsToSelector:aSelector]) { NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[xctContextClass methodSignatureForSelector:aSelector]]; [inv setSelector:aSelector]; @@ -212,12 +214,12 @@ - (void)executeStep:(CCIStep *)step inTestCase:(id)testCase NSString *name = [NSString stringWithFormat:@"%@ %@", step.keyword, step.text]; [inv setArgument:&(name) atIndex:2]; - [inv setArgument:&(block) atIndex:3]; + [inv setArgument:&(activityBlock) atIndex:3]; [inv invoke]; } } else { - implementation.body(implementation.matchedValues, implementation.additionalContent); + activityBlock(nil); } //Clean up the step additional content to avoid keeping unwanted objects in memory