in lib/taskScheduler.ts [41:86]
constructor(private config: Config) {
let excludes = ConfigParser.resolveFilePatterns(config.exclude, true, config.configDir);
let allSpecs =
ConfigParser.resolveFilePatterns(ConfigParser.getSpecs(config), false, config.configDir)
.filter((path: string) => {
return excludes.indexOf(path) < 0;
});
let taskQueues: Array<TaskQueue> = [];
config.multiCapabilities.forEach((capabilities) => {
let capabilitiesSpecs = allSpecs;
if (capabilities.specs) {
let capabilitiesSpecificSpecs =
ConfigParser.resolveFilePatterns(capabilities.specs, false, config.configDir);
capabilitiesSpecs = capabilitiesSpecs.concat(capabilitiesSpecificSpecs);
}
if (capabilities.exclude) {
let capabilitiesSpecExcludes =
ConfigParser.resolveFilePatterns(capabilities.exclude, true, config.configDir);
capabilitiesSpecs = capabilitiesSpecs.filter((path) => {
return capabilitiesSpecExcludes.indexOf(path) < 0;
});
}
let specLists: Array<Array<string>> = [];
// If we shard, we return an array of one element arrays, each containing
// the spec file. If we don't shard, we return an one element array
// containing an array of all the spec files
if (capabilities.shardTestFiles) {
capabilitiesSpecs.forEach((spec) => {
specLists.push([spec]);
});
} else {
specLists.push(capabilitiesSpecs);
}
capabilities.count = capabilities.count || 1;
for (let i = 0; i < capabilities.count; ++i) {
taskQueues.push(new TaskQueue(capabilities, specLists));
}
});
this.taskQueues = taskQueues;
this.rotationIndex = 0; // Helps suggestions to rotate amongst capabilities
}