diff --git a/bluepill/src/BPPacker.m b/bluepill/src/BPPacker.m index 8c15df95..e306dd22 100644 --- a/bluepill/src/BPPacker.m +++ b/bluepill/src/BPPacker.m @@ -36,8 +36,35 @@ @implementation BPPacker [BPUtils printInfo:INFO withString:@"Packing test bundles based on test counts."]; NSArray *testCasesToRun = config.testCasesToRun; NSArray *noSplit = config.noSplit; - NSUInteger numBundles = [[config numSims] integerValue]; - NSArray *sortedXCTestFiles = [xcTestFiles sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { + NSUInteger numBundles = [config.numSims integerValue]; + NSMutableArray *filteredXcTestFiles = [NSMutableArray new]; + + for (BPXCTestFile *xcFile in xcTestFiles) { + if (config.xcTestFileToRun) { + for(NSString *includedTestFile in config.xcTestFileToRun) { + if ([[xcFile name] isEqualToString:includedTestFile]) { + [filteredXcTestFiles addObject:xcFile]; + break; + } + } + } else { + [filteredXcTestFiles addObject:xcFile]; + } + } + + if (config.xcTestFileToSkip) { + for (BPXCTestFile *xcFile in [NSArray arrayWithArray:filteredXcTestFiles]) { + for(NSString *excludedXcTestFile in config.xcTestFileToSkip) { + if ([[xcFile name] isEqualToString:excludedXcTestFile]) { + [filteredXcTestFiles removeObject:xcFile]; + break; + } + } + } + } + + + NSArray *sortedXCTestFiles = [filteredXcTestFiles sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSUInteger numTests1 = [(BPXCTestFile *)obj1 numTests]; NSUInteger numTests2 = [(BPXCTestFile *)obj2 numTests]; return numTests2 - numTests1; diff --git a/bp/src/BPConfiguration.h b/bp/src/BPConfiguration.h index 0b0f8a79..eb1bf120 100644 --- a/bp/src/BPConfiguration.h +++ b/bp/src/BPConfiguration.h @@ -79,7 +79,9 @@ typedef NS_ENUM(NSInteger, BPProgram) { @property (nonatomic, strong) NSNumber *failureTolerance; @property (nonatomic) BOOL onlyRetryFailed; @property (nonatomic, strong) NSArray *testCasesToSkip; +@property (nonatomic, strong) NSArray *xcTestFileToSkip; @property (nonatomic, strong) NSArray *testCasesToRun; +@property (nonatomic, strong) NSArray *xcTestFileToRun; @property (nonatomic, strong) NSArray *allTestCases; @property (nonatomic, strong) NSString *configOutputFile; @property (nonatomic, strong) NSString *outputDirectory; diff --git a/bp/src/BPConfiguration.m b/bp/src/BPConfiguration.m index 8d85b7c3..bdac1774 100644 --- a/bp/src/BPConfiguration.m +++ b/bp/src/BPConfiguration.m @@ -143,6 +143,10 @@ typedef NS_OPTIONS(NSUInteger, BPOptionType) { {364, "test-plan-path", BP_MASTER | BP_SLAVE, NO, NO, required_argument, NULL, BP_VALUE | BP_PATH, "testPlanPath", "The path of a json file which describes the test plan. It is equivalent to the .xctestrun file generated by Xcode, but it can be generated by a different build system, e.g. Bazel"}, + {365, "exclude-xctest-file", BP_MASTER | BP_SLAVE, NO, NO, required_argument, NULL, BP_LIST, "xcTestFileToSkip", + "Exclude a xctestfile in the set of tests to run (takes priority over `include`)."}, + {366, "include-xctest-file", BP_MASTER | BP_SLAVE, NO, NO, required_argument, NULL, BP_LIST, "xcTestFileToRun", "Include a xctestfile in the set of tests to run (unless specified in `exclude`)."}, + {0, 0, 0, 0, 0, 0, 0} };