96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
/**
|
|
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
|
|
* @license MIT
|
|
*/
|
|
|
|
import { assert } from 'chai';
|
|
import { Disposable, MutableDisposable } from 'common/Lifecycle';
|
|
import { IDisposable } from 'common/Types';
|
|
|
|
class TestDisposable extends Disposable {
|
|
public get isDisposed(): boolean {
|
|
return this._isDisposed;
|
|
}
|
|
}
|
|
|
|
describe('Disposable', () => {
|
|
describe('register', () => {
|
|
it('should register disposables', () => {
|
|
const d = new TestDisposable();
|
|
const d2 = {
|
|
dispose: () => { throw new Error(); }
|
|
};
|
|
d.register(d2);
|
|
assert.throws(() => d.dispose());
|
|
});
|
|
});
|
|
describe('unregister', () => {
|
|
it('should unregister disposables', () => {
|
|
const d = new TestDisposable();
|
|
const d2 = {
|
|
dispose: () => { throw new Error(); }
|
|
};
|
|
d.register(d2);
|
|
d.unregister(d2);
|
|
assert.doesNotThrow(() => d.dispose());
|
|
});
|
|
});
|
|
describe('dispose', () => {
|
|
it('should set is disposed flag', () => {
|
|
const d = new TestDisposable();
|
|
assert.isFalse(d.isDisposed);
|
|
d.dispose();
|
|
assert.isTrue(d.isDisposed);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('MutableDisposable', () => {
|
|
const mutable = new MutableDisposable();
|
|
class TrackedDisposable extends Disposable {
|
|
public get isDisposed(): boolean { return this._isDisposed; }
|
|
}
|
|
describe('value', () => {
|
|
it('should set the value', () => {
|
|
const d1 = new TrackedDisposable();
|
|
mutable.value = d1;
|
|
assert.strictEqual(mutable.value, d1);
|
|
assert.isFalse(d1.isDisposed);
|
|
});
|
|
it('should dispose of any previous value', () => {
|
|
const d1 = new TrackedDisposable();
|
|
const d2 = new TrackedDisposable();
|
|
mutable.value = d1;
|
|
mutable.value = d2;
|
|
assert.strictEqual(mutable.value, d2);
|
|
assert.isTrue(d1.isDisposed);
|
|
assert.isFalse(d2.isDisposed);
|
|
});
|
|
});
|
|
describe('clear', () => {
|
|
it('should clear and dispose of the object', () => {
|
|
const d1 = new TrackedDisposable();
|
|
mutable.value = d1;
|
|
mutable.clear();
|
|
assert.strictEqual(mutable.value, undefined);
|
|
assert.isTrue(d1.isDisposed);
|
|
});
|
|
});
|
|
it('dispose', () => {
|
|
it('should dispose of the object', () => {
|
|
const d1 = new TrackedDisposable();
|
|
mutable.value = d1;
|
|
mutable.dispose();
|
|
assert.strictEqual(mutable.value, undefined);
|
|
assert.isTrue(d1.isDisposed);
|
|
});
|
|
it('should prevent using the MutableDisposable again', () => {
|
|
const d1 = new TrackedDisposable();
|
|
mutable.value = d1;
|
|
mutable.dispose();
|
|
mutable.value = new TrackedDisposable();
|
|
assert.strictEqual(mutable.value, undefined);
|
|
});
|
|
});
|
|
});
|