Skip to content

Commit 883871c

Browse files
committed
Improve history view
1 parent 5c4bd0d commit 883871c

3 files changed

Lines changed: 33 additions & 9 deletions

File tree

src/debugTracker.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import * as vscode from 'vscode';
22
import { allTestRuns, loadedTestController, localTestController } from './extension';
3+
import { refreshHistoryRootItem } from './historyExplorer';
34

45
export class DebugTracker implements vscode.DebugAdapterTracker {
56

67
private session: vscode.DebugSession;
8+
private serverName: string;
9+
private namespace: string;
710
private testController: vscode.TestController
811
private run?: vscode.TestRun;
912
private testIdBase: string;
@@ -17,7 +20,9 @@ export class DebugTracker implements vscode.DebugAdapterTracker {
1720

1821
constructor(session: vscode.DebugSession) {
1922
this.session = session;
20-
this.testController = this.session.configuration.name.startsWith('ServerTests:') ? loadedTestController : localTestController;
23+
let runType: string;
24+
[ runType, this.serverName, this.namespace ] = this.session.configuration.name.split(':');
25+
this.testController = runType === 'ServerTests' ? loadedTestController : localTestController;
2126
this.run = allTestRuns[this.session.configuration.testRunIndex];
2227
this.testIdBase = this.session.configuration.testIdBase;
2328
this.classTestCollection = this.testController.items.get(this.testIdBase)?.children;
@@ -118,6 +123,7 @@ export class DebugTracker implements vscode.DebugAdapterTracker {
118123
console.log(`**Stopping session ${this.session.name}`);
119124
if (this.run) {
120125
this.run.end();
126+
refreshHistoryRootItem(this.serverName, this.namespace);
121127
}
122128

123129
// Clear reference to run (not known if this is necessary)

src/historyExplorer.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,15 @@ export async function setupHistoryExplorerController() {
3737
replaceRootItems(historyBrowserController);
3838
}
3939
}
40-
historyBrowserController.items.replace([historyBrowserController.createTestItem('-', 'loading...')]);
40+
41+
const refresh = (token?: vscode.CancellationToken) => {
42+
historyBrowserController.items.replace([historyBrowserController.createTestItem('-', 'loading...')]);
43+
replaceRootItems(historyBrowserController);
44+
}
45+
refresh();
46+
47+
// Add a manual Refresh button
48+
historyBrowserController.refreshHandler = refresh;
4149

4250
}
4351

@@ -54,7 +62,7 @@ async function addTestInstances(item: vscode.TestItem, controller: vscode.TestCo
5462
"POST",
5563
spec,
5664
{ apiVersion: 1, namespace, path: "/action/query" },
57-
{ query: "SELECT InstanceIndex, DateTime, Duration FROM %UnitTest_Result.TestInstance" },
65+
{ query: "SELECT TOP 10 InstanceIndex, DateTime, Duration FROM %UnitTest_Result.TestInstance ORDER BY DateTime DESC" },
5866
);
5967
if (response) {
6068
const portalUri = vscode.Uri.from({
@@ -68,6 +76,7 @@ async function addTestInstances(item: vscode.TestItem, controller: vscode.TestCo
6876
`${element.DateTime}`,
6977
portalUri.with({ query: `Index=${element.InstanceIndex}&$NAMESPACE=${namespace}` })
7078
);
79+
child.sortText = (1e12 - element.InstanceIndex).toString().padStart(12, "0");
7180
child.description = `run ${element.InstanceIndex}`;
7281
child.canResolveChildren = true;
7382
item.children.add(child);
@@ -209,8 +218,8 @@ async function addTestAsserts(item: vscode.TestItem, controller: vscode.TestCont
209218
}
210219

211220
response?.data?.result?.content?.forEach(element => {
212-
// Prefix the label with an underscore-padded integer to preserve order
213-
const child = controller.createTestItem(`${item.id}:${element.ID}`, `${element.Counter.toString().padStart(element.MaxCounter.toString().length, "_")}. ${element.Action}`);
221+
const child = controller.createTestItem(`${item.id}:${element.ID}`, `${element.Action}`);
222+
child.sortText = `${element.Counter.toString().padStart(element.MaxCounter.toString().length, "0")}`;
214223
child.description = element.Description;
215224
child.canResolveChildren = false;
216225
item.children.add(child);
@@ -246,3 +255,11 @@ export function replaceRootItems(controller: vscode.TestController) {
246255
rootMap.forEach(item => rootItems.push(item));
247256
controller.items.replace(rootItems);
248257
}
258+
259+
export function refreshHistoryRootItem(serverName: string, namespace: string) {
260+
const item = historyBrowserController.items.get(serverName + ":" + namespace);
261+
if (item) {
262+
item.children.replace([]);
263+
addTestInstances(item, historyBrowserController);
264+
}
265+
}

src/serverTests.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,14 @@ export async function runTestsHandler(request: vscode.TestRunRequest, cancellati
182182
scheme: server.scheme
183183
}
184184
}
185+
const namespace: string = server.namespace.toUpperCase();
185186
const response = await makeRESTRequest(
186187
"POST",
187188
serverSpec,
188-
{ apiVersion: 1, namespace: server.namespace, path: "/action/query" },
189+
{ apiVersion: 1, namespace, path: "/action/query" },
189190
{
190191
query: "SELECT TOP 1 ID, TestInstance, Name, Duration, Status, ErrorDescription FROM %UnitTest_Result.TestSuite WHERE Name %STARTSWITH ? ORDER BY TestInstance DESC",
191-
parameters: [`${server.username}\\`]
192+
parameters: [`${serverSpec.username}\\`]
192193
},
193194
);
194195
if (response) {
@@ -201,8 +202,8 @@ export async function runTestsHandler(request: vscode.TestRunRequest, cancellati
201202
const configuration: vscode.DebugConfiguration = {
202203
"type": "objectscript",
203204
"request": "launch",
204-
"name": `ServerTests:${server.username}`,
205-
"program": `##class(%UnitTest.Manager).RunTest("${server.username}","/noload/nodelete")`,
205+
"name": `ServerTests:${serverSpec.name}:${namespace}:${serverSpec.username}`,
206+
"program": `##class(%UnitTest.Manager).RunTest("${serverSpec.username}","/noload/nodelete")`,
206207
"testRunIndex": runIndex,
207208
"testIdBase": firstClassTestItem.id.split(":", 2).join(":")
208209
};

0 commit comments

Comments
 (0)