Skip to content

Commit c082622

Browse files
committed
checkpoint
1 parent d895eca commit c082622

2 files changed

Lines changed: 50 additions & 58 deletions

File tree

src/localTests.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,28 @@ function resolveItemChildren(item: vscode.TestItem) {
99
isResolvedMap.set(item, true);
1010
// Simulation of nested tests
1111
const depth = item.id.split('.').length;
12-
const isLeaf = depth > 3;
13-
const pkgSuffix = 'ABC'.charAt(depth -1);
12+
const isLeaf = depth > 4;
13+
const pkgSuffix = 'ABCD'.charAt(depth -1);
1414
for (let index = 1; index < (depth + 1); index++) {
15-
const child = localTestController.createTestItem(`${item.id}.${index}`, `${isLeaf ? 'Class' : 'Pkg' + pkgSuffix}${index}`);
15+
const child = localTestController.createTestItem(`${item.id}.${index}`, `${isLeaf ? 'MockClass' : (depth === 1 ? 'Mock' : '') + 'Pkg' + pkgSuffix}${index}`);
1616
child.canResolveChildren = !isLeaf;
1717
item.children.add(child);
1818
}
1919
}
2020
else {
2121
// Root items
2222
replaceLocalRootItems(localTestController);
23-
}
23+
if (localTestController.items.size > 0) {
24+
localTestController.createRunProfile('Run Local Tests', vscode.TestRunProfileKind.Run, runTestsHandler, true);
25+
localTestController.createRunProfile('Debug Local Tests', vscode.TestRunProfileKind.Debug, runTestsHandler);
26+
//localTestController.createRunProfile('Test Coverage', vscode.TestRunProfileKind.Coverage, runTestsHandler);
27+
}
28+
}
2429
}
2530

2631
export async function setupLocalTestsController() {
2732
logger.info('setupLocalTestsController invoked');
2833

29-
localTestController.createRunProfile('Run Tests', vscode.TestRunProfileKind.Run, runTestsHandler, true);
30-
localTestController.createRunProfile('Debug Tests', vscode.TestRunProfileKind.Debug, runTestsHandler);
31-
//testController.createRunProfile('Test Coverage', vscode.TestRunProfileKind.Coverage, runTestsHandler);
32-
3334
localTestController.resolveHandler = resolveItemChildren;
3435
localTestController.items.replace([localTestController.createTestItem('-', 'loading...')]);
3536
}
@@ -77,7 +78,7 @@ export async function runTestsHandler(request: vscode.TestRunRequest, cancellati
7778
break;
7879

7980
case '2':
80-
run.failed(test, new vscode.TestMessage('fake failure'), 12300);
81+
run.failed(test, new vscode.TestMessage('fake failure'), 1230);
8182
break;
8283

8384
case '3':
@@ -89,7 +90,7 @@ export async function runTestsHandler(request: vscode.TestRunRequest, cancellati
8990
break;
9091

9192
default:
92-
run.passed(test, 45600);
93+
run.passed(test, 4560);
9394
break;
9495
}
9596
}

src/serverTests.ts

