From d3976c05f17acd6b2bf0a7c735867dabad5f75bb Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sat, 8 Oct 2022 09:27:58 -0700 Subject: [PATCH] Fix marker dispose unit tests --- src/browser/Terminal.test.ts | 1 - src/common/buffer/Marker.ts | 35 ++++++++++++++++++++++++----------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/browser/Terminal.test.ts b/src/browser/Terminal.test.ts index eaf420eda..a9d0b772a 100644 --- a/src/browser/Terminal.test.ts +++ b/src/browser/Terminal.test.ts @@ -1378,7 +1378,6 @@ describe('Terminal', () => { assert.deepEqual(disposeStack, [markers[0], markers[1]]); // trimmed marker objs should be disposed assert.deepEqual(disposeStack.map(el => el.isDisposed), [true, true]); - assert.deepEqual(disposeStack.map(el => (el as any)._isDisposed), [true, true]); // trimmed markers should contain line -1 assert.deepEqual(disposeStack.map(el => el.line), [-1, -1]); }); diff --git a/src/common/buffer/Marker.ts b/src/common/buffer/Marker.ts index 54bcb84f7..e639a6849 100644 --- a/src/common/buffer/Marker.ts +++ b/src/common/buffer/Marker.ts @@ -4,27 +4,40 @@ */ import { EventEmitter } from 'common/EventEmitter'; -import { Disposable, toDisposable } from 'common/Lifecycle'; -import { IMarker } from 'common/Types'; +import { disposeArray } from 'common/Lifecycle'; +import { IDisposable, IMarker } from 'common/Types'; -export class Marker extends Disposable implements IMarker { +export class Marker implements IMarker { private static _nextId = 1; + public isDisposed: boolean = false; + private _disposables: IDisposable[] = []; + private _id: number = Marker._nextId++; public get id(): number { return this._id; } - private readonly _onDispose = this.register(new EventEmitter()); - public readonly onDispose = this._onDispose.event; - public get isDisposed(): boolean { return this._isDisposed; } + private readonly _onDispose = new EventEmitter(); + public readonly onDispose = this._onDispose.event; constructor( public line: number ) { - super(); - this.register(toDisposable(() => { - this.line = -1; - this._onDispose.fire(); - })); + } + + public dispose(): void { + if (this.isDisposed) { + return; + } + this.isDisposed = true; + this.line = -1; + // Emit before super.dispose such that dispose listeners get a change to react + this._onDispose.fire(); + disposeArray(this._disposables); + } + + public register(disposable: IDisposable): void { + this._disposables.push(disposable); + this._disposables.length = 0; } }