-
Notifications
You must be signed in to change notification settings - Fork 124
/
extension.ts
101 lines (83 loc) · 2.74 KB
/
extension.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'use strict';
import { join } from 'path';
import * as vscode from 'vscode';
import { parseTestName, platformWin32, quote, slash } from './util';
export function activate(context: vscode.ExtensionContext) {
let terminal: vscode.Terminal | null;
function getJestPath(): string {
const jestPath: string = vscode.workspace.getConfiguration().get('jestrunner.jestPath');
if (jestPath) {
return jestPath;
}
const jestDirectoy = platformWin32() ? 'node_modules/jest/bin/jest.js' : 'node_modules/.bin/jest';
return join(vscode.workspace.workspaceFolders[0].uri.fsPath, jestDirectoy);
}
function getConfigPath(): string {
const configPath: string = vscode.workspace.getConfiguration().get('jestrunner.configPath');
if (!configPath) {
return '';
}
return join(vscode.workspace.workspaceFolders[0].uri.fsPath, configPath);
}
vscode.window.onDidCloseTerminal(() => {
terminal = null;
});
const runJest = vscode.commands.registerCommand('extension.runJest', async () => {
const editor = vscode.window.activeTextEditor;
if (!editor) {
return;
}
const configuration = slash(getConfigPath());
const testName = parseTestName(editor);
const fileName = slash(editor.document.fileName);
const jestPath = slash(getJestPath());
let command = `node ${quote(jestPath)} ${quote(fileName)}`;
if (configuration) {
command += ` -c ${quote(configuration)}`;
}
if (testName !== '') {
command += ` -t ${quote(testName)}`;
}
await editor.document.save();
if (!terminal) {
terminal = vscode.window.createTerminal('jest');
}
terminal.show();
await vscode.commands.executeCommand('workbench.action.terminal.clear');
terminal.sendText(command);
});
const debugJest = vscode.commands.registerCommand('extension.debugJest', async () => {
const editor = vscode.window.activeTextEditor;
if (!editor) {
return;
}
const configuration = slash(getConfigPath());
const testName = parseTestName(editor);
const config = {
args: [],
console: 'integratedTerminal',
internalConsoleOptions: 'neverOpen',
name: 'Debug Jest Tests',
program: getJestPath(),
request: 'launch',
type: 'node'
};
config.args.push('-i');
config.args.push(slash(editor.document.fileName));
if (configuration) {
config.args.push('-c');
config.args.push(configuration);
}
if (testName !== '') {
config.args.push('-t');
config.args.push(testName);
}
await editor.document.save();
vscode.debug.startDebugging(undefined, config);
});
context.subscriptions.push(runJest);
context.subscriptions.push(debugJest);
}
export function deactivate() {
// deactivate
}