Lines changed: 39 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -23,51 +23,37 @@ async function resolveItemChildren(item: vscode.TestItem) {
2323
);
2424
if (response) {
2525
response?.data?.result?.content?.forEach(async element => {
26-
const fullClassName = element.Name;
27-
28-
const response = await makeRESTRequest(
29-
"POST",
30-
spec,
31-
{ apiVersion: 1, namespace, path: "/action/query" },
32-
{ query: `SELECT Name FROM %Dictionary.MethodDefinition WHERE parent='${fullClassName}' AND Name %STARTSWITH 'Test'` },
33-
);
34-
if (response?.data?.result?.content?.length > 0) {
26+
const fullClassName: string = element.Name;
27+
3528
const tiClass = loadedTestController.createTestItem(
3629
`${item.id}:${fullClassName}`,
37-
fullClassName
30+
fullClassName,
31+
vscode.Uri.from({
32+
scheme: "isfs-readonly",
33+
authority: item.id.toLowerCase(),
34+
path: "/" + fullClassName.replace(/\./, "/") + ".cls"
35+
})
3836
);
39-
//tiClass.description = `Class ${fullClassName}`;
40-
response?.data?.result?.content?.forEach(element => {
41-
const testMethodSuffix = element.Name.slice(4);
42-
const tiMethod = loadedTestController.createTestItem(
43-
`${item.id}:${element.Name}`,
44-
testMethodSuffix
45-
);
46-
tiClass.children.add(tiMethod);
47-
});
48-
item.children.add(tiClass);
49-
}
50-
});
51-
}
52-
}
53-
else if (parts.length === 3) {
54-
// Find all Test* methods in a class
55-
const fullClassName = parts[2];
56-
const response = await makeRESTRequest(
57-
"POST",
58-
spec,
59-
{ apiVersion: 1, namespace, path: "/action/query" },
60-
{ query: `SELECT Name FROM %Dictionary.MethodDefinition WHERE parent='${fullClassName}' AND Name %STARTSWITH 'Test'` },
61-
);
62-
if (response) {
63-
response?.data?.result?.content?.forEach(element => {
64-
const testMethodSuffix = element.Name.slice(4);
65-
const child = loadedTestController.createTestItem(
66-
`${item.id}:${element.Name}`,
67-
testMethodSuffix
68-
);
69-
child.canResolveChildren = false;
70-
item.children.add(child);
37+
const symbols = await vscode.commands.executeCommand<vscode.ProviderResult<vscode.SymbolInformation[] | vscode.DocumentSymbol[]>>('vscode.executeDocumentSymbolProvider', tiClass.uri);
38+
if (symbols?.length === 1 && symbols[0].kind === vscode.SymbolKind.Class) {
39+
const symbol = symbols[0];
40+
tiClass.range = (symbol as vscode.DocumentSymbol).range || (symbol as vscode.SymbolInformation).location.range;
41+
(symbol as vscode.DocumentSymbol).children.forEach(childSymbol => {
42+
if (childSymbol.kind === vscode.SymbolKind.Method && childSymbol.name.startsWith("Test")) {
43+
const testMethodName = childSymbol.name;
44+
const tiMethod = loadedTestController.createTestItem(
45+
`${item.id}:${testMethodName}`,
46+
testMethodName.slice(4),
47+
tiClass.uri
48+
);
49+
tiMethod.range = childSymbol.range;
50+
tiClass.children.add(tiMethod);
51+
}
52+
});
53+
}
54+
if (tiClass.children.size > 0) {
55+
item.children.add(tiClass);
56+
}
7157
});
7258
}
7359
}
@@ -77,16 +63,18 @@ async function resolveItemChildren(item: vscode.TestItem) {
7763
else {
7864
// Root items
7965
replaceRootItems(loadedTestController);
80-
}
66+
67+
if (loadedTestController.items.size > 0) {
68+
loadedTestController.createRunProfile('Run Server Tests', vscode.TestRunProfileKind.Run, runTestsHandler, true);
69+
loadedTestController.createRunProfile('Debug Server Tests', vscode.TestRunProfileKind.Debug, runTestsHandler);
70+
//loadedTestController.createRunProfile('Test Coverage', vscode.TestRunProfileKind.Coverage, runTestsHandler);
71+
}
72+
}
8173
}
8274

8375
export async function setupServerTestsController() {
8476
logger.info('setupServerTestsController invoked');
8577

86-
loadedTestController.createRunProfile('Run Tests', vscode.TestRunProfileKind.Run, runTestsHandler, true);
87-
loadedTestController.createRunProfile('Debug Tests', vscode.TestRunProfileKind.Debug, runTestsHandler);
88-
//testController.createRunProfile('Test Coverage', vscode.TestRunProfileKind.Coverage, runTestsHandler);
89-
9078
loadedTestController.resolveHandler = resolveItemChildren;
9179
loadedTestController.items.replace([loadedTestController.createTestItem('-', 'loading...')]);
9280
}
@@ -127,7 +115,10 @@ export async function runTestsHandler(request: vscode.TestRunRequest, cancellati
127115

128116
// Return result for leaf items
129117
if (test.children.size === 0) {
130-
const suffix = test.id.split('.').pop()
118+
let suffix = test.id.split('.').pop();
119+
if (!suffix?.match(/^\d+$/)) {
120+
suffix = (Math.random() * 5 + 1).toPrecision(1);
121+
}
131122
switch (suffix) {
132123
case '1':
133124
run.skipped(test);

0 commit comments

Comments
 (0)