@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering.
286 lines • 12.2 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { Disposable, DisposableSet, DisposableDelegate, } from './disposable';
class TestDisposable {
constructor() {
this.count = 0;
}
get disposed() {
return this.count > 0;
}
dispose() {
this.count += 1;
}
}
class AOPTest extends Disposable {
constructor() {
super(...arguments);
this.a = 1;
}
dispose() {
this.a = 0;
}
}
__decorate([
Disposable.dispose()
], AOPTest.prototype, "dispose", null);
describe('disposable', () => {
describe('Disablable', () => {
it('should be `false` before object is disposed', () => {
const obj = new Disposable();
expect(obj.disposed).toBe(false);
});
it('should be `true` after object is disposed', () => {
const obj = new Disposable();
obj.dispose();
expect(obj.disposed).toBe(true);
});
// it('should add `unload` listener for ie', () => {
// const tmp = Platform as any
// tmp.IS_IE = true
// const obj = new Disposable()
// expect(obj.disposed).toBe(false)
// tmp.IS_IE = false
// window.dispatchEvent(new Event('unload'))
// expect(obj.disposed).toBe(true)
// })
it('shoule work with `aop`', () => {
const obj = new AOPTest();
expect(obj.disposed).toBe(false);
expect(obj.a).toBe(1);
obj.dispose();
expect(obj.disposed).toBe(true);
expect(obj.a).toBe(0);
obj.dispose();
expect(obj.disposed).toBe(true);
expect(obj.a).toBe(0);
});
});
describe('DisposableDelegate', () => {
describe('#constructor', () => {
it('should accept a callback', () => {
const delegate = new DisposableDelegate(() => { });
expect(delegate instanceof DisposableDelegate).toBeTruthy();
});
});
describe('#disposed', () => {
it('should be `false` before object is disposed', () => {
const delegate = new DisposableDelegate(() => { });
expect(delegate.disposed).toBe(false);
});
it('should be `true` after object is disposed', () => {
const delegate = new DisposableDelegate(() => { });
delegate.dispose();
expect(delegate.disposed).toBe(true);
});
});
describe('#dispose', () => {
it('should invoke a callback when disposed', () => {
let called = false;
const delegate = new DisposableDelegate(() => (called = true));
expect(called).toBe(false);
delegate.dispose();
expect(called).toBe(true);
});
it('should ignore multiple calls to `dispose`', () => {
let count = 0;
const delegate = new DisposableDelegate(() => (count += 1));
expect(count).toBe(0);
delegate.dispose();
delegate.dispose();
delegate.dispose();
expect(count).toBe(1);
});
});
});
describe('DisposableSet', () => {
describe('#constructor', () => {
it('should accept no arguments', () => {
const set = new DisposableSet();
expect(set instanceof DisposableSet).toBeTruthy();
});
});
describe('#disposed', () => {
it('should be `false` before object is disposed', () => {
const set = new DisposableSet();
expect(set.disposed).toBe(false);
});
it('should be `true` after object is disposed', () => {
const set = new DisposableSet();
set.dispose();
expect(set.disposed).toBe(true);
});
});
describe('#dispose', () => {
it('should dispose all items in the set', () => {
const item1 = new TestDisposable();
const item2 = new TestDisposable();
const item3 = new TestDisposable();
const set = DisposableSet.from([item1, item2, item3]);
expect(item1.count).toBe(0);
expect(item2.count).toBe(0);
expect(item3.count).toBe(0);
set.dispose();
expect(item1.count).toBe(1);
expect(item2.count).toBe(1);
expect(item3.count).toBe(1);
});
it('should dipose items in the order they were added', () => {
const values = [];
const item1 = new DisposableDelegate(() => values.push(0));
const item2 = new DisposableDelegate(() => values.push(1));
const item3 = new DisposableDelegate(() => values.push(2));
const set = DisposableSet.from([item1, item2, item3]);
expect(values).toEqual([]);
set.dispose();
expect(values).toEqual([0, 1, 2]);
});
it('should ignore multiple calls to `dispose`', () => {
const item1 = new TestDisposable();
const item2 = new TestDisposable();
const item3 = new TestDisposable();
const set = DisposableSet.from([item1, item2, item3]);
expect(item1.count).toBe(0);
expect(item2.count).toBe(0);
expect(item3.count).toBe(0);
set.dispose();
set.dispose();
set.dispose();
expect(item1.count).toBe(1);
expect(item2.count).toBe(1);
expect(item3.count).toBe(1);
});
});
describe('#add', () => {
it('should add items to the set', () => {
const item1 = new TestDisposable();
const item2 = new TestDisposable();
const item3 = new TestDisposable();
const set = new DisposableSet();
set.add(item1);
set.add(item2);
set.add(item3);
expect(item1.count).toBe(0);
expect(item2.count).toBe(0);
expect(item3.count).toBe(0);
set.dispose();
expect(item1.count).toBe(1);
expect(item2.count).toBe(1);
expect(item3.count).toBe(1);
});
it('should maintain insertion order', () => {
const values = [];
const item1 = new DisposableDelegate(() => values.push(0));
const item2 = new DisposableDelegate(() => values.push(1));
const item3 = new DisposableDelegate(() => values.push(2));
const set = DisposableSet.from([item1]);
set.add(item2);
set.add(item3);
expect(values).toEqual([]);
set.dispose();
expect(values).toEqual([0, 1, 2]);
});
it('should ignore duplicate items', () => {
const values = [];
const item1 = new DisposableDelegate(() => values.push(0));
const item2 = new DisposableDelegate(() => values.push(1));
const item3 = new DisposableDelegate(() => values.push(2));
const set = DisposableSet.from([item1]);
set.add(item2);
set.add(item3);
set.add(item3);
set.add(item2);
set.add(item1);
expect(values).toEqual([]);
set.dispose();
expect(values).toEqual([0, 1, 2]);
});
});
describe('#contains', () => {
it('should remove all items from the set after disposed', () => {
const item1 = new TestDisposable();
const item2 = new TestDisposable();
const item3 = new TestDisposable();
const set = new DisposableSet();
set.add(item1);
set.add(item2);
set.add(item3);
expect(set.contains(item1)).toBe(true);
expect(set.contains(item2)).toBe(true);
expect(set.contains(item3)).toBe(true);
set.dispose();
expect(set.contains(item1)).toBe(false);
expect(set.contains(item2)).toBe(false);
expect(set.contains(item3)).toBe(false);
});
});
describe('#remove', () => {
it('should remove items from the set', () => {
const item1 = new TestDisposable();
const item2 = new TestDisposable();
const item3 = new TestDisposable();
const set = DisposableSet.from([item1, item2, item3]);
expect(item1.count).toBe(0);
expect(item2.count).toBe(0);
expect(item3.count).toBe(0);
set.remove(item2);
set.dispose();
expect(item1.count).toBe(1);
expect(item2.count).toBe(0);
expect(item3.count).toBe(1);
});
it('should maintain insertion order', () => {
const values = [];
const item1 = new DisposableDelegate(() => values.push(0));
const item2 = new DisposableDelegate(() => values.push(1));
const item3 = new DisposableDelegate(() => values.push(2));
const set = DisposableSet.from([item1, item2, item3]);
expect(values).toEqual([]);
set.remove(item1);
set.dispose();
expect(values).toEqual([1, 2]);
});
it('should ignore missing items', () => {
const values = [];
const item1 = new DisposableDelegate(() => values.push(0));
const item2 = new DisposableDelegate(() => values.push(1));
const item3 = new DisposableDelegate(() => values.push(2));
const set = DisposableSet.from([item1, item2]);
expect(values).toEqual([]);
set.remove(item3);
set.dispose();
expect(values).toEqual([0, 1]);
});
});
describe('#clear', () => {
it('should remove all items from the set', () => {
const item1 = new TestDisposable();
const item2 = new TestDisposable();
const item3 = new TestDisposable();
const set = DisposableSet.from([item1, item2, item3]);
expect(item1.count).toBe(0);
expect(item2.count).toBe(0);
expect(item3.count).toBe(0);
set.clear();
set.dispose();
expect(item1.count).toBe(0);
expect(item2.count).toBe(0);
expect(item3.count).toBe(0);
});
});
describe('#from', () => {
it('should accept an iterable of disposable items', () => {
const item1 = new TestDisposable();
const item2 = new TestDisposable();
const item3 = new TestDisposable();
const set = DisposableSet.from([item1, item2, item3]);
expect(set instanceof DisposableSet).toBeTruthy();
});
});
});
});
//# sourceMappingURL=disposable.test.js.map