From f65196ff0f8243af2b59e0551ebc49efee0f6423 Mon Sep 17 00:00:00 2001 From: Siarhei_Kliushnikau Date: Mon, 30 Sep 2024 16:43:45 +0200 Subject: [PATCH] added parallelDescribes --- packages/playwright/src/runner/dispatcher.ts | 2 +- packages/playwright/src/runner/testGroups.ts | 30 +++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/playwright/src/runner/dispatcher.ts b/packages/playwright/src/runner/dispatcher.ts index 4e971f2475..4ced6088a2 100644 --- a/packages/playwright/src/runner/dispatcher.ts +++ b/packages/playwright/src/runner/dispatcher.ts @@ -401,7 +401,7 @@ class JobDispatcher { // - there are no remaining // - we are here not because something failed // - no unrecoverable worker error - if (!this._remainingByTestId.size && !this._failedTests.size && !params.fatalErrors.length && !params.skipTestsDueToSetupFailure.length && !params.fatalUnknownTestIds && !params.unexpectedExitError) { + if (!this._remainingByTestId.size && !this._failedTests.size && !params.fatalErrors.length && !params.skipTestsDueToSetupFailure.length && !params.fatalUnknownTestIds && !params.unexpectedExitError && !process.env.NON_ISOLATED_TESTS) { this._finished({ didFail: false }); return; } diff --git a/packages/playwright/src/runner/testGroups.ts b/packages/playwright/src/runner/testGroups.ts index 5a70bc84cc..fab717168e 100644 --- a/packages/playwright/src/runner/testGroups.ts +++ b/packages/playwright/src/runner/testGroups.ts @@ -49,6 +49,7 @@ export function createTestGroups(projectSuite: Suite, workers: number): TestGrou // These should run as a serial group, each group is independent, key === serial suite. parallel: Map, parallelWithHooks: TestGroup, + parallelDescribes: Map>, }>>(); const createGroup = (test: TestCase): TestGroup => { @@ -73,6 +74,7 @@ export function createTestGroups(projectSuite: Suite, workers: number): TestGrou general: createGroup(test), parallel: new Map(), parallelWithHooks: createGroup(test), + parallelDescribes: new Map(), }; withWorkerHash.set(test._requireFile, withRequireFile); } @@ -81,16 +83,28 @@ export function createTestGroups(projectSuite: Suite, workers: number): TestGrou let insideParallel = false; let outerMostSequentialSuite: Suite | undefined; let hasAllHooks = false; + let hasDescribe = false; + let currentTitle = ''; for (let parent: Suite | undefined = test.parent; parent; parent = parent.parent) { if (parent._parallelMode === 'serial' || parent._parallelMode === 'default') outerMostSequentialSuite = parent; insideParallel = insideParallel || parent._parallelMode === 'parallel'; hasAllHooks = hasAllHooks || parent._hooks.some(hook => hook.type === 'beforeAll' || hook.type === 'afterAll'); + hasDescribe = hasDescribe || parent.type === 'describe'; + if (parent._type === 'describe') + currentTitle = parent.title; } if (insideParallel) { - if (hasAllHooks && !outerMostSequentialSuite) { + if ((hasAllHooks && !outerMostSequentialSuite && !process.env.NON_ISOLATED_TESTS) || (!hasDescribe && process.env.NON_ISOLATED_TESTS)) { withRequireFile.parallelWithHooks.tests.push(test); + } else if (hasDescribe && process.env.NON_ISOLATED_TESTS) { + if (!withRequireFile.parallelDescribes.get(currentTitle)) { + withRequireFile.parallelDescribes.set(currentTitle, [test]); + } else { + const value = withRequireFile.parallelDescribes.get(currentTitle); + value?.push(test); + } } else { const key = outerMostSequentialSuite || test; let group = withRequireFile.parallel.get(key); @@ -125,6 +139,20 @@ export function createTestGroups(projectSuite: Suite, workers: number): TestGrou } lastGroup.tests.push(test); } + if (process.env.NON_ISOLATED_TESTS) { + const describeGroups = Array.from(withRequireFile.parallelDescribes, ([name, value]) => ({ name, value })); + let lastDescribeGroup; + for (const testGroup of describeGroups) { + lastDescribeGroup = null; + for (const test of testGroup.value) { + if (!lastDescribeGroup) { + lastDescribeGroup = createGroup(test); + result.push(lastDescribeGroup); + } + lastDescribeGroup.tests.push(test); + } + } + } } } return result;