mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-20 02:08:47 +00:00
This commit is contained in:
@@ -52,11 +52,23 @@ export class TaskTerminalStatus extends Disposable {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override dispose(): void {
|
||||||
|
super.dispose();
|
||||||
|
for (const terminalData of this.terminalMap.values()) {
|
||||||
|
terminalData.disposeListener?.dispose();
|
||||||
|
}
|
||||||
|
this.terminalMap.clear();
|
||||||
|
this._marker?.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
addTerminal(task: Task, terminal: ITerminalInstance, problemMatcher: AbstractProblemCollector) {
|
addTerminal(task: Task, terminal: ITerminalInstance, problemMatcher: AbstractProblemCollector) {
|
||||||
const status: ITerminalStatus = { id: TASK_TERMINAL_STATUS_ID, severity: Severity.Info };
|
const status: ITerminalStatus = { id: TASK_TERMINAL_STATUS_ID, severity: Severity.Info };
|
||||||
terminal.statusList.add(status);
|
terminal.statusList.add(status);
|
||||||
this._register(problemMatcher.onDidFindFirstMatch(() => {
|
this._register(problemMatcher.onDidFindFirstMatch(() => {
|
||||||
this._marker = terminal.registerMarker();
|
this._marker = terminal.registerMarker();
|
||||||
|
if (this._marker) {
|
||||||
|
this._register(this._marker);
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
this._register(problemMatcher.onDidFindErrors(() => {
|
this._register(problemMatcher.onDidFindErrors(() => {
|
||||||
if (this._marker) {
|
if (this._marker) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { ok } from 'assert';
|
import { ok } from 'assert';
|
||||||
import { Emitter, Event } from 'vs/base/common/event';
|
import { Emitter, Event } from 'vs/base/common/event';
|
||||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
import { Disposable } from 'vs/base/common/lifecycle';
|
||||||
import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
|
import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
|
||||||
import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService';
|
import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService';
|
||||||
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
|
||||||
@@ -34,8 +34,14 @@ class TestAudioCueService implements Partial<IAudioCueService> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestTerminal implements Partial<ITerminalInstance> {
|
class TestTerminal extends Disposable implements Partial<ITerminalInstance> {
|
||||||
statusList: TerminalStatusList = new TerminalStatusList(new TestConfigurationService());
|
statusList: TerminalStatusList = this._register(new TerminalStatusList(new TestConfigurationService()));
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
override dispose(): void {
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestTask extends CommonTask {
|
class TestTask extends CommonTask {
|
||||||
@@ -52,7 +58,7 @@ class TestTask extends CommonTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestProblemCollector implements Partial<AbstractProblemCollector> {
|
class TestProblemCollector extends Disposable implements Partial<AbstractProblemCollector> {
|
||||||
protected readonly _onDidFindFirstMatch = new Emitter<void>();
|
protected readonly _onDidFindFirstMatch = new Emitter<void>();
|
||||||
readonly onDidFindFirstMatch = this._onDidFindFirstMatch.event;
|
readonly onDidFindFirstMatch = this._onDidFindFirstMatch.event;
|
||||||
protected readonly _onDidFindErrors = new Emitter<void>();
|
protected readonly _onDidFindErrors = new Emitter<void>();
|
||||||
@@ -62,7 +68,6 @@ class TestProblemCollector implements Partial<AbstractProblemCollector> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
suite('Task Terminal Status', () => {
|
suite('Task Terminal Status', () => {
|
||||||
let store: DisposableStore;
|
|
||||||
let instantiationService: TestInstantiationService;
|
let instantiationService: TestInstantiationService;
|
||||||
let taskService: TestTaskService;
|
let taskService: TestTaskService;
|
||||||
let taskTerminalStatus: TaskTerminalStatus;
|
let taskTerminalStatus: TaskTerminalStatus;
|
||||||
@@ -70,22 +75,16 @@ suite('Task Terminal Status', () => {
|
|||||||
let testTask: Task;
|
let testTask: Task;
|
||||||
let problemCollector: AbstractProblemCollector;
|
let problemCollector: AbstractProblemCollector;
|
||||||
let audioCueService: TestAudioCueService;
|
let audioCueService: TestAudioCueService;
|
||||||
|
const store = ensureNoDisposablesAreLeakedInTestSuite();
|
||||||
setup(() => {
|
setup(() => {
|
||||||
store = new DisposableStore();
|
instantiationService = store.add(new TestInstantiationService());
|
||||||
instantiationService = new TestInstantiationService();
|
|
||||||
taskService = new TestTaskService();
|
taskService = new TestTaskService();
|
||||||
audioCueService = new TestAudioCueService();
|
audioCueService = new TestAudioCueService();
|
||||||
taskTerminalStatus = new TaskTerminalStatus(taskService as any, audioCueService as any);
|
taskTerminalStatus = store.add(new TaskTerminalStatus(taskService as any, audioCueService as any));
|
||||||
testTerminal = instantiationService.createInstance(TestTerminal) as any;
|
testTerminal = store.add(instantiationService.createInstance(TestTerminal) as any);
|
||||||
testTask = instantiationService.createInstance(TestTask) as unknown as Task;
|
testTask = instantiationService.createInstance(TestTask) as unknown as Task;
|
||||||
problemCollector = instantiationService.createInstance(TestProblemCollector) as any;
|
problemCollector = store.add(instantiationService.createInstance(TestProblemCollector) as any);
|
||||||
store.add(instantiationService);
|
|
||||||
store.add(taskTerminalStatus);
|
|
||||||
});
|
});
|
||||||
teardown(() => {
|
|
||||||
store.clear();
|
|
||||||
});
|
|
||||||
ensureNoDisposablesAreLeakedInTestSuite();
|
|
||||||
test('Should add failed status when there is an exit code on task end', async () => {
|
test('Should add failed status when there is an exit code on task end', async () => {
|
||||||
taskTerminalStatus.addTerminal(testTask, testTerminal, problemCollector);
|
taskTerminalStatus.addTerminal(testTask, testTerminal, problemCollector);
|
||||||
taskService.triggerStateChange({ kind: TaskEventKind.ProcessStarted });
|
taskService.triggerStateChange({ kind: TaskEventKind.ProcessStarted });
|
||||||
|
|||||||
Reference in New Issue
Block a user