Skip to content

Commit cd9a686

Browse files
authored
Merge pull request #400 from recca0120/fix/dataset-children-not-in-queue
fix: enqueue dataset children so TestExplorer updates their icons
2 parents 10828f6 + 016eef6 commit cd9a686

3 files changed

Lines changed: 53 additions & 13 deletions

File tree

packages/extension/src/TestExecution/TestQueueBuilder.test.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
PHPUnitXML,
44
PhpParserAstParser,
55
TestParser,
6+
TestType,
67
TreeSitterAstParser,
78
} from '@vscode-phpunit/phpunit';
89
import { generateXML, phpUnitProject } from '@vscode-phpunit/phpunit/testing';
@@ -73,6 +74,36 @@ describe('TestQueueBuilder', () => {
7374
expect(testRun.enqueued).toHaveBeenCalledTimes(queue.size);
7475
});
7576

77+
it('should enqueue dataset children when a method with datasets is queued', async () => {
78+
await collection.add(URI.file(phpUnitProject('tests/DataProviderAttributeTest.php')));
79+
80+
// Find a method TestItem that has dataset children
81+
let methodItem: import('vscode').TestItem | undefined;
82+
for (const [, ns] of ctrl.items) {
83+
for (const [, cls] of ns.children) {
84+
for (const [, m] of cls.children) {
85+
if (m.children.size > 0) {
86+
methodItem = m;
87+
break;
88+
}
89+
}
90+
}
91+
}
92+
expect(methodItem).toBeDefined();
93+
expect(methodItem!.children.size).toBeGreaterThan(0);
94+
95+
const testRun = { enqueued: vi.fn() } as unknown as TestRun;
96+
const request = {
97+
include: [methodItem!],
98+
} as unknown as import('vscode').TestRunRequest;
99+
const queue = await builder.build(request.include!, request, undefined, testRun);
100+
101+
// Queue should contain both the method AND its dataset children
102+
const types = [...queue.keys()].map((def) => def.type);
103+
expect(types).toContain(TestType.dataset);
104+
expect(queue.size).toBeGreaterThan(1);
105+
});
106+
76107
it('should exclude items in request.exclude', async () => {
77108
await collection.add(URI.file(phpUnitProject('tests/AssertionsTest.php')));
78109

packages/extension/src/TestExecution/TestQueueBuilder.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ export class TestQueueBuilder {
3131

3232
queue.set(testDef, testItem);
3333
testRun?.enqueued(testItem);
34+
35+
if (testDef.type === TestType.method && testItem.children.size > 0) {
36+
await this.build(
37+
[...testItem.children].map(([, item]) => item),
38+
request,
39+
queue,
40+
testRun,
41+
);
42+
}
3443
}
3544

3645
return queue;

packages/extension/src/extension.test.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -346,10 +346,10 @@ describe('Extension Test', () => {
346346
const expected = resolveExpected(
347347
phpUnitVersion,
348348
[
349-
['12.0.0', { enqueued: 45, started: 54, passed: 40, failed: 12, end: 1 }],
350-
['10.0.0', { enqueued: 45, started: 68, passed: 57, failed: 9, end: 1 }],
349+
['12.0.0', { enqueued: 75, started: 54, passed: 40, failed: 12, end: 1 }],
350+
['10.0.0', { enqueued: 75, started: 68, passed: 57, failed: 9, end: 1 }],
351351
],
352-
{ enqueued: 45, started: 46, passed: 27, failed: 17, end: 1 },
352+
{ enqueued: 75, started: 46, passed: 27, failed: 17, end: 1 },
353353
);
354354

355355
expectTestResultCalled(ctrl, expected);
@@ -361,10 +361,10 @@ describe('Extension Test', () => {
361361
const expected = resolveExpected(
362362
phpUnitVersion,
363363
[
364-
['12.0.0', { enqueued: 44, started: 53, passed: 40, failed: 11, end: 1 }],
365-
['10.0.0', { enqueued: 44, started: 67, passed: 57, failed: 8, end: 1 }],
364+
['12.0.0', { enqueued: 74, started: 53, passed: 40, failed: 11, end: 1 }],
365+
['10.0.0', { enqueued: 74, started: 67, passed: 57, failed: 8, end: 1 }],
366366
],
367-
{ enqueued: 44, started: 45, passed: 27, failed: 16, end: 1 },
367+
{ enqueued: 74, started: 45, passed: 27, failed: 16, end: 1 },
368368
);
369369

370370
expectTestResultCalled(ctrl, expected);
@@ -378,10 +378,10 @@ describe('Extension Test', () => {
378378
const expected = resolveExpected(
379379
phpUnitVersion,
380380
[
381-
['12.0.0', { enqueued: 9, started: 6, passed: 1, failed: 3, end: 1 }],
382-
['10.0.0', { enqueued: 9, started: 11, passed: 6, failed: 3, end: 1 }],
381+
['12.0.0', { enqueued: 12, started: 6, passed: 1, failed: 3, end: 1 }],
382+
['10.0.0', { enqueued: 12, started: 11, passed: 6, failed: 3, end: 1 }],
383383
],
384-
{ enqueued: 9, started: 12, passed: 7, failed: 3, end: 1 },
384+
{ enqueued: 12, started: 12, passed: 7, failed: 3, end: 1 },
385385
);
386386

387387
expectTestResultCalled(ctrl, expected);
@@ -1223,8 +1223,8 @@ describe('Extension Test', () => {
12231223

12241224
const expected = resolveExpected(
12251225
pestVersion,
1226-
[['3.0.0', { enqueued: 73, started: 87, passed: 81, failed: 4, end: 1 }]],
1227-
{ enqueued: 73, started: 80, passed: 78, failed: 0, end: 1 },
1226+
[['3.0.0', { enqueued: 87, started: 87, passed: 81, failed: 4, end: 1 }]],
1227+
{ enqueued: 87, started: 80, passed: 78, failed: 0, end: 1 },
12281228
);
12291229

12301230
expectTestResultCalled(ctrl, expected);
@@ -1256,8 +1256,8 @@ describe('Extension Test', () => {
12561256

12571257
const expected = resolveExpected(
12581258
pestVersion,
1259-
[['3.0.0', { enqueued: 1, started: 3, passed: 3, failed: 0, end: 1 }]],
1260-
{ enqueued: 1, started: 2, passed: 2, failed: 0, end: 1 },
1259+
[['3.0.0', { enqueued: 3, started: 3, passed: 3, failed: 0, end: 1 }]],
1260+
{ enqueued: 3, started: 2, passed: 2, failed: 0, end: 1 },
12611261
);
12621262

12631263
expectTestResultCalled(ctrl, expected);

0 commit comments

Comments
 (0)