From 35675bd38a89d87ac4b2aff0351c28183c4b9b29 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 30 Jan 2024 16:57:24 +0900 Subject: [PATCH] fix(typecheck): fix suite collection while-loop (#5065) --- packages/vitest/src/typecheck/collect.ts | 5 ++--- test/typescript/test-d/nested-suite1.test-d.ts | 11 +++++++++++ test/typescript/test-d/nested-suite2.test-d.ts | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 test/typescript/test-d/nested-suite1.test-d.ts create mode 100644 test/typescript/test-d/nested-suite2.test-d.ts diff --git a/packages/vitest/src/typecheck/collect.ts b/packages/vitest/src/typecheck/collect.ts index 0c777848292d..2b6498cd1aef 100644 --- a/packages/vitest/src/typecheck/collect.ts +++ b/packages/vitest/src/typecheck/collect.ts @@ -99,9 +99,8 @@ export async function collectTests(ctx: WorkspaceProject, filepath: string): Pro }) let lastSuite: ParsedSuite = file const updateLatestSuite = (index: number) => { - const suite = lastSuite - while (lastSuite !== file && lastSuite.end < index) - lastSuite = suite.suite as ParsedSuite + while (lastSuite.suite && lastSuite.end < index) + lastSuite = lastSuite.suite as ParsedSuite return lastSuite } definitions.sort((a, b) => a.start - b.start).forEach((definition) => { diff --git a/test/typescript/test-d/nested-suite1.test-d.ts b/test/typescript/test-d/nested-suite1.test-d.ts new file mode 100644 index 000000000000..0e97fd7ced0e --- /dev/null +++ b/test/typescript/test-d/nested-suite1.test-d.ts @@ -0,0 +1,11 @@ +import { describe, test } from 'vitest' + +describe('suite-A', () => { + describe('suite-B', () => { + test('case-X', () => { + }) + }) +}) + +test('case-Y', () => { +}) diff --git a/test/typescript/test-d/nested-suite2.test-d.ts b/test/typescript/test-d/nested-suite2.test-d.ts new file mode 100644 index 000000000000..ce02baedd072 --- /dev/null +++ b/test/typescript/test-d/nested-suite2.test-d.ts @@ -0,0 +1,18 @@ +import { describe, test } from 'vitest' + +describe('suite-A', () => { + describe('suite-B', () => { + test('case-X', () => { + }) + + describe('suite-C', () => { + test('case-Y', () => { + }) + }) + }) + + describe('suite-D', () => { + test('case-Z', () => { + }) + }) +})