This commit is contained in:
meganrogge
2023-09-21 09:15:31 -07:00
parent 2f4371e8bd
commit c20815788f
2 changed files with 27 additions and 16 deletions

View File

@@ -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) {
const status: ITerminalStatus = { id: TASK_TERMINAL_STATUS_ID, severity: Severity.Info };
terminal.statusList.add(status);
this._register(problemMatcher.onDidFindFirstMatch(() => {
this._marker = terminal.registerMarker();
if (this._marker) {
this._register(this._marker);
}
}));
this._register(problemMatcher.onDidFindErrors(() => {
if (this._marker) {

View File

@@ -5,7 +5,7 @@
import { ok } from 'assert';
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 { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService';
import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService';
@@ -34,8 +34,14 @@ class TestAudioCueService implements Partial<IAudioCueService> {
}
}
class TestTerminal implements Partial<ITerminalInstance> {
statusList: TerminalStatusList = new TerminalStatusList(new TestConfigurationService());
class TestTerminal extends Disposable implements Partial<ITerminalInstance> {
statusList: TerminalStatusList = this._register(new TerminalStatusList(new TestConfigurationService()));
constructor() {
super();
}
override dispose(): void {
super.dispose();
}
}
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>();
readonly onDidFindFirstMatch = this._onDidFindFirstMatch.event;
protected readonly _onDidFindErrors = new Emitter<void>();
@@ -62,7 +68,6 @@ class TestProblemCollector implements Partial<AbstractProblemCollector> {
}
suite('Task Terminal Status', () => {
let store: DisposableStore;
let instantiationService: TestInstantiationService;
let taskService: TestTaskService;
let taskTerminalStatus: TaskTerminalStatus;
@@ -70,22 +75,16 @@ suite('Task Terminal Status', () => {
let testTask: Task;
let problemCollector: AbstractProblemCollector;
let audioCueService: TestAudioCueService;
const store = ensureNoDisposablesAreLeakedInTestSuite();
setup(() => {
store = new DisposableStore();
instantiationService = new TestInstantiationService();
instantiationService = store.add(new TestInstantiationService());
taskService = new TestTaskService();
audioCueService = new TestAudioCueService();
taskTerminalStatus = new TaskTerminalStatus(taskService as any, audioCueService as any);
testTerminal = instantiationService.createInstance(TestTerminal) as any;
taskTerminalStatus = store.add(new TaskTerminalStatus(taskService as any, audioCueService as any));
testTerminal = store.add(instantiationService.createInstance(TestTerminal) as any);
testTask = instantiationService.createInstance(TestTask) as unknown as Task;
problemCollector = instantiationService.createInstance(TestProblemCollector) as any;
store.add(instantiationService);
store.add(taskTerminalStatus);
problemCollector = store.add(instantiationService.createInstance(TestProblemCollector) as any);
});
teardown(() => {
store.clear();
});
ensureNoDisposablesAreLeakedInTestSuite();
test('Should add failed status when there is an exit code on task end', async () => {
taskTerminalStatus.addTerminal(testTask, testTerminal, problemCollector);
taskService.triggerStateChange({ kind: TaskEventKind.ProcessStarted });