forked from recca0120/vscode-phpunit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommand-handler.ts
More file actions
70 lines (57 loc) · 1.91 KB
/
command-handler.ts
File metadata and controls
70 lines (57 loc) · 1.91 KB
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
import {
CancellationTokenSource,
commands,
TestItem,
TestRunProfile,
TestRunRequest,
window,
} from 'vscode';
import { TestFile } from './test-file';
import { Handler } from './handler';
export class CommandHandler {
constructor(private testRunProfile: TestRunProfile, private testData: Map<string, TestFile>) {}
runAll() {
return commands.registerCommand('phpunit.run-all', () => {
this.run(undefined);
});
}
runFile() {
return commands.registerCommand('phpunit.run-file', () => {
const testFile = this.findTestFile();
if (testFile) {
this.run(testFile.testItems);
}
});
}
runTestAtCursor() {
return commands.registerCommand('phpunit.run-test-at-cursor', () => {
const testFile = this.findTestFile();
if (testFile) {
this.run([
testFile.findTestItemByPosition(window.activeTextEditor!.selection.active)!,
]);
}
});
}
rerun(handler: Handler) {
return commands.registerCommand('phpunit.rerun', () => {
const latestTestRunRequest = handler.getLatestTestRunRequest();
return latestTestRunRequest
? this.runRequest(latestTestRunRequest)
: this.run(undefined);
});
}
private run(include: readonly TestItem[] | undefined) {
this.runRequest(new TestRunRequest(include, undefined, this.testRunProfile));
}
private runRequest(request: TestRunRequest) {
const cancellation = new CancellationTokenSource().token;
this.testRunProfile.runHandler(request, cancellation);
}
private findTestFile(): TestFile | null {
if (!window.activeTextEditor) {
return null;
}
return this.testData.get(window.activeTextEditor.document.uri.toString())!;
}
}