From 1899d2745a6d856da518634aa1e8fe0a08cc5344 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 12 Aug 2024 15:04:34 +0200 Subject: [PATCH] refactor: dont create suite twice --- packages/playwright/src/runner/loadUtils.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/playwright/src/runner/loadUtils.ts b/packages/playwright/src/runner/loadUtils.ts index 3096879906..10d08d1d20 100644 --- a/packages/playwright/src/runner/loadUtils.ts +++ b/packages/playwright/src/runner/loadUtils.ts @@ -26,7 +26,7 @@ import type { Matcher, TestFileFilter } from '../util'; import { buildProjectsClosure, collectFilesForProject, filterProjects } from './projectUtils'; import type { TestRun } from './tasks'; 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 { dependenciesForTestFile } from '../transform/compilationCache'; import { sourceMapSupport } from '../utilsBundle'; @@ -136,10 +136,10 @@ export async function createRootSuite(testRun: TestRun, errors: TestError[], sho // Filter file suites for all projects. 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(createProjectSuite(project, filteredFileSuites), { cliFileFilters, cliTitleMatcher, testIdMatcher: config.testIdMatcher }); + const filteredProjectSuite = filterProjectSuite(projectSuite, { cliFileFilters, cliTitleMatcher, testIdMatcher: config.testIdMatcher, additionalFileMatcher }); filteredProjectSuites.set(project, filteredProjectSuite); } } @@ -225,9 +225,9 @@ function createProjectSuite(project: FullProjectInternal, fileSuites: Suite[]): 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. - if (!options.cliFileFilters.length && !options.cliTitleMatcher && !options.testIdMatcher) + if (!options.cliFileFilters.length && !options.cliTitleMatcher && !options.testIdMatcher && !options.additionalFileMatcher) return projectSuite; const result = projectSuite._deepClone(); @@ -238,6 +238,8 @@ function filterProjectSuite(projectSuite: Suite, options: { cliFileFilters: Test filterTestsRemoveEmptySuites(result, (test: TestCase) => { if (options.cliTitleMatcher && !options.cliTitleMatcher(test._grepTitle())) return false; + if (options.additionalFileMatcher && !options.additionalFileMatcher(test.location.file)) + return false; return true; }); return result;