Skip to content

Commit 8203db3

Browse files
committed
remove "open" dependency and use vscode.env.openExternal
1 parent 9e2c02c commit 8203db3

File tree

4 files changed

+62
-122
lines changed

4 files changed

+62
-122
lines changed

package.json

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Robot Framework support for Visual Studio Code",
55
"icon": "images/icon.png",
66
"publisher": "d-biehl",
7-
"version": "0.1.0-alpha.5",
7+
"version": "0.1.0-alpha.5",
88
"repository": {
99
"type": "git",
1010
"url": "https://github.com/d-biehl/robotcode.git"
@@ -216,16 +216,8 @@
216216
"scope": "resource"
217217
},
218218
"robotcode.run.openReportAfterRun": {
219-
"type": "string",
220-
"enum": [
221-
"disabled",
222-
"external"
223-
],
224-
"enumDescriptions": [
225-
"Do not open the result report",
226-
"Opens the report in an external browser."
227-
],
228-
"default": "none",
219+
"type": "boolean",
220+
"default": false,
229221
"description": "Defines if the test report should be opened a run session automatically.",
230222
"scope": "resource"
231223
},
@@ -258,7 +250,7 @@
258250
}
259251
}
260252
}
261-
],
253+
],
262254
"breakpoints": [
263255
{
264256
"language": "robotframework"
@@ -391,19 +383,14 @@
391383
"pretest": "npm run compile && npm run lint",
392384
"lint": "eslint --ext .ts,.tsx,.js .",
393385
"lint-fix": "eslint --ext .ts,.tsx,.js --fix .",
394-
"test": "node ./out/test/runTest.js"
386+
"test": "node ./out/test/runTest.js"
395387
},
396388
"extensionDependencies": [
397389
"ms-python.python"
398390
],
399391
"dependencies": {
400-
"open": "^8.2.1",
401-
"vscode-debugadapter": "^1.49.0",
402-
"vscode-debugprotocol": "^1.49.0",
403-
"vscode-languageclient": "^7.0.0",
404-
"vscode-languageserver-protocol": "^3.16.0",
405-
"vscode-test-adapter-api": "^1.9.0",
406-
"vscode-test-adapter-util": "^0.7.1"
392+
"vscode-debugadapter": "^1.49.0",
393+
"vscode-languageclient": "^7.0.0"
407394
},
408395
"devDependencies": {
409396
"@types/glob": "^7.1.4",
@@ -430,7 +417,7 @@
430417
"ts-loader": "^9.2.5",
431418
"typescript": "^4.4.2",
432419
"vsce": "^1.96.2",
433-
"vscode-debugadapter-testsupport": "^1.49.0",
420+
"vscode-debugadapter-testsupport": "^1.49.0",
434421
"vscode-test": "^1.6.1",
435422
"webpack": "^5.51.1",
436423
"webpack-cli": "^4.8.0"

vscode-client/debugmanager.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import * as path from "path";
22
import * as vscode from "vscode";
3-
import openExternal = require("open");
43
import { PythonManager } from "./pythonmanger";
54
import { CONFIG_SECTION } from "./config";
65
import { LanguageClientsManager } from "./languageclientsmanger";
@@ -274,11 +273,8 @@ export class DebugManager {
274273
if (reportFile) {
275274
const config = vscode.workspace.getConfiguration(CONFIG_SECTION, session.workspaceFolder);
276275

277-
switch (config.get<string>("run.openReportAfterRun")) {
278-
case "disabled":
279-
return;
280-
case "external":
281-
openExternal(reportFile);
276+
if (config.get<boolean>("run.openReportAfterRun")) {
277+
vscode.env.openExternal(vscode.Uri.file(reportFile));
282278
}
283279
}
284280
}

vscode-client/extension.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import * as vscode from "vscode";
2-
import { CONFIG_SECTION } from "./config";
32
import { DebugManager } from "./debugmanager";
43
import { LanguageClientsManager } from "./languageclientsmanger";
54
import { PythonManager } from "./pythonmanger";
6-
import openExternal = require("open");
75
import { TestControllerManager } from "./testcontrollermanager";
86

97
class TerminalLink extends vscode.TerminalLink {
@@ -44,16 +42,7 @@ export async function activateAsync(context: vscode.ExtensionContext): Promise<v
4442
return [];
4543
},
4644
handleTerminalLink(link: TerminalLink) {
47-
const config = vscode.workspace.getConfiguration(
48-
CONFIG_SECTION,
49-
vscode.workspace.getWorkspaceFolder(vscode.Uri.file(link.path))
50-
);
51-
52-
switch (config.get<string>("run.openReportAfterRun")) {
53-
default:
54-
openExternal(link.path);
55-
break;
56-
}
45+
vscode.env.openExternal(vscode.Uri.file(link.path));
5746
},
5847
}),
5948

vscode-client/testcontrollermanager.ts

Lines changed: 51 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as vscode from "vscode";
22
import { LanguageClientsManager, RobotTestItem } from "./languageclientsmanger";
3-
import { Mutex, sleep } from "./utils";
3+
import { Mutex } from "./utils";
44

55
export class TestControllerManager {
66
private _disposables: vscode.Disposable;
@@ -20,93 +20,15 @@ export class TestControllerManager {
2020
"Run Tests",
2121
vscode.TestRunProfileKind.Run,
2222
async (request, token) => {
23-
token.onCancellationRequested(async (_e) => {
24-
console.log("hello canceled");
25-
});
26-
const runtest = async () => {
27-
const run = this.testController.createTestRun(request);
28-
29-
const items: vscode.TestItem[] = [];
30-
31-
if (request.include) {
32-
request.include.forEach((test) => items.push(test));
33-
} else {
34-
this.testController.items.forEach((test) => items.push(test));
35-
}
36-
37-
items.forEach((i) => run.enqueued(i));
38-
39-
function enqueItem(item: vscode.TestItem) {
40-
run.enqueued(item);
41-
42-
item.children.forEach((i) => enqueItem(i));
43-
}
44-
45-
async function runItem(item: vscode.TestItem) {
46-
run.started(item);
47-
run.appendOutput(`run item ${item.id}: ${item.label}`);
48-
run.appendOutput("\r\n");
49-
50-
if (item.children.size > 0) {
51-
const queue: vscode.TestItem[] = [];
52-
53-
item.children.forEach((i) => queue.push(i));
54-
55-
items.forEach((i) => run.enqueued(i));
56-
57-
for (const i of queue) {
58-
await runItem(i);
59-
}
60-
} else {
61-
await sleep(100);
62-
}
63-
64-
switch (Math.floor(Math.random() * 1)) {
65-
case 0:
66-
run.passed(item, Math.floor(Math.random() * 1000));
67-
break;
68-
case 1: {
69-
const m = new vscode.TestMessage("a failed test");
70-
71-
if (item.uri !== undefined && item.range !== undefined)
72-
m.location = new vscode.Location(item.uri, item.range);
73-
74-
run.failed(item, m, Math.floor(Math.random() * 1000));
75-
break;
76-
}
77-
case 2:
78-
run.skipped(item);
79-
break;
80-
case 3: {
81-
const m = new vscode.TestMessage("an errored test");
82-
83-
if (item.uri !== undefined && item.range !== undefined)
84-
m.location = new vscode.Location(item.uri, item.range);
85-
86-
run.errored(item, m, Math.floor(Math.random() * 1000));
87-
break;
88-
}
89-
}
90-
}
91-
92-
for (const i of items) {
93-
enqueItem(i);
94-
}
95-
96-
for (const i of items) {
97-
await runItem(i);
98-
}
99-
run.end();
100-
};
101-
await runtest();
23+
await this.runHandler(request, token);
10224
}
10325
);
10426

10527
this.debugProfile = this.testController.createRunProfile(
10628
"Debug",
10729
vscode.TestRunProfileKind.Debug,
108-
(request, _token) => {
109-
console.log(`${request}`);
30+
async (request, token) => {
31+
await this.runHandler(request, token);
11032
}
11133
);
11234

@@ -151,7 +73,7 @@ export class TestControllerManager {
15173
this.testController.dispose();
15274
}
15375

154-
public readonly testItems: WeakMap<vscode.WorkspaceFolder, RobotTestItem[] | undefined> = new Map();
76+
public readonly testItems = new WeakMap<vscode.WorkspaceFolder, RobotTestItem[] | undefined>();
15577

15678
public findRobotItem(item: vscode.TestItem): RobotTestItem | undefined {
15779
if (item.parent) {
@@ -316,4 +238,50 @@ export class TestControllerManager {
316238
}
317239
});
318240
}
241+
242+
private findWorkspaceForItem(item: vscode.TestItem): vscode.WorkspaceFolder | undefined {
243+
if (item.uri !== undefined) {
244+
return vscode.workspace.getWorkspaceFolder(item.uri);
245+
}
246+
247+
for (const ws of vscode.workspace.workspaceFolders ?? []) {
248+
if (this.testItems.has(ws)) {
249+
if (this.testItems.get(ws)?.find((w) => w.id === item.id) !== undefined) {
250+
return ws;
251+
}
252+
}
253+
}
254+
return undefined;
255+
}
256+
257+
private readonly testRuns = new Map<string, vscode.TestRun>();
258+
259+
private mapTestItemsToWorkspace(items: vscode.TestItem[]): Map<vscode.WorkspaceFolder, vscode.TestItem[]> {
260+
const folders = new Map<vscode.WorkspaceFolder, vscode.TestItem[]>();
261+
for (const i of items) {
262+
const ws = this.findWorkspaceForItem(i);
263+
if (ws !== undefined) {
264+
if (!folders.has(ws)) {
265+
folders.set(ws, []);
266+
}
267+
folders.get(ws)?.push(i);
268+
}
269+
}
270+
return folders;
271+
}
272+
273+
public async runHandler(request: vscode.TestRunRequest, _token: vscode.CancellationToken): Promise<void> {
274+
let includedItems: vscode.TestItem[] = [];
275+
276+
if (request.include) {
277+
includedItems = request.include;
278+
} else {
279+
this.testController.items.forEach((test) => includedItems.push(test));
280+
}
281+
282+
const included = this.mapTestItemsToWorkspace(includedItems);
283+
const excluded = this.mapTestItemsToWorkspace(request.exclude ?? []);
284+
285+
// const run = this.testController.createTestRun(request);
286+
}
319287
}

0 commit comments

Comments
 (0)