remsit
Version:
Alternative fast and light library version - observable.
261 lines (230 loc) • 11.1 kB
text/typescript
import {suite, test} from '@testdeck/mocha';
import * as _chai from 'chai';
import {expect} from 'chai';
import {ICollector} from "../src/Libraries/Observables/Types";
import {Collector} from "../src/Libraries/Observables/Collector";
import {Observable} from "../src/Libraries/Observables/Observable";
_chai.should();
_chai.expect;
class CollectorUnitTest {
private COLLECTOR: ICollector;
before() {
this.COLLECTOR = new Collector();
}
'collector is created'() {
expect(this.COLLECTOR.size()).to.be.eql(0);
}
'collector collect one subscriber'() {
const observable$ = new Observable(0);
this.COLLECTOR.collect(observable$.subscribe(value => value));
expect(this.COLLECTOR.size()).to.be.equal(1);
}
'collector collect two subscribers'() {
const observable$ = new Observable(0);
this.COLLECTOR.collect(observable$.subscribe(value => value));
this.COLLECTOR.collect(observable$.subscribe(value => value));
expect(this.COLLECTOR.size()).to.be.equal(2);
}
'collector collect three subscribers'() {
const observable$ = new Observable(0);
this.COLLECTOR.collect(
observable$.subscribe(value => value),
observable$.subscribe(value => value),
observable$.subscribe(value => value),
);
expect(this.COLLECTOR.size()).to.be.equal(3);
}
'collector collect ten subscribers'() {
const observable$ = new Observable(0);
for (let i = 0; i < 10; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
}
'collector collect zero subscribers'() {
this.COLLECTOR.collect();
expect(this.COLLECTOR.size()).to.be.equal(0);
}
'collector collect one subscriber and unsubscribe'() {
const observable$ = new Observable(0);
const subscriptionLike = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike);
expect(this.COLLECTOR.size()).to.be.equal(1);
this.COLLECTOR.unsubscribe(subscriptionLike);
expect(this.COLLECTOR.size()).to.be.equal(0);
}
'collector collect one subscriber and unsubscribe all'() {
const observable$ = new Observable(0);
const subscriptionLike = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike);
expect(this.COLLECTOR.size()).to.be.equal(1);
this.COLLECTOR.unsubscribeAll();
expect(this.COLLECTOR.size()).to.be.equal(0);
}
'collector collect zero subscribers and unsubscribe'() {
const observable$ = new Observable(0);
const subscriptionLike = observable$.subscribe(value => value);
this.COLLECTOR.collect();
expect(this.COLLECTOR.size()).to.be.equal(0);
this.COLLECTOR.unsubscribe(subscriptionLike);
expect(this.COLLECTOR.size()).to.be.equal(0);
expect((<any>subscriptionLike).observable).to.be.equal(null);
}
'collector collect zero subscribers and unsubscribeAll'() {
const observable$ = new Observable(0);
const subscriptionLike = observable$.subscribe(value => value);
this.COLLECTOR.collect();
expect(this.COLLECTOR.size()).to.be.equal(0);
this.COLLECTOR.unsubscribeAll();
expect(this.COLLECTOR.size()).to.be.equal(0);
expect(!!(<any>subscriptionLike).observable).to.be.equal(true);
}
'collector collect two subscribers and unsubscribe one'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
const subscriptionLike2 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1, subscriptionLike2);
expect(this.COLLECTOR.size()).to.be.equal(2);
this.COLLECTOR.unsubscribe(subscriptionLike1);
expect(this.COLLECTOR.size()).to.be.equal(1);
}
'collector collect two subscribers and unsubscribe two'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
const subscriptionLike2 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1, subscriptionLike2);
expect(this.COLLECTOR.size()).to.be.equal(2);
this.COLLECTOR.unsubscribe(subscriptionLike1);
this.COLLECTOR.unsubscribe(subscriptionLike2);
expect(this.COLLECTOR.size()).to.be.equal(0);
}
'collector collect two subscribers and unsubscribe all'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
const subscriptionLike2 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1, subscriptionLike2);
expect(this.COLLECTOR.size()).to.be.equal(2);
this.COLLECTOR.unsubscribeAll();
expect(this.COLLECTOR.size()).to.be.equal(0);
}
'collector collect ten subscribers and unsubscribe one'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
for (let i = 0; i < 9; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.unsubscribe(subscriptionLike1);
expect(this.COLLECTOR.size()).to.be.equal(9);
}
'collector collect ten subscribers and unsubscribe two'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
const subscriptionLike2 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
this.COLLECTOR.collect(subscriptionLike2);
for (let i = 0; i < 8; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.unsubscribe(subscriptionLike1);
this.COLLECTOR.unsubscribe(subscriptionLike2);
expect(this.COLLECTOR.size()).to.be.equal(8);
}
'collector collect ten subscribers and unsubscribe all'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
const subscriptionLike2 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
this.COLLECTOR.collect(subscriptionLike2);
for (let i = 0; i < 8; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.unsubscribeAll();
expect(this.COLLECTOR.size()).to.be.equal(0);
}
'collector collect one subscriber and destroy'() {
const observable$ = new Observable(0);
const subscriptionLike = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike);
expect(this.COLLECTOR.size()).to.be.equal(1);
this.COLLECTOR.destroy();
expect(this.COLLECTOR.size()).to.be.equal(0);
expect(this.COLLECTOR.isDestroyed).to.be.equal(true);
}
'collector collect two subscribers and destroy'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
const subscriptionLike2 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1, subscriptionLike2);
expect(this.COLLECTOR.size()).to.be.equal(2);
this.COLLECTOR.destroy();
expect(this.COLLECTOR.size()).to.be.equal(0);
expect(this.COLLECTOR.isDestroyed).to.be.equal(true);
}
'collector collect ten subscribers and destroy'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
for (let i = 0; i < 9; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.destroy();
expect(this.COLLECTOR.size()).to.be.equal(0);
expect(this.COLLECTOR.isDestroyed).to.be.equal(true);
}
'collector collect ten subscribers, destroy and collect '() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
for (let i = 0; i < 9; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.destroy();
expect(this.COLLECTOR.size()).to.be.equal(0);
expect(this.COLLECTOR.isDestroyed).to.be.equal(true);
expect(this.COLLECTOR.collect()).to.be.equal(undefined);
}
'collector collect ten subscribers, destroy and unsubscribe '() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
for (let i = 0; i < 9; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.destroy();
expect(this.COLLECTOR.size()).to.be.equal(0);
expect(this.COLLECTOR.isDestroyed).to.be.equal(true);
expect(this.COLLECTOR.unsubscribe(subscriptionLike1)).to.be.equal(undefined);
}
'collector collect ten subscribers, destroy and unsubscribeAll '() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
for (let i = 0; i < 9; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.destroy();
expect(this.COLLECTOR.size()).to.be.equal(0);
expect(this.COLLECTOR.isDestroyed).to.be.equal(true);
expect(this.COLLECTOR.unsubscribeAll()).to.be.equal(undefined);
}
'collector collect ten subscribers, unsubscribe undefined subs'() {
const observable$ = new Observable(0);
const subscriptionLike1 = observable$.subscribe(value => value);
this.COLLECTOR.collect(subscriptionLike1);
for (let i = 0; i < 9; i++) {
this.COLLECTOR.collect(observable$.subscribe(value => value));
}
expect(this.COLLECTOR.size()).to.be.equal(10);
this.COLLECTOR.unsubscribe(undefined);
expect(this.COLLECTOR.size()).to.be.equal(10);
}
}