Skip to content

Commit 8f26c66

Browse files
committed
exec-test-implicit-all step 1
1 parent 91cc908 commit 8f26c66

File tree

5 files changed

+43
-10
lines changed

5 files changed

+43
-10
lines changed

src/TestItemManager.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as vscode from 'vscode';
22
import { AbstractTest } from './framework/AbstractTest';
33
import { parseLine } from './Util';
4+
import { AbstractExecutable } from './framework/AbstractExecutable';
45

56
///
67

@@ -110,4 +111,15 @@ export class TestItemManager {
110111
}
111112
}
112113
}
114+
115+
// maps only if the TestItem explicitly represents the executable. relates to groupByExecuable
116+
private readonly testItem2ExecDirectly = new WeakMap<vscode.TestItem, AbstractExecutable>();
117+
118+
setDirectExec(item: vscode.TestItem, exec: AbstractExecutable): void {
119+
this.testItem2ExecDirectly.set(item, exec);
120+
}
121+
122+
getDirectExec(item: vscode.TestItem): AbstractExecutable | undefined {
123+
return this.testItem2ExecDirectly.get(item);
124+
}
113125
}

src/framework/AbstractExecutable.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ export abstract class AbstractExecutable<TestT extends AbstractTest = AbstractTe
328328

329329
// special item handling for exec
330330
this._execItem.setItem(itemOfLevel);
331+
this.shared.testController.setDirectExec(itemOfLevel, this);
331332
},
332333
groupBySource: async (g: GroupBySource): Promise<void> => {
333334
this._updateVarsWithTags(g, tags, tagsResolveRule);
@@ -630,7 +631,7 @@ export abstract class AbstractExecutable<TestT extends AbstractTest = AbstractTe
630631
} else testsToRunFinal.push(t);
631632
}
632633

633-
if (testsToRunFinal.length == 0) return;
634+
if (testsToRunFinal.length == 0 && !testsToRun.implicitAll) return;
634635

635636
try {
636637
await this.runTasks('beforeEach', taskPool, testRun.token);
@@ -1014,6 +1015,7 @@ class ExecutableGroup {
10141015
export class TestsToRun {
10151016
readonly direct: AbstractTest[] = []; // test is drectly included, should be run even if it is skipped
10161017
readonly parent: AbstractTest[] = []; // tests included because one of the ascendant was directly included
1018+
implicitAll: boolean = false;
10171019

10181020
*[Symbol.iterator](): Iterator<AbstractTest> {
10191021
for (const i of this.direct) yield i;

src/framework/SharedVarOfExec.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ export class SharedVarOfExec {
6565
return this._frameworkSpecific.failIfExceedsLimitNs;
6666
}
6767

68+
get enableRunExecutableTestsImplicitly(): boolean {
69+
return true; //TODO
70+
}
71+
6872
/// accessors for shared
6973

7074
readonly log = this.shared.log;

src/main.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
103103
if (request.exclude?.includes(item)) return;
104104

105105
const test = testItemManager.map(item);
106+
const directExec = test ? undefined : testItemManager.getDirectExec(item);
106107

107108
if (test) {
108109
const executable = test.exec;
@@ -118,6 +119,20 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
118119
executables.set(executable, tests);
119120
}
120121
tests[type].push(test);
122+
} else if (directExec && directExec.shared.enableRunExecutableTestsImplicitly) {
123+
const executable = directExec;
124+
const manager = workspace2manager.get(executable.shared.workspaceFolder)!;
125+
let executables = managers.get(manager);
126+
if (!executables) {
127+
executables = new Map<AbstractExecutable, TestsToRun>();
128+
managers.set(manager, executables);
129+
}
130+
let tests = executables.get(executable);
131+
if (!tests) {
132+
tests = new TestsToRun();
133+
executables.set(executable, tests);
134+
}
135+
tests.implicitAll = true;
121136
} else if (item.children.size) {
122137
item.children.forEach(enumerator('parent'));
123138
}

test/cpp/.vscode/settings.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@
2626
// },
2727
// },
2828
// },
29-
// {
30-
// "pattern": "build/*.exe",
31-
// // "testGrouping": {
32-
// // "groupByExecutable": {
33-
// // "groupBySplittedTestName": {
34-
// // },
35-
// // },
36-
// // },
37-
// }
29+
{
30+
"pattern": "build/*.exe",
31+
// "testGrouping": {
32+
// "groupByExecutable": {
33+
// "groupBySplittedTestName": {
34+
// },
35+
// },
36+
// },
37+
}
3838
],
3939
"files.exclude": {
4040
"**/sub/**": false,

0 commit comments

Comments
 (0)