From 6c45eaa7f1d2e3f2c75198cdcb3d4b3d2202969e Mon Sep 17 00:00:00 2001 From: Daniel Syddall Date: Sun, 6 Oct 2024 15:08:29 +0100 Subject: [PATCH] fix(runner): ensure sequential suite overrides sequence.concurrent --- packages/runner/src/suite.ts | 9 ++--- .../sequential-sequence-concurrent.test.ts | 34 ++++++++++--------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/runner/src/suite.ts b/packages/runner/src/suite.ts index c935c3301341..3056bae4192a 100644 --- a/packages/runner/src/suite.ts +++ b/packages/runner/src/suite.ts @@ -520,16 +520,17 @@ function createSuite() { optionsOrFactory, ) + const isConcurrentSpecified = options.concurrent || this.concurrent || options.sequential === false + const isSequentialSpecified = options.sequential || this.sequential || options.concurrent === false + // inherit options from current suite if (currentSuite?.options) { options = { ...currentSuite.options, ...options } } // inherit concurrent / sequential from suite - const isConcurrent - = options.concurrent || (this.concurrent && !this.sequential) - const isSequential - = options.sequential || (this.sequential && !this.concurrent) + const isConcurrent = isConcurrentSpecified || (options.concurrent && !isSequentialSpecified) + const isSequential = isSequentialSpecified || (options.sequential && !isConcurrentSpecified) options.concurrent = isConcurrent && !isSequential options.sequential = isSequential && !isConcurrent diff --git a/test/core/test/sequential-sequence-concurrent.test.ts b/test/core/test/sequential-sequence-concurrent.test.ts index d9304507761d..e1e6cb893b3b 100644 --- a/test/core/test/sequential-sequence-concurrent.test.ts +++ b/test/core/test/sequential-sequence-concurrent.test.ts @@ -10,26 +10,28 @@ const delay = (timeout: number) => new Promise(resolve => setTimeout(resolve, ti let count = 0 -describe.sequential('running sequential suite when sequence.concurrent is true', () => { - test('first test completes first', async ({ task }) => { +describe.concurrent('concurrent parent suite', () => { + describe.sequential('running sequential suite when sequence.concurrent is true', () => { + test('first test completes first', async ({ task }) => { + await delay(50) + expect(task.concurrent).toBeFalsy() + expect(++count).toBe(1) + }) + + test('second test completes second', ({ task }) => { + expect(task.concurrent).toBeFalsy() + expect(++count).toBe(2) + }) + }) + + test.sequential('third test completes third', async ({ task }) => { await delay(50) expect(task.concurrent).toBeFalsy() - expect(++count).toBe(1) + expect(++count).toBe(3) }) - test('second test completes second', ({ task }) => { + test.sequential('fourth test completes fourth', ({ task }) => { expect(task.concurrent).toBeFalsy() - expect(++count).toBe(2) + expect(++count).toBe(4) }) }) - -test.sequential('third test completes third', async ({ task }) => { - await delay(50) - expect(task.concurrent).toBeFalsy() - expect(++count).toBe(3) -}) - -test.sequential('fourth test completes fourth', ({ task }) => { - expect(task.concurrent).toBeFalsy() - expect(++count).toBe(4) -})