refactor: dont create suite twice

This commit is contained in:
Simon Knott 2024-08-12 15:04:34 +02:00
parent 97c4096d61
commit 1899d2745a
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC

View file

@ -26,7 +26,7 @@ import type { Matcher, TestFileFilter } from '../util';
import { buildProjectsClosure, collectFilesForProject, filterProjects } from './projectUtils'; import { buildProjectsClosure, collectFilesForProject, filterProjects } from './projectUtils';
import type { TestRun } from './tasks'; import type { TestRun } from './tasks';
import { requireOrImport } from '../transform/transform'; import { requireOrImport } from '../transform/transform';
import { applyRepeatEachIndex, bindFileSuiteToProject, filterByFocusedLine, filterByTestIds, filterOnly, filterTestsRemoveEmptySuites } from '../common/suiteUtils'; import { applyRepeatEachIndex, bindFileSuiteToProject, filterByFile, filterByFocusedLine, filterByTestIds, filterOnly, filterTestsRemoveEmptySuites } from '../common/suiteUtils';
import { createTestGroups, filterForShard, type TestGroup } from './testGroups'; import { createTestGroups, filterForShard, type TestGroup } from './testGroups';
import { dependenciesForTestFile } from '../transform/compilationCache'; import { dependenciesForTestFile } from '../transform/compilationCache';
import { sourceMapSupport } from '../utilsBundle'; import { sourceMapSupport } from '../utilsBundle';
@ -136,10 +136,10 @@ export async function createRootSuite(testRun: TestRun, errors: TestError[], sho
// Filter file suites for all projects. // Filter file suites for all projects.
for (const [project, fileSuites] of testRun.projectSuites) { for (const [project, fileSuites] of testRun.projectSuites) {
projectSuites.set(project, createProjectSuite(project, fileSuites)); const projectSuite = createProjectSuite(project, fileSuites);
projectSuites.set(project, projectSuite);
const filteredFileSuites = additionalFileMatcher ? fileSuites.filter(fileSuite => additionalFileMatcher(fileSuite.location!.file)) : fileSuites; const filteredProjectSuite = filterProjectSuite(projectSuite, { cliFileFilters, cliTitleMatcher, testIdMatcher: config.testIdMatcher, additionalFileMatcher });
const filteredProjectSuite = filterProjectSuite(createProjectSuite(project, filteredFileSuites), { cliFileFilters, cliTitleMatcher, testIdMatcher: config.testIdMatcher });
filteredProjectSuites.set(project, filteredProjectSuite); filteredProjectSuites.set(project, filteredProjectSuite);
} }
} }
@ -225,9 +225,9 @@ function createProjectSuite(project: FullProjectInternal, fileSuites: Suite[]):
return projectSuite; return projectSuite;
} }
function filterProjectSuite(projectSuite: Suite, options: { cliFileFilters: TestFileFilter[], cliTitleMatcher?: Matcher, testIdMatcher?: Matcher }): Suite { function filterProjectSuite(projectSuite: Suite, options: { cliFileFilters: TestFileFilter[], cliTitleMatcher?: Matcher, testIdMatcher?: Matcher, additionalFileMatcher?: Matcher }): Suite {
// Fast path. // Fast path.
if (!options.cliFileFilters.length && !options.cliTitleMatcher && !options.testIdMatcher) if (!options.cliFileFilters.length && !options.cliTitleMatcher && !options.testIdMatcher && !options.additionalFileMatcher)
return projectSuite; return projectSuite;
const result = projectSuite._deepClone(); const result = projectSuite._deepClone();
@ -238,6 +238,8 @@ function filterProjectSuite(projectSuite: Suite, options: { cliFileFilters: Test
filterTestsRemoveEmptySuites(result, (test: TestCase) => { filterTestsRemoveEmptySuites(result, (test: TestCase) => {
if (options.cliTitleMatcher && !options.cliTitleMatcher(test._grepTitle())) if (options.cliTitleMatcher && !options.cliTitleMatcher(test._grepTitle()))
return false; return false;
if (options.additionalFileMatcher && !options.additionalFileMatcher(test.location.file))
return false;
return true; return true;
}); });
return result; return result;