@difizen/mana-common
Version:
94 lines (86 loc) • 2.23 kB
text/typescript
import assert from 'assert';
import { Deferred, Disposable, noop } from './';
import { DisposableCollection } from './';
describe('disposable', () => {
it('#Disposable is', () => {
assert(Disposable.is({ dispose: noop }));
});
it('#Disposable create', () => {
let disposed = false;
const disposable = Disposable.create(() => {
disposed = true;
});
disposable.dispose();
assert(disposed);
});
it('#Disposable collection', async () => {
let disposeTimes = 0;
let disposed = false;
const collection = new DisposableCollection(
Disposable.create(() => {
disposeTimes += 1;
}),
);
collection.push(
Disposable.create(() => {
disposeTimes += 1;
}),
);
collection.push(
Disposable.create(() => {
disposeTimes += 1;
}),
Disposable.create(() => {
disposeTimes += 1;
}),
);
collection.pushAll([
Disposable.create(() => {
disposeTimes += 1;
}),
Disposable.create(() => {
disposeTimes += 1;
}),
]);
const onDisposeDeferred = new Deferred<void>();
collection.onDispose(() => {
disposed = true;
assert(disposed);
onDisposeDeferred.resolve();
});
collection.dispose();
await onDisposeDeferred.promise;
assert(disposeTimes === 6);
});
it('#Disposable collection error disposable', () => {
console.error = noop;
let disposeTimes = 0;
try {
const collection = new DisposableCollection(
Disposable.create(() => {
disposeTimes += 1;
throw new Error('Disposable collection error disposable');
}),
);
collection.dispose();
collection.dispose();
} catch (e) {
// noop
} finally {
assert(disposeTimes === 1);
}
});
it('#Disposable collection dispose add', () => {
let disposed = false;
const collection = new DisposableCollection();
const disposable = collection.push(
Disposable.create(() => {
disposed = true;
throw new Error('Disposable collection error disposable');
}),
);
disposable.dispose();
collection.dispose();
assert(!disposed);
});
});