testeranto 0.219.14 → 0.219.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/testeranto.ts +1 -1
- package/dist/common/allTestsUtils.js +0 -17
- package/dist/common/package.json +0 -3
- package/dist/common/scripts/build-example.js +0 -105
- package/dist/common/src/Init.js +0 -38
- package/dist/common/src/Types.js +0 -63
- package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +0 -38
- package/dist/common/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -21
- package/dist/common/src/esbuildConfigs/featuresPlugin.js +0 -39
- package/dist/common/src/esbuildConfigs/index.js +0 -22
- package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +0 -30
- package/dist/common/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -24
- package/dist/common/src/esbuildConfigs/rebuildPlugin.js +0 -19
- package/dist/common/src/init-docs.js +0 -9
- package/dist/common/src/lib/tiposkripto/BaseGiven.js +0 -96
- package/dist/common/src/lib/tiposkripto/BaseSuite.js +0 -134
- package/dist/common/src/lib/tiposkripto/BaseThen.js +0 -65
- package/dist/common/src/lib/tiposkripto/BaseTiposkripto.js +0 -193
- package/dist/common/src/lib/tiposkripto/BaseWhen.js +0 -46
- package/dist/common/src/lib/tiposkripto/CoreTypes.js +0 -2
- package/dist/common/src/lib/tiposkripto/Node.js +0 -40
- package/dist/common/src/lib/tiposkripto/Tiposkripto.js +0 -49
- package/dist/common/src/lib/tiposkripto/Types.js +0 -2
- package/dist/common/src/lib/tiposkripto/Web.js +0 -70
- package/dist/common/src/lib/tiposkripto/abstractBase.test/MockGiven.js +0 -22
- package/dist/common/src/lib/tiposkripto/abstractBase.test/MockThen.js +0 -16
- package/dist/common/src/lib/tiposkripto/abstractBase.test/MockWhen.js +0 -18
- package/dist/common/src/lib/tiposkripto/abstractBase.test/adapter.js +0 -24
- package/dist/common/src/lib/tiposkripto/abstractBase.test/implementation.js +0 -38
- package/dist/common/src/lib/tiposkripto/abstractBase.test/index.js +0 -17
- package/dist/common/src/lib/tiposkripto/abstractBase.test/specification.js +0 -19
- package/dist/common/src/lib/tiposkripto/abstractBase.test/types.js +0 -2
- package/dist/common/src/lib/tiposkripto/index.js +0 -29
- package/dist/common/src/runtimes.js +0 -4
- package/dist/common/src/server/aider/configParser.js +0 -124
- package/dist/common/src/server/aider/docker.js +0 -30
- package/dist/common/src/server/getRunnables.js +0 -36
- package/dist/common/src/server/htmlTemplate.js +0 -44
- package/dist/common/src/server/nodeVersion.js +0 -5
- package/dist/common/src/server/runtimes/common.js +0 -136
- package/dist/common/src/server/runtimes/golang/docker.js +0 -62
- package/dist/common/src/server/runtimes/java/docker.js +0 -46
- package/dist/common/src/server/runtimes/node/docker.js +0 -42
- package/dist/common/src/server/runtimes/node/esbuild.js +0 -40
- package/dist/common/src/server/runtimes/node/node.js +0 -75
- package/dist/common/src/server/runtimes/python/docker.js +0 -31
- package/dist/common/src/server/runtimes/ruby/docker.js +0 -34
- package/dist/common/src/server/runtimes/rust/docker.js +0 -35
- package/dist/common/src/server/runtimes/web/docker.js +0 -42
- package/dist/common/src/server/runtimes/web/esbuild.js +0 -29
- package/dist/common/src/server/runtimes/web/hoist.js +0 -16
- package/dist/common/src/server/runtimes/web/web.js +0 -157
- package/dist/common/src/server/serverClasees/Server.js +0 -47
- package/dist/common/src/server/serverClasees/Server_Base.js +0 -18
- package/dist/common/src/server/serverClasees/Server_Docker.js +0 -904
- package/dist/common/src/server/serverClasees/Server_FS.js +0 -119
- package/dist/common/src/server/serverClasees/Server_HTTP.js +0 -189
- package/dist/common/src/server/serverClasees/Server_WS.js +0 -262
- package/dist/common/src/server/serverManagers/DockerManager.js +0 -28
- package/dist/common/src/server/serverManagers/HttpManager.js +0 -114
- package/dist/common/src/server/serverManagers/WsManager.js +0 -230
- package/dist/common/src/server/serverManagers/fs.js +0 -32
- package/dist/common/src/server/serverManagers/tcp.js +0 -51
- package/dist/common/src/server/types.js +0 -2
- package/dist/common/src/testeranto.js +0 -75
- package/dist/common/src/vscode/TerminalManager.js +0 -129
- package/dist/common/src/vscode/TestTreeItem.js +0 -77
- package/dist/common/src/vscode/extension.js +0 -185
- package/dist/common/src/vscode/providers/FeaturesTreeDataProvider.js +0 -445
- package/dist/common/src/vscode/providers/FileTreeDataProvider.js +0 -190
- package/dist/common/src/vscode/providers/ProcessesTreeDataProvider.js +0 -270
- package/dist/common/src/vscode/providers/ResultsTreeDataProvider.js +0 -87
- package/dist/common/src/vscode/providers/TestTreeDataProvider.js +0 -309
- package/dist/common/src/vscode/types.js +0 -9
- package/dist/common/testeranto/runtimes/node/node.js +0 -7
- package/dist/common/testeranto/runtimes/web/web.js +0 -6
- package/dist/common/testeranto/testeranto.js +0 -70
- package/dist/common/tsconfig.common.tsbuildinfo +0 -1
- package/dist/module/allTestsUtils.js +0 -13
- package/dist/module/package.json +0 -3
- package/dist/module/scripts/build-example.js +0 -100
- package/dist/module/src/Init.js +0 -33
- package/dist/module/src/Types.js +0 -62
- package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +0 -32
- package/dist/module/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -18
- package/dist/module/src/esbuildConfigs/featuresPlugin.js +0 -34
- package/dist/module/src/esbuildConfigs/index.js +0 -20
- package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +0 -25
- package/dist/module/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -21
- package/dist/module/src/esbuildConfigs/rebuildPlugin.js +0 -14
- package/dist/module/src/init-docs.js +0 -4
- package/dist/module/src/lib/tiposkripto/BaseGiven.js +0 -92
- package/dist/module/src/lib/tiposkripto/BaseSuite.js +0 -130
- package/dist/module/src/lib/tiposkripto/BaseThen.js +0 -61
- package/dist/module/src/lib/tiposkripto/BaseTiposkripto.js +0 -190
- package/dist/module/src/lib/tiposkripto/BaseWhen.js +0 -42
- package/dist/module/src/lib/tiposkripto/CoreTypes.js +0 -1
- package/dist/module/src/lib/tiposkripto/Node.js +0 -33
- package/dist/module/src/lib/tiposkripto/Tiposkripto.js +0 -14
- package/dist/module/src/lib/tiposkripto/Types.js +0 -1
- package/dist/module/src/lib/tiposkripto/Web.js +0 -63
- package/dist/module/src/lib/tiposkripto/abstractBase.test/MockGiven.js +0 -18
- package/dist/module/src/lib/tiposkripto/abstractBase.test/MockThen.js +0 -12
- package/dist/module/src/lib/tiposkripto/abstractBase.test/MockWhen.js +0 -14
- package/dist/module/src/lib/tiposkripto/abstractBase.test/adapter.js +0 -21
- package/dist/module/src/lib/tiposkripto/abstractBase.test/implementation.js +0 -35
- package/dist/module/src/lib/tiposkripto/abstractBase.test/index.js +0 -12
- package/dist/module/src/lib/tiposkripto/abstractBase.test/specification.js +0 -15
- package/dist/module/src/lib/tiposkripto/abstractBase.test/types.js +0 -1
- package/dist/module/src/lib/tiposkripto/index.js +0 -24
- package/dist/module/src/runtimes.js +0 -1
- package/dist/module/src/server/aider/configParser.js +0 -116
- package/dist/module/src/server/aider/docker.js +0 -28
- package/dist/module/src/server/getRunnables.js +0 -29
- package/dist/module/src/server/htmlTemplate.js +0 -40
- package/dist/module/src/server/nodeVersion.js +0 -2
- package/dist/module/src/server/runtimes/common.js +0 -127
- package/dist/module/src/server/runtimes/golang/docker.js +0 -55
- package/dist/module/src/server/runtimes/java/docker.js +0 -40
- package/dist/module/src/server/runtimes/node/docker.js +0 -36
- package/dist/module/src/server/runtimes/node/esbuild.js +0 -35
- package/dist/module/src/server/runtimes/node/node.js +0 -37
- package/dist/module/src/server/runtimes/python/docker.js +0 -25
- package/dist/module/src/server/runtimes/ruby/docker.js +0 -28
- package/dist/module/src/server/runtimes/rust/docker.js +0 -29
- package/dist/module/src/server/runtimes/web/docker.js +0 -36
- package/dist/module/src/server/runtimes/web/esbuild.js +0 -24
- package/dist/module/src/server/runtimes/web/hoist.js +0 -11
- package/dist/module/src/server/runtimes/web/web.js +0 -119
- package/dist/module/src/server/serverClasees/Server.js +0 -40
- package/dist/module/src/server/serverClasees/Server_Base.js +0 -14
- package/dist/module/src/server/serverClasees/Server_Docker.js +0 -897
- package/dist/module/src/server/serverClasees/Server_FS.js +0 -119
- package/dist/module/src/server/serverClasees/Server_HTTP.js +0 -182
- package/dist/module/src/server/serverClasees/Server_WS.js +0 -258
- package/dist/module/src/server/serverManagers/DockerManager.js +0 -28
- package/dist/module/src/server/serverManagers/HttpManager.js +0 -110
- package/dist/module/src/server/serverManagers/WsManager.js +0 -226
- package/dist/module/src/server/serverManagers/fs.js +0 -32
- package/dist/module/src/server/serverManagers/tcp.js +0 -47
- package/dist/module/src/server/types.js +0 -1
- package/dist/module/src/testeranto.js +0 -40
- package/dist/module/src/vscode/TerminalManager.js +0 -92
- package/dist/module/src/vscode/TestTreeItem.js +0 -40
- package/dist/module/src/vscode/extension.js +0 -148
- package/dist/module/src/vscode/providers/FeaturesTreeDataProvider.js +0 -408
- package/dist/module/src/vscode/providers/FileTreeDataProvider.js +0 -153
- package/dist/module/src/vscode/providers/ProcessesTreeDataProvider.js +0 -233
- package/dist/module/src/vscode/providers/ResultsTreeDataProvider.js +0 -50
- package/dist/module/src/vscode/providers/TestTreeDataProvider.js +0 -272
- package/dist/module/src/vscode/types.js +0 -6
- package/dist/module/testeranto/runtimes/node/node.js +0 -5
- package/dist/module/testeranto/runtimes/web/web.js +0 -4
- package/dist/module/testeranto/testeranto.js +0 -68
- package/dist/module/tsconfig.module.tsbuildinfo +0 -1
- package/dist/prebuild/chunk-QLT7PNPK.mjs +0 -162
- package/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs +0 -20
- package/dist/prebuild/init-docs.mjs +0 -56
- package/dist/prebuild/server/runtimes/node/node.mjs +0 -80
- package/dist/prebuild/server/runtimes/web/hoist.mjs +0 -12
- package/dist/prebuild/server/runtimes/web/web.mjs +0 -162
- package/dist/prebuild/testeranto-6SAYRVSE.mjs +0 -72
- package/dist/prebuild/testeranto.mjs +0 -1692
- package/dist/types/src/Init.d.ts +0 -2
- package/dist/types/src/Types.d.ts +0 -87
- package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +0 -2
- package/dist/types/src/esbuildConfigs/eslint-formatter-testeranto.d.ts +0 -2
- package/dist/types/src/esbuildConfigs/featuresPlugin.d.ts +0 -5
- package/dist/types/src/esbuildConfigs/index.d.ts +0 -3
- package/dist/types/src/esbuildConfigs/inputFilesPlugin.d.ts +0 -7
- package/dist/types/src/esbuildConfigs/nativeImportDetectorPlugin.d.ts +0 -2
- package/dist/types/src/esbuildConfigs/rebuildPlugin.d.ts +0 -6
- package/dist/types/src/init-docs.d.ts +0 -1
- package/dist/types/src/lib/tiposkripto/BaseGiven.d.ts +0 -42
- package/dist/types/src/lib/tiposkripto/BaseSuite.d.ts +0 -46
- package/dist/types/src/lib/tiposkripto/BaseThen.d.ts +0 -28
- package/dist/types/src/lib/tiposkripto/BaseTiposkripto.d.ts +0 -35
- package/dist/types/src/lib/tiposkripto/BaseWhen.d.ts +0 -27
- package/dist/types/src/lib/tiposkripto/CoreTypes.d.ts +0 -51
- package/dist/types/src/lib/tiposkripto/Node.d.ts +0 -9
- package/dist/types/src/lib/tiposkripto/Tiposkripto.d.ts +0 -5
- package/dist/types/src/lib/tiposkripto/Types.d.ts +0 -9
- package/dist/types/src/lib/tiposkripto/Web.d.ts +0 -9
- package/dist/types/src/lib/tiposkripto/abstractBase.test/MockGiven.d.ts +0 -9
- package/dist/types/src/lib/tiposkripto/abstractBase.test/MockThen.d.ts +0 -6
- package/dist/types/src/lib/tiposkripto/abstractBase.test/MockWhen.d.ts +0 -6
- package/dist/types/src/lib/tiposkripto/abstractBase.test/adapter.d.ts +0 -3
- package/dist/types/src/lib/tiposkripto/abstractBase.test/implementation.d.ts +0 -3
- package/dist/types/src/lib/tiposkripto/abstractBase.test/index.d.ts +0 -28
- package/dist/types/src/lib/tiposkripto/abstractBase.test/specification.d.ts +0 -3
- package/dist/types/src/lib/tiposkripto/abstractBase.test/types.d.ts +0 -39
- package/dist/types/src/lib/tiposkripto/index.d.ts +0 -56
- package/dist/types/src/runtimes.d.ts +0 -2
- package/dist/types/src/server/aider/configParser.d.ts +0 -11
- package/dist/types/src/server/aider/docker.d.ts +0 -2
- package/dist/types/src/server/getRunnables.d.ts +0 -3
- package/dist/types/src/server/htmlTemplate.d.ts +0 -2
- package/dist/types/src/server/nodeVersion.d.ts +0 -2
- package/dist/types/src/server/runtimes/common.d.ts +0 -12
- package/dist/types/src/server/runtimes/golang/docker.d.ts +0 -5
- package/dist/types/src/server/runtimes/java/docker.d.ts +0 -14
- package/dist/types/src/server/runtimes/node/docker.d.ts +0 -14
- package/dist/types/src/server/runtimes/node/esbuild.d.ts +0 -4
- package/dist/types/src/server/runtimes/node/node.d.ts +0 -1
- package/dist/types/src/server/runtimes/python/docker.d.ts +0 -14
- package/dist/types/src/server/runtimes/ruby/docker.d.ts +0 -14
- package/dist/types/src/server/runtimes/rust/docker.d.ts +0 -14
- package/dist/types/src/server/runtimes/web/docker.d.ts +0 -15
- package/dist/types/src/server/runtimes/web/esbuild.d.ts +0 -4
- package/dist/types/src/server/runtimes/web/hoist.d.ts +0 -1
- package/dist/types/src/server/runtimes/web/web.d.ts +0 -1
- package/dist/types/src/server/serverClasees/Server.d.ts +0 -8
- package/dist/types/src/server/serverClasees/Server_Base.d.ts +0 -9
- package/dist/types/src/server/serverClasees/Server_Docker.d.ts +0 -81
- package/dist/types/src/server/serverClasees/Server_FS.d.ts +0 -0
- package/dist/types/src/server/serverClasees/Server_HTTP.d.ts +0 -20
- package/dist/types/src/server/serverClasees/Server_WS.d.ts +0 -23
- package/dist/types/src/server/serverManagers/DockerManager.d.ts +0 -0
- package/dist/types/src/server/serverManagers/HttpManager.d.ts +0 -9
- package/dist/types/src/server/serverManagers/WsManager.d.ts +0 -10
- package/dist/types/src/server/serverManagers/fs.d.ts +0 -0
- package/dist/types/src/server/serverManagers/tcp.d.ts +0 -27
- package/dist/types/src/server/types.d.ts +0 -68
- package/dist/types/src/testeranto.d.ts +0 -1
- package/dist/types/src/vscode/TerminalManager.d.ts +0 -18
- package/dist/types/src/vscode/TestTreeItem.d.ts +0 -13
- package/dist/types/src/vscode/extension.d.ts +0 -3
- package/dist/types/src/vscode/providers/FeaturesTreeDataProvider.d.ts +0 -17
- package/dist/types/src/vscode/providers/FileTreeDataProvider.d.ts +0 -13
- package/dist/types/src/vscode/providers/ProcessesTreeDataProvider.d.ts +0 -23
- package/dist/types/src/vscode/providers/ResultsTreeDataProvider.d.ts +0 -10
- package/dist/types/src/vscode/providers/TestTreeDataProvider.d.ts +0 -16
- package/dist/types/src/vscode/types.d.ts +0 -14
- package/dist/types/testeranto/testeranto.d.ts +0 -3
- package/dist/types/tsconfig.types.tsbuildinfo +0 -1
- package/dist/vscode/extension.mjs +0 -5116
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import * as vscode from "vscode";
|
|
2
|
-
import { TerminalManager } from "./TerminalManager";
|
|
3
|
-
import { TestTreeDataProvider } from "./providers/TestTreeDataProvider";
|
|
4
|
-
import { FileTreeDataProvider } from "./providers/FileTreeDataProvider";
|
|
5
|
-
import { ProcessesTreeDataProvider } from "./providers/ProcessesTreeDataProvider";
|
|
6
|
-
import { FeaturesTreeDataProvider } from "./providers/FeaturesTreeDataProvider";
|
|
7
|
-
import { TreeItemType } from "./types";
|
|
8
|
-
export function activate(context) {
|
|
9
|
-
console.log("[Testeranto] Extension activating...");
|
|
10
|
-
// Create terminal manager
|
|
11
|
-
const terminalManager = new TerminalManager();
|
|
12
|
-
terminalManager.createAllTerminals();
|
|
13
|
-
console.log("[Testeranto] Created terminals for all tests");
|
|
14
|
-
// Create a status bar item
|
|
15
|
-
const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
|
|
16
|
-
statusBarItem.text = "$(beaker) Testeranto";
|
|
17
|
-
statusBarItem.tooltip = "Testeranto: Dockerized, AI powered BDD test framework";
|
|
18
|
-
statusBarItem.command = "testeranto.showTests";
|
|
19
|
-
statusBarItem.show();
|
|
20
|
-
// Create tree data providers
|
|
21
|
-
const testTreeDataProvider = new TestTreeDataProvider();
|
|
22
|
-
const fileTreeDataProvider = new FileTreeDataProvider();
|
|
23
|
-
const processesTreeDataProvider = new ProcessesTreeDataProvider();
|
|
24
|
-
const featuresTreeDataProvider = new FeaturesTreeDataProvider();
|
|
25
|
-
// Register commands
|
|
26
|
-
const showTestsCommand = vscode.commands.registerCommand("testeranto.showTests", () => {
|
|
27
|
-
vscode.window.showInformationMessage("Showing Testeranto tests");
|
|
28
|
-
vscode.commands.executeCommand("testerantoTestsView.focus");
|
|
29
|
-
});
|
|
30
|
-
const runTestCommand = vscode.commands.registerCommand("testeranto.runTest", async (item) => {
|
|
31
|
-
if (item.type === TreeItemType.Test) {
|
|
32
|
-
const { runtime, testName } = item.data || {};
|
|
33
|
-
vscode.window.showInformationMessage(`Running ${testName} for ${runtime}...`);
|
|
34
|
-
const terminal = terminalManager.showTerminal(runtime, testName);
|
|
35
|
-
if (terminal) {
|
|
36
|
-
vscode.window.showInformationMessage(`Terminal for ${testName} is ready`, { modal: false });
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
vscode.window.showWarningMessage(`Terminal for ${testName} not found`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
const aiderCommand = vscode.commands.registerCommand("testeranto.aider", async (item) => {
|
|
44
|
-
if (item.type === TreeItemType.Test) {
|
|
45
|
-
const { runtime, testName } = item.data || {};
|
|
46
|
-
vscode.window.showInformationMessage(`Connecting to aider process for ${testName} (${runtime})...`);
|
|
47
|
-
const aiderTerminal = terminalManager.createAiderTerminal(runtime, testName);
|
|
48
|
-
aiderTerminal.show();
|
|
49
|
-
// Process test name to match Docker container naming convention
|
|
50
|
-
let processedTestName = testName;
|
|
51
|
-
// Remove file extension
|
|
52
|
-
processedTestName = (processedTestName === null || processedTestName === void 0 ? void 0 : processedTestName.replace(/\.[^/.]+$/, "")) || "";
|
|
53
|
-
// Remove 'example/' prefix if present
|
|
54
|
-
processedTestName = processedTestName.replace(/^example\//, "");
|
|
55
|
-
// Replace special characters with underscores (matching DockerManager)
|
|
56
|
-
const sanitizedTestName = processedTestName.toLowerCase().replaceAll("/", "_").replaceAll(".", "-");
|
|
57
|
-
// Construct container name matching DockerManager's convention
|
|
58
|
-
const containerName = `${runtime}-${sanitizedTestName}-aider`;
|
|
59
|
-
aiderTerminal.sendText("clear");
|
|
60
|
-
setTimeout(() => {
|
|
61
|
-
aiderTerminal.sendText(`echo "Connecting to aider container: ${containerName}"`);
|
|
62
|
-
aiderTerminal.sendText(`docker exec -it ${containerName} /bin/bash`);
|
|
63
|
-
}, 500);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
const openConfigCommand = vscode.commands.registerCommand("testeranto.openConfig", async () => {
|
|
67
|
-
try {
|
|
68
|
-
const uri = vscode.Uri.file("allTests.ts");
|
|
69
|
-
const doc = await vscode.workspace.openTextDocument(uri);
|
|
70
|
-
await vscode.window.showTextDocument(doc);
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
vscode.window.showWarningMessage("Could not open allTests.ts configuration file");
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
const openFileCommand = vscode.commands.registerCommand("testeranto.openFile", async (item) => {
|
|
77
|
-
var _a;
|
|
78
|
-
if (item.type === TreeItemType.File) {
|
|
79
|
-
const fileName = ((_a = item.data) === null || _a === void 0 ? void 0 : _a.fileName) || item.label;
|
|
80
|
-
const uri = vscode.Uri.file(fileName);
|
|
81
|
-
try {
|
|
82
|
-
const doc = await vscode.workspace.openTextDocument(uri);
|
|
83
|
-
await vscode.window.showTextDocument(doc);
|
|
84
|
-
}
|
|
85
|
-
catch (err) {
|
|
86
|
-
const files = await vscode.workspace.findFiles(`**/${fileName}`, null, 1);
|
|
87
|
-
if (files.length > 0) {
|
|
88
|
-
const doc = await vscode.workspace.openTextDocument(files[0]);
|
|
89
|
-
await vscode.window.showTextDocument(doc);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
vscode.window.showWarningMessage(`Could not open file: ${fileName}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
const refreshCommand = vscode.commands.registerCommand("testeranto.refresh", () => {
|
|
98
|
-
vscode.window.showInformationMessage("Refreshing all Testeranto views...");
|
|
99
|
-
testTreeDataProvider.refresh();
|
|
100
|
-
fileTreeDataProvider.refresh();
|
|
101
|
-
processesTreeDataProvider.refresh();
|
|
102
|
-
featuresTreeDataProvider.refresh();
|
|
103
|
-
});
|
|
104
|
-
const retryConnectionCommand = vscode.commands.registerCommand("testeranto.retryConnection", (provider) => {
|
|
105
|
-
vscode.window.showInformationMessage("Retrying connection to Docker process server...");
|
|
106
|
-
// Reset connection attempts and try to reconnect
|
|
107
|
-
provider.connectionAttempts = 0;
|
|
108
|
-
provider.isConnected = false;
|
|
109
|
-
provider.connectWebSocket();
|
|
110
|
-
provider.refresh();
|
|
111
|
-
});
|
|
112
|
-
// Register tree views
|
|
113
|
-
const testTreeView = vscode.window.createTreeView("testerantoTestsView", {
|
|
114
|
-
treeDataProvider: testTreeDataProvider,
|
|
115
|
-
showCollapseAll: true
|
|
116
|
-
});
|
|
117
|
-
const fileTreeView = vscode.window.createTreeView("testerantoFilesView", {
|
|
118
|
-
treeDataProvider: fileTreeDataProvider,
|
|
119
|
-
showCollapseAll: true
|
|
120
|
-
});
|
|
121
|
-
const processesTreeView = vscode.window.createTreeView("testerantoResultsView", {
|
|
122
|
-
treeDataProvider: processesTreeDataProvider,
|
|
123
|
-
showCollapseAll: true
|
|
124
|
-
});
|
|
125
|
-
const featuresTreeView = vscode.window.createTreeView("testerantoFeaturesView", {
|
|
126
|
-
treeDataProvider: featuresTreeDataProvider,
|
|
127
|
-
showCollapseAll: true
|
|
128
|
-
});
|
|
129
|
-
// Clean up on deactivation
|
|
130
|
-
context.subscriptions.push({
|
|
131
|
-
dispose: () => {
|
|
132
|
-
terminalManager.disposeAll();
|
|
133
|
-
processesTreeDataProvider.dispose();
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
// Register all commands and views
|
|
137
|
-
context.subscriptions.push(showTestsCommand, runTestCommand, aiderCommand, openFileCommand, openConfigCommand, refreshCommand, retryConnectionCommand, testTreeView, fileTreeView, processesTreeView, featuresTreeView, statusBarItem);
|
|
138
|
-
console.log("[Testeranto] Commands registered");
|
|
139
|
-
console.log("[Testeranto] Four tree views registered");
|
|
140
|
-
vscode.commands.getCommands().then((commands) => {
|
|
141
|
-
const hasCommand = commands.includes("testeranto.showTests");
|
|
142
|
-
console.log(`[Testeranto] Command available in palette: ${hasCommand}`);
|
|
143
|
-
});
|
|
144
|
-
console.log("[Testeranto] Extension activated successfully");
|
|
145
|
-
}
|
|
146
|
-
export function deactivate() {
|
|
147
|
-
console.log("[Testeranto] Extension deactivated");
|
|
148
|
-
}
|
|
@@ -1,408 +0,0 @@
|
|
|
1
|
-
// This component shows a tree
|
|
2
|
-
// It first breaksdown matching the file structure.
|
|
3
|
-
// tests.json are further broken done via given-when-then
|
|
4
|
-
// features are also spread into the tree
|
|
5
|
-
// example: "testeranto/reports/allTests/example/node.Calculator.test.ts.json"
|
|
6
|
-
// the tree should spread to "example/Calculator.test.ts"
|
|
7
|
-
// then the json file is spread from there
|
|
8
|
-
// • example(folder)
|
|
9
|
-
// • Calculator.test.ts(file)
|
|
10
|
-
// • node(runtime - specific results)
|
|
11
|
-
// • Overall status
|
|
12
|
-
// • Features
|
|
13
|
-
// • Test Scenarios
|
|
14
|
-
// • Scenario 1: ...
|
|
15
|
-
// • GIVEN: ...
|
|
16
|
-
// • Features
|
|
17
|
-
// • WHEN Steps
|
|
18
|
-
// • THEN Assertions
|
|
19
|
-
// • python(runtime - specific results)
|
|
20
|
-
// • ...
|
|
21
|
-
import * as vscode from 'vscode';
|
|
22
|
-
import { TestTreeItem } from '../TestTreeItem';
|
|
23
|
-
import { TreeItemType } from '../types';
|
|
24
|
-
import * as fs from 'fs';
|
|
25
|
-
import * as path from 'path';
|
|
26
|
-
export class FeaturesTreeDataProvider {
|
|
27
|
-
constructor() {
|
|
28
|
-
this._onDidChangeTreeData = new vscode.EventEmitter();
|
|
29
|
-
this.onDidChangeTreeData = this._onDidChangeTreeData.event;
|
|
30
|
-
// Determine the workspace root
|
|
31
|
-
const workspaceFolders = vscode.workspace.workspaceFolders;
|
|
32
|
-
if (workspaceFolders && workspaceFolders.length > 0) {
|
|
33
|
-
this.resultsDir = path.join(workspaceFolders[0].uri.fsPath, 'testeranto', 'reports', 'allTests', 'example');
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
this.resultsDir = path.join(process.cwd(), 'testeranto', 'reports', 'allTests', 'example');
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
refresh() {
|
|
40
|
-
this._onDidChangeTreeData.fire();
|
|
41
|
-
}
|
|
42
|
-
getTreeItem(element) {
|
|
43
|
-
return element;
|
|
44
|
-
}
|
|
45
|
-
getChildren(element) {
|
|
46
|
-
if (!element) {
|
|
47
|
-
return Promise.resolve(this.getSourceStructure());
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
const data = element.data;
|
|
51
|
-
if (data === null || data === void 0 ? void 0 : data.sourcePath) {
|
|
52
|
-
// Always get children for the source path
|
|
53
|
-
return Promise.resolve(this.getSourceChildren(data.sourcePath));
|
|
54
|
-
}
|
|
55
|
-
else if ((data === null || data === void 0 ? void 0 : data.testFile) && data.testResultIndex === undefined) {
|
|
56
|
-
// This handles the case when we're showing test results
|
|
57
|
-
return Promise.resolve(this.getTestResults(data.testFile));
|
|
58
|
-
}
|
|
59
|
-
else if ((data === null || data === void 0 ? void 0 : data.testResultIndex) !== undefined) {
|
|
60
|
-
return Promise.resolve(this.getTestDetails(data.testFile, data.testResultIndex));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return Promise.resolve([]);
|
|
64
|
-
}
|
|
65
|
-
getSourceStructure() {
|
|
66
|
-
// Check if results directory exists
|
|
67
|
-
if (!fs.existsSync(this.resultsDir)) {
|
|
68
|
-
return [
|
|
69
|
-
new TestTreeItem('No test results found', TreeItemType.File, vscode.TreeItemCollapsibleState.None, {
|
|
70
|
-
description: 'Run tests to generate results in testeranto/reports/allTests/example/'
|
|
71
|
-
}, undefined, new vscode.ThemeIcon('info'))
|
|
72
|
-
];
|
|
73
|
-
}
|
|
74
|
-
// Get all JSON files in the results directory
|
|
75
|
-
const files = fs.readdirSync(this.resultsDir).filter(file => file.endsWith('.json'));
|
|
76
|
-
if (files.length === 0) {
|
|
77
|
-
return [
|
|
78
|
-
new TestTreeItem('No test results found', TreeItemType.File, vscode.TreeItemCollapsibleState.None, {
|
|
79
|
-
description: 'Run tests to generate results'
|
|
80
|
-
}, undefined, new vscode.ThemeIcon('info'))
|
|
81
|
-
];
|
|
82
|
-
}
|
|
83
|
-
// Build a tree structure based on file paths
|
|
84
|
-
// First level: 'example' directory
|
|
85
|
-
const treeRoot = { name: '', children: new Map(), fullPath: '', isFile: false };
|
|
86
|
-
// Add 'example' node
|
|
87
|
-
const exampleNode = {
|
|
88
|
-
name: 'example',
|
|
89
|
-
children: new Map(),
|
|
90
|
-
fullPath: 'example',
|
|
91
|
-
isFile: false
|
|
92
|
-
};
|
|
93
|
-
treeRoot.children.set('example', exampleNode);
|
|
94
|
-
for (const file of files) {
|
|
95
|
-
// Extract test name from filename (e.g., "node.Calculator.test.ts.json" -> "Calculator.test.ts")
|
|
96
|
-
// Remove runtime prefix and .json extension
|
|
97
|
-
const match = file.match(/^\w+\.(.+)\.json$/);
|
|
98
|
-
if (match) {
|
|
99
|
-
const testFileName = match[1]; // e.g., "Calculator.test.ts"
|
|
100
|
-
// Add test file under 'example'
|
|
101
|
-
if (!exampleNode.children.has(testFileName)) {
|
|
102
|
-
exampleNode.children.set(testFileName, {
|
|
103
|
-
name: testFileName,
|
|
104
|
-
children: new Map(),
|
|
105
|
-
fullPath: `example/${testFileName}`,
|
|
106
|
-
isFile: true,
|
|
107
|
-
fileName: file
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Convert tree to TestTreeItems
|
|
113
|
-
return this.buildSourceTreeItems(treeRoot);
|
|
114
|
-
}
|
|
115
|
-
buildSourceTreeItems(node) {
|
|
116
|
-
const items = [];
|
|
117
|
-
// Sort children: directories first, then files, alphabetically
|
|
118
|
-
const sortedChildren = Array.from(node.children.values()).sort((a, b) => {
|
|
119
|
-
if (a.isFile && !b.isFile)
|
|
120
|
-
return 1;
|
|
121
|
-
if (!a.isFile && b.isFile)
|
|
122
|
-
return -1;
|
|
123
|
-
return a.name.localeCompare(b.name);
|
|
124
|
-
});
|
|
125
|
-
for (const child of sortedChildren) {
|
|
126
|
-
// Set collapsible state based on whether it's a file or directory
|
|
127
|
-
// Directories can be expanded, files can be expanded to show test results
|
|
128
|
-
const collapsibleState = vscode.TreeItemCollapsibleState.Collapsed;
|
|
129
|
-
const treeItem = new TestTreeItem(child.name, TreeItemType.File, collapsibleState, {
|
|
130
|
-
sourcePath: child.fullPath,
|
|
131
|
-
testFile: child.fileName,
|
|
132
|
-
fileName: child.fileName,
|
|
133
|
-
// Add a flag to indicate if it's a file or directory
|
|
134
|
-
isFile: child.isFile
|
|
135
|
-
}, undefined, child.isFile ? new vscode.ThemeIcon("file-code") : new vscode.ThemeIcon("folder"));
|
|
136
|
-
items.push(treeItem);
|
|
137
|
-
}
|
|
138
|
-
return items;
|
|
139
|
-
}
|
|
140
|
-
getSourceChildren(sourcePath) {
|
|
141
|
-
// Check if results directory exists
|
|
142
|
-
if (!fs.existsSync(this.resultsDir)) {
|
|
143
|
-
return [];
|
|
144
|
-
}
|
|
145
|
-
// Get all JSON files in the results directory
|
|
146
|
-
const files = fs.readdirSync(this.resultsDir).filter(file => file.endsWith('.json'));
|
|
147
|
-
// Split sourcePath into parts
|
|
148
|
-
const parts = sourcePath.split('/').filter(p => p.length > 0);
|
|
149
|
-
// If we're at the root level, show 'example' directory
|
|
150
|
-
if (parts.length === 0) {
|
|
151
|
-
return [
|
|
152
|
-
new TestTreeItem('example', TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, {
|
|
153
|
-
sourcePath: 'example',
|
|
154
|
-
isFile: false
|
|
155
|
-
}, undefined, new vscode.ThemeIcon('folder'))
|
|
156
|
-
];
|
|
157
|
-
}
|
|
158
|
-
// If we're at the 'example' level, show test files
|
|
159
|
-
if (parts.length === 1 && parts[0] === 'example') {
|
|
160
|
-
// Group files by test name (without runtime prefix)
|
|
161
|
-
const testFiles = new Map(); // testName -> list of runtime files
|
|
162
|
-
for (const file of files) {
|
|
163
|
-
const match = file.match(/^(\w+)\.(.+)\.json$/);
|
|
164
|
-
if (match) {
|
|
165
|
-
const runtime = match[1];
|
|
166
|
-
const testName = match[2];
|
|
167
|
-
if (!testFiles.has(testName)) {
|
|
168
|
-
testFiles.set(testName, []);
|
|
169
|
-
}
|
|
170
|
-
testFiles.get(testName).push(file);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Create test file items
|
|
174
|
-
const items = [];
|
|
175
|
-
for (const [testName, runtimeFiles] of testFiles) {
|
|
176
|
-
// Count passed/failed for this test across all runtimes
|
|
177
|
-
let passedCount = 0;
|
|
178
|
-
let failedCount = 0;
|
|
179
|
-
for (const file of runtimeFiles) {
|
|
180
|
-
try {
|
|
181
|
-
const filePath = path.join(this.resultsDir, file);
|
|
182
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
183
|
-
const result = JSON.parse(content);
|
|
184
|
-
if (result.status === true || result.failed === false) {
|
|
185
|
-
passedCount++;
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
failedCount++;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
catch (_a) {
|
|
192
|
-
// Skip if can't parse
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
const total = runtimeFiles.length;
|
|
196
|
-
const description = `${passedCount} passed, ${failedCount} failed`;
|
|
197
|
-
items.push(new TestTreeItem(testName, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, {
|
|
198
|
-
sourcePath: `example/${testName}`,
|
|
199
|
-
testName: testName,
|
|
200
|
-
isFile: true,
|
|
201
|
-
description: description
|
|
202
|
-
}, undefined, failedCount === 0 ?
|
|
203
|
-
new vscode.ThemeIcon('file-code', new vscode.ThemeColor('testing.iconPassed')) :
|
|
204
|
-
new vscode.ThemeIcon('file-code', new vscode.ThemeColor('testing.iconFailed'))));
|
|
205
|
-
}
|
|
206
|
-
return items.sort((a, b) => a.label.localeCompare(b.label));
|
|
207
|
-
}
|
|
208
|
-
// If we're at the test file level (e.g., "example/Calculator.test.ts"), show runtime-specific results
|
|
209
|
-
if (parts.length === 2 && parts[0] === 'example') {
|
|
210
|
-
const testName = parts[1];
|
|
211
|
-
// Find all runtime files for this test
|
|
212
|
-
const runtimeFiles = files.filter(file => {
|
|
213
|
-
const match = file.match(/^(\w+)\.(.+)\.json$/);
|
|
214
|
-
return match && match[2] === testName;
|
|
215
|
-
});
|
|
216
|
-
return runtimeFiles.map(file => {
|
|
217
|
-
const match = file.match(/^(\w+)\.(.+)\.json$/);
|
|
218
|
-
const runtime = match ? match[1] : 'unknown';
|
|
219
|
-
// Read the file to get status
|
|
220
|
-
let icon = new vscode.ThemeIcon('file-code');
|
|
221
|
-
let description = '';
|
|
222
|
-
try {
|
|
223
|
-
const filePath = path.join(this.resultsDir, file);
|
|
224
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
225
|
-
const result = JSON.parse(content);
|
|
226
|
-
if (result.status === true || result.failed === false) {
|
|
227
|
-
icon = new vscode.ThemeIcon('check', new vscode.ThemeColor('testing.iconPassed'));
|
|
228
|
-
description = 'PASSED';
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
icon = new vscode.ThemeIcon('error', new vscode.ThemeColor('testing.iconFailed'));
|
|
232
|
-
description = `FAILED: ${result.fails || 0} failures`;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
catch (_a) {
|
|
236
|
-
description = 'Error reading file';
|
|
237
|
-
icon = new vscode.ThemeIcon('warning');
|
|
238
|
-
}
|
|
239
|
-
return new TestTreeItem(runtime, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, {
|
|
240
|
-
sourcePath: `example/${testName}/${runtime}`,
|
|
241
|
-
testFile: file,
|
|
242
|
-
fileName: file,
|
|
243
|
-
isFile: true,
|
|
244
|
-
description: description
|
|
245
|
-
}, undefined, icon);
|
|
246
|
-
}).sort((a, b) => a.label.localeCompare(b.label));
|
|
247
|
-
}
|
|
248
|
-
// If we're at the runtime level under a test file (e.g., "example/Calculator.test.ts/node"), show test results
|
|
249
|
-
if (parts.length === 3 && parts[0] === 'example') {
|
|
250
|
-
const testName = parts[1];
|
|
251
|
-
const runtime = parts[2];
|
|
252
|
-
// Find the actual file
|
|
253
|
-
const fileName = `${runtime}.${testName}.json`;
|
|
254
|
-
if (files.includes(fileName)) {
|
|
255
|
-
// Return the test results for this file
|
|
256
|
-
return this.getTestResults(fileName);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
return [];
|
|
260
|
-
}
|
|
261
|
-
getTestFilesForRuntime(runtime) {
|
|
262
|
-
const files = fs.readdirSync(this.resultsDir).filter(file => file.startsWith(runtime + '.') && file.endsWith('.json'));
|
|
263
|
-
return files.map(file => {
|
|
264
|
-
const filePath = path.join(this.resultsDir, file);
|
|
265
|
-
try {
|
|
266
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
267
|
-
const result = JSON.parse(content);
|
|
268
|
-
let icon;
|
|
269
|
-
let description = '';
|
|
270
|
-
if (result.status === true || result.failed === false) {
|
|
271
|
-
icon = new vscode.ThemeIcon('check', new vscode.ThemeColor('testing.iconPassed'));
|
|
272
|
-
description = 'All tests passed';
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
icon = new vscode.ThemeIcon('error', new vscode.ThemeColor('testing.iconFailed'));
|
|
276
|
-
description = `${result.fails || 0} tests failed`;
|
|
277
|
-
}
|
|
278
|
-
return new TestTreeItem(file, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, {
|
|
279
|
-
testFile: file,
|
|
280
|
-
description: description
|
|
281
|
-
}, undefined, icon);
|
|
282
|
-
}
|
|
283
|
-
catch (error) {
|
|
284
|
-
return new TestTreeItem(file, TreeItemType.File, vscode.TreeItemCollapsibleState.None, {
|
|
285
|
-
testFile: file,
|
|
286
|
-
description: 'Error reading file'
|
|
287
|
-
}, undefined, new vscode.ThemeIcon('warning'));
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
getTestResults(testFile) {
|
|
292
|
-
var _a;
|
|
293
|
-
const filePath = path.join(this.resultsDir, testFile);
|
|
294
|
-
try {
|
|
295
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
296
|
-
const result = JSON.parse(content);
|
|
297
|
-
const items = [];
|
|
298
|
-
// Add overall status
|
|
299
|
-
const overallPassed = result.status === true || result.failed === false;
|
|
300
|
-
items.push(new TestTreeItem(`Overall: ${overallPassed ? 'PASSED' : 'FAILED'}`, TreeItemType.File, vscode.TreeItemCollapsibleState.None, {
|
|
301
|
-
description: `Fails: ${result.fails || 0} | Features: ${((_a = result.features) === null || _a === void 0 ? void 0 : _a.length) || 0}`
|
|
302
|
-
}, undefined, overallPassed ?
|
|
303
|
-
new vscode.ThemeIcon('check', new vscode.ThemeColor('testing.iconPassed')) :
|
|
304
|
-
new vscode.ThemeIcon('error', new vscode.ThemeColor('testing.iconFailed'))));
|
|
305
|
-
// Add features section
|
|
306
|
-
if (result.features && result.features.length > 0) {
|
|
307
|
-
const featuresItem = new TestTreeItem(`Features (${result.features.length})`, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, {
|
|
308
|
-
description: 'All test features'
|
|
309
|
-
}, undefined, new vscode.ThemeIcon('symbol-array'));
|
|
310
|
-
items.push(featuresItem);
|
|
311
|
-
}
|
|
312
|
-
// Add Givens section (test scenarios)
|
|
313
|
-
if (result.givens && result.givens.length > 0) {
|
|
314
|
-
const givensItem = new TestTreeItem(`Test Scenarios (${result.givens.length})`, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, {
|
|
315
|
-
description: 'Given-When-Then test cases'
|
|
316
|
-
}, undefined, new vscode.ThemeIcon('list-tree'));
|
|
317
|
-
items.push(givensItem);
|
|
318
|
-
// Add each given as a child
|
|
319
|
-
for (let i = 0; i < result.givens.length; i++) {
|
|
320
|
-
const given = result.givens[i];
|
|
321
|
-
const givenPassed = given.status === true || given.failed === false;
|
|
322
|
-
const givenItem = new TestTreeItem(`Scenario ${i + 1}: ${given.key || 'Unnamed'}`, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, {
|
|
323
|
-
testFile: testFile,
|
|
324
|
-
testResultIndex: i,
|
|
325
|
-
description: givenPassed ? 'PASSED' : 'FAILED'
|
|
326
|
-
}, undefined, givenPassed ?
|
|
327
|
-
new vscode.ThemeIcon('check', new vscode.ThemeColor('testing.iconPassed')) :
|
|
328
|
-
new vscode.ThemeIcon('error', new vscode.ThemeColor('testing.iconFailed')));
|
|
329
|
-
items.push(givenItem);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
return items;
|
|
333
|
-
}
|
|
334
|
-
catch (error) {
|
|
335
|
-
return [
|
|
336
|
-
new TestTreeItem('Error reading test results', TreeItemType.File, vscode.TreeItemCollapsibleState.None, {
|
|
337
|
-
description: String(error)
|
|
338
|
-
}, undefined, new vscode.ThemeIcon('error'))
|
|
339
|
-
];
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
getTestDetails(testFile, index) {
|
|
343
|
-
const filePath = path.join(this.resultsDir, testFile);
|
|
344
|
-
try {
|
|
345
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
346
|
-
const result = JSON.parse(content);
|
|
347
|
-
if (!result.givens || index >= result.givens.length) {
|
|
348
|
-
return [
|
|
349
|
-
new TestTreeItem('Test scenario not found', TreeItemType.File, vscode.TreeItemCollapsibleState.None, { description: 'Invalid test scenario index' }, undefined, new vscode.ThemeIcon('warning'))
|
|
350
|
-
];
|
|
351
|
-
}
|
|
352
|
-
const given = result.givens[index];
|
|
353
|
-
const items = [];
|
|
354
|
-
// Add GIVEN section
|
|
355
|
-
const givenPassed = given.status === true || given.failed === false;
|
|
356
|
-
items.push(new TestTreeItem(`GIVEN: ${given.key || 'Test Scenario'}`, TreeItemType.File, vscode.TreeItemCollapsibleState.None, { description: givenPassed ? 'PASSED' : 'FAILED' }, undefined, givenPassed ?
|
|
357
|
-
new vscode.ThemeIcon('check') :
|
|
358
|
-
new vscode.ThemeIcon('error')));
|
|
359
|
-
// Add features for this given
|
|
360
|
-
if (given.features && given.features.length > 0) {
|
|
361
|
-
const featuresItem = new TestTreeItem(`Features (${given.features.length})`, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, { description: 'Features tested in this scenario' }, undefined, new vscode.ThemeIcon('symbol-array'));
|
|
362
|
-
items.push(featuresItem);
|
|
363
|
-
for (const feature of given.features) {
|
|
364
|
-
items.push(new TestTreeItem(feature, TreeItemType.File, vscode.TreeItemCollapsibleState.None, { description: 'Feature' }, undefined, new vscode.ThemeIcon('symbol-string')));
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
// Add WHEN steps
|
|
368
|
-
if (given.whens && given.whens.length > 0) {
|
|
369
|
-
const whensItem = new TestTreeItem(`WHEN Steps (${given.whens.length})`, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, { description: 'Actions performed' }, undefined, new vscode.ThemeIcon('list-ordered'));
|
|
370
|
-
items.push(whensItem);
|
|
371
|
-
for (let i = 0; i < given.whens.length; i++) {
|
|
372
|
-
const when = given.whens[i];
|
|
373
|
-
items.push(new TestTreeItem(`Step ${i + 1}: ${when.name || 'Action'}`, TreeItemType.File, vscode.TreeItemCollapsibleState.None, {
|
|
374
|
-
description: when.status || 'No status',
|
|
375
|
-
tooltip: when.error ? `Error: ${when.error}` : undefined
|
|
376
|
-
}, undefined, when.error ?
|
|
377
|
-
new vscode.ThemeIcon('error') :
|
|
378
|
-
new vscode.ThemeIcon('circle')));
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
// Add THEN assertions
|
|
382
|
-
if (given.thens && given.thens.length > 0) {
|
|
383
|
-
const thensItem = new TestTreeItem(`THEN Assertions (${given.thens.length})`, TreeItemType.File, vscode.TreeItemCollapsibleState.Collapsed, { description: 'Expected outcomes' }, undefined, new vscode.ThemeIcon('checklist'));
|
|
384
|
-
items.push(thensItem);
|
|
385
|
-
for (let i = 0; i < given.thens.length; i++) {
|
|
386
|
-
const then = given.thens[i];
|
|
387
|
-
const assertionPassed = !then.error;
|
|
388
|
-
items.push(new TestTreeItem(`Assertion ${i + 1}: ${then.name || 'Check'}`, TreeItemType.File, vscode.TreeItemCollapsibleState.None, {
|
|
389
|
-
description: assertionPassed ? 'PASSED' : 'FAILED',
|
|
390
|
-
tooltip: then.error ? `Error: ${then.error}` : undefined
|
|
391
|
-
}, undefined, assertionPassed ?
|
|
392
|
-
new vscode.ThemeIcon('check') :
|
|
393
|
-
new vscode.ThemeIcon('error')));
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
// Add error if present
|
|
397
|
-
if (given.error) {
|
|
398
|
-
items.push(new TestTreeItem('Error Details', TreeItemType.File, vscode.TreeItemCollapsibleState.None, { description: given.error }, undefined, new vscode.ThemeIcon('warning')));
|
|
399
|
-
}
|
|
400
|
-
return items;
|
|
401
|
-
}
|
|
402
|
-
catch (error) {
|
|
403
|
-
return [
|
|
404
|
-
new TestTreeItem('Error reading test details', TreeItemType.File, vscode.TreeItemCollapsibleState.None, { description: String(error) }, undefined, new vscode.ThemeIcon('error'))
|
|
405
|
-
];
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
}
|