remsit
Version:
Alternative fast and light library version - observable.
1,274 lines (1,198 loc) • 50.6 kB
text/typescript
import {suite, test} from '@testdeck/mocha';
import * as _chai from 'chai';
import {expect} from 'chai';
import {Observable} from "../src/Libraries/Observables/Observable";
import {IOrder, IPause} from "../src/Libraries/Observables/Types";
_chai.should();
_chai.expect;
@suite
class ObservableUnitTest {
private OBSERVABLE$: Observable<string>;
before() {
this.OBSERVABLE$ = new Observable('');
}
@test 'Observable is created'() {
// @ts-ignore
expect(this.OBSERVABLE$.value).to.be.equal('');
// @ts-ignore
expect(this.OBSERVABLE$.listeners).to.be.eql([]);
}
@test 'Add one subscriber'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const subscribeObject = this.OBSERVABLE$.subscribe((value: string) => console.log(value), errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
// @ts-ignore
const once = subscribeObject.once;
// @ts-ignore
expect(once.isOnce).to.be.equal(false);
// @ts-ignore
expect(once.isFinished).to.be.equal(false);
expect(0).to.be.equal(errorCounter);
}
@test 'unsubscribe one by subject'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const subscribeObject = this.OBSERVABLE$.subscribe((value: string) => console.log(value), errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
subscribeObject.unsubscribe();
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'unsubscribe one by observable'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const subscribeObject = this.OBSERVABLE$.subscribe((value: string) => console.log(value), errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.unSubscribe(subscribeObject);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'unsubscribe all'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const subs1 = this.OBSERVABLE$.subscribe((value: string) => console.log(value));
this.OBSERVABLE$.subscribe((value: string) => console.log(value), errorHandler);
this.OBSERVABLE$.subscribe((value: string) => console.log(value), errorHandler);
this.OBSERVABLE$.subscribe((value: string) => console.log(value), errorHandler);
expect(4).to.be.equal(this.OBSERVABLE$.size());
this.OBSERVABLE$.unsubscribeAll();
expect(0).to.be.equal(this.OBSERVABLE$.size());
subs1.unsubscribe();
expect(0).to.be.equal(this.OBSERVABLE$.size());
this.OBSERVABLE$.subscribe((value: string) => {
console.log(value);
expect("test").to.be.equal(value);
});
expect(1).to.be.equal(this.OBSERVABLE$.size());
this.OBSERVABLE$.next("test");
expect(0).to.be.equal(errorCounter);
}
@test 'Add one subscriber and listen one event'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '1';
const listener = (value: string) => {
expect(value).to.be.equal(str);
};
this.OBSERVABLE$.subscribe(listener, errorHandler);
this.OBSERVABLE$.next(str);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one subscriber and listen ten events'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
let counter = 0;
const listener = (value: string) => expect(value).to.be.equal(str[counter]);
this.OBSERVABLE$.subscribe(listener, errorHandler);
for (; counter < 10; counter++) this.OBSERVABLE$.next(str[counter]);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one subscriber and get value after one change'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
let counter = 0;
const listener = (value: string) => value;
this.OBSERVABLE$.subscribe(listener, errorHandler);
for (; counter < 1; counter++) this.OBSERVABLE$.next(str[counter]);
expect(this.OBSERVABLE$.getValue()).to.be.equal('0');
expect(0).to.be.equal(errorCounter);
}
@test 'Add one subscriber and get value after five changes'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
let counter = 0;
const listener = (value: string) => value;
this.OBSERVABLE$.subscribe(listener, errorHandler);
for (; counter < 5; counter++) this.OBSERVABLE$.next(str[counter]);
expect(this.OBSERVABLE$.getValue()).to.be.equal('4');
expect(0).to.be.equal(errorCounter);
}
@test 'Add one subscriber and get value after ten changes'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
let counter = 0;
const listener = (value: string) => value;
this.OBSERVABLE$.subscribe(listener, errorHandler);
for (; counter < 10; counter++) this.OBSERVABLE$.next(str[counter]);
expect(this.OBSERVABLE$.getValue()).to.be.equal('9');
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "once"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str);
const subscribeObject = this.OBSERVABLE$
.pipe()
.setOnce()
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.once.isOnce).to.be.equal(true);
// @ts-ignore
expect(subscribeObject.once.isFinished).to.be.equal(true);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe, "once" and one without pipe'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let tmpArr: string[] = [];
const listener1 = (value: string) => tmpArr.push('listener1:' + value);
const listener2 = (value: string) => tmpArr.push('listener2:' + value);
this.OBSERVABLE$
.pipe()
.setOnce()
.subscribe(listener1, errorHandler);
this.OBSERVABLE$.subscribe(listener2, errorHandler);
this.OBSERVABLE$.next('a');
expect(tmpArr).to.be.eql(['listener1:a', 'listener2:a']);
tmpArr = [];
this.OBSERVABLE$.next('b');
expect(tmpArr).to.be.eql(['listener2:b']);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "once" after 10 changes'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
let counter = 0;
const listener = (value: string) => expect(value).to.be.equal(str[0]);
const subscribeObject = this.OBSERVABLE$
.pipe()
.setOnce()
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
// @ts-ignore
expect(subscribeObject.once.isOnce).to.be.equal(true);
for (; counter < 10; counter++) this.OBSERVABLE$.next(str[counter]);
// @ts-ignore
expect(subscribeObject.once.isFinished).to.be.equal(true);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'Add bad pipe'() {
const str = '0123456789';
this.OBSERVABLE$.pipe();
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
}
@test 'Add one by pipe and "unsubscribeByNegative true"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str);
const condition = () => true;
const subscribeObject = this.OBSERVABLE$
.pipe()
.unsubscribeByNegative(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.unsubscribeByNegativeCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "unsubscribeByNegative false"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(null);
const condition = () => false;
const subscribeObject = this.OBSERVABLE$
.pipe()
.unsubscribeByNegative(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.unsubscribeByNegativeCondition).to.be.equal(null);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "unsubscribeByNegative" (5 positive, 5 negative)'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
}
let counter = 0;
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str[counter]);
const condition = () => counter < 5;
const subscribeObject = this.OBSERVABLE$
.pipe()
.unsubscribeByNegative(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.unsubscribeByNegativeCondition).to.be.equal(null);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'Try use .unsubscribeByNegative(condition) when "condition" is undefined'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
}
const str = '0123456789';
const dataArr: string[] = [];
const listener = (value: string) => dataArr.push(value);
this.OBSERVABLE$
.pipe()
.unsubscribeByNegative(undefined)
.subscribe(listener, errorHandler);
this.OBSERVABLE$.next(str);
expect([]).to.be.eql(dataArr);
expect(0).to.be.equal(this.OBSERVABLE$.size());
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "unsubscribeByPositive true"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str);
const condition = () => true;
const subscribeObject = this.OBSERVABLE$
.pipe()
.unsubscribeByPositive(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.unsubscribeByPositiveCondition).to.be.equal(null);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "unsubscribeByPositive false"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str);
const condition = () => false;
const subscribeObject = this.OBSERVABLE$
.pipe()
.unsubscribeByPositive(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.unsubscribeByPositiveCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "unsubscribeByPositive" (5 negative, 5 positive)'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str[counter]);
const condition = () => counter > 4;
const subscribeObject = this.OBSERVABLE$
.pipe()
.unsubscribeByPositive(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.unsubscribeByNegativeCondition).to.be.equal(null);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'Try use .unsubscribeByPositive(condition) when "condition" is undefined'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const dataArr: string[] = [];
const listener = (value: string) => dataArr.push(value);
this.OBSERVABLE$
.pipe()
.unsubscribeByPositive(undefined)
.subscribe(listener, errorHandler);
this.OBSERVABLE$.next(str);
expect([]).to.be.eql(dataArr);
expect(0).to.be.equal(this.OBSERVABLE$.size());
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByNegative true"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(null);
const condition = () => true;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByNegative(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.emitByNegativeCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByNegative false"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str);
const condition = () => false;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByNegative(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.emitByNegativeCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByNegative" (5 negative, 5 positive)'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => {
expect(value).to.be.equal(str[counter]);
expect(true).to.be.equal(counter > -1 && counter < 5);
};
const condition = () => counter > 4;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByNegative(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.emitByNegativeCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByNegative" (5 positive 5 negative)'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => {
expect(value).to.be.equal(str[counter]);
expect(true).to.be.equal(counter > 4 && counter < 10);
};
const condition = () => counter < 5;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByNegative(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.emitByNegativeCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Try use .emitByNegative(condition) when "condition" is undefined'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const dataArr: string[] = [];
const listener = (value: string) => dataArr.push(value);
this.OBSERVABLE$
.pipe()
.emitByNegative(undefined)
.subscribe(listener, errorHandler);
this.OBSERVABLE$.next(str);
expect([]).to.be.eql(dataArr);
expect(1).to.be.equal(this.OBSERVABLE$.size());
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByPositive true"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str);
const condition = () => true;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByPositive(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.emitByPositiveCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByPositive false"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const listener = (value: string) => expect(value).to.be.equal(null);
const condition = () => false;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByPositive(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.next(str);
// @ts-ignore
expect(subscribeObject.emitByPositiveCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByPositive" (5 negative, 5 positive)'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => {
expect(value).to.be.equal(str[counter]);
expect(true).to.be.equal(counter > 4 && counter < 10);
};
const condition = () => counter > 4;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByPositive(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.emitByPositiveCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitByPositive" (5 positive 5 negative)'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => {
expect(value).to.be.equal(str[counter]);
expect(true).to.be.equal(counter > -1 && counter < 5);
};
const condition = () => counter < 5;
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitByPositive(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.emitByPositiveCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Try use .emitByPositive(condition) when "condition" is undefined'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const dataArr: string[] = [];
const listener = (value: string) => dataArr.push(value);
this.OBSERVABLE$
.pipe()
.emitByPositive(undefined)
.subscribe(listener, errorHandler);
this.OBSERVABLE$.next(str);
expect([]).to.be.eql(dataArr);
expect(1).to.be.equal(this.OBSERVABLE$.size());
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitMatch true"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const condition = () => '0123456789';
const listener = (value: string) => expect(value).to.be.equal(str);
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitMatch(condition)
.subscribe(listener, errorHandler);
// @ts-ignore
expect(subscribeObject.emitMatchCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitMatch false"'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
// const str = '0123456789';
const condition = () => '0123456789';
const listener = (value: string) => expect(value).to.be.equal(null);
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitMatch(condition)
.subscribe(listener, errorHandler);
// @ts-ignore
expect(subscribeObject.emitMatchCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitMatch 10 elements" (on value "0")'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => {
expect(value).to.be.equal('0');
expect(true).to.be.equal(counter === 0);
};
const condition = () => '0';
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitMatch(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.emitMatchCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitMatch 10 elements" (on value "9")'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => {
expect(value).to.be.equal('9');
expect(true).to.be.equal(counter === 9);
};
const condition = () => '9';
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitMatch(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.emitMatchCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Add one by pipe and "emitMatch 10 elements" (on value "5")'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const listener = (value: string) => {
expect(value).to.be.equal('5');
expect(true).to.be.equal(counter === 5);
};
const condition = () => '5';
const subscribeObject = this.OBSERVABLE$
.pipe()
.emitMatch(condition)
.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
// @ts-ignore
expect(subscribeObject.emitMatchCondition).to.be.equal(condition);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(0).to.be.equal(errorCounter);
}
@test 'Try use .emitMatch(condition) when "condition" is undefined'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const str = '0123456789';
const dataArr: string[] = [];
const listener = (value: string) => dataArr.push(value);
this.OBSERVABLE$
.pipe()
.emitMatch(undefined)
.subscribe(listener, errorHandler);
this.OBSERVABLE$.next(str);
expect([]).to.be.eql(dataArr);
expect(1).to.be.equal(this.OBSERVABLE$.size());
expect(0).to.be.equal(errorCounter);
}
@test 'pause / resume'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
let accumulatorStr = '';
const str = '0123456789';
const listener = (value: string) => accumulatorStr += value;
const subscribeObject = this.OBSERVABLE$.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
(counter === 4) && (<IPause><any>subscribeObject).pause();
(counter === 8) && (<IPause><any>subscribeObject).resume();
this.OBSERVABLE$.next(str[counter]);
}
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(accumulatorStr).to.be.equal('012389');
expect(0).to.be.equal(errorCounter);
}
@test 'order identification'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener = (value: string) => value;
const subscribeObject = <IOrder><any>this.OBSERVABLE$.subscribe(listener, errorHandler);
subscribeObject.order = 11011;
expect(subscribeObject.order).to.be.equal(11011);
expect(0).to.be.equal(errorCounter);
}
@test 'observable disable/enable'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
let accumulatorStr = '';
const str = '0123456789';
const listener = (value: string) => accumulatorStr += value;
this.OBSERVABLE$.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
(counter === 4) && this.OBSERVABLE$.disable();
(counter === 8) && this.OBSERVABLE$.enable();
this.OBSERVABLE$.next(str[counter]);
}
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(this.OBSERVABLE$.isEnable).to.be.equal(true);
expect(accumulatorStr).to.be.equal('012389');
expect(0).to.be.equal(errorCounter);
}
@test 'observable destroy'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
let accumulatorStr = '';
const str = '0123456789';
const listener = (value: string) => accumulatorStr += value;
this.OBSERVABLE$.subscribe(listener, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
for (; counter < 10; counter++) {
(counter === 4) && this.OBSERVABLE$.disable();
(counter === 8) && this.OBSERVABLE$.enable();
this.OBSERVABLE$.next(str[counter]);
}
expect(this.OBSERVABLE$.size()).to.be.equal(1);
expect(this.OBSERVABLE$.isEnable).to.be.equal(true);
expect(accumulatorStr).to.be.equal('012389');
this.OBSERVABLE$.destroy();
expect(this.OBSERVABLE$.isDestroyed).to.be.equal(true);
// @ts-ignore
expect(this.OBSERVABLE$.value).to.be.equal(null);
// @ts-ignore
expect(this.OBSERVABLE$.listeners).to.be.equal(null);
expect(0).to.be.equal(errorCounter);
}
@test 'defect field "observable" from subscribeObject'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener = (value: string) => {
expect(value).to.be.equal('ERROR WAY');
};
const subscribeObject = this.OBSERVABLE$.subscribe(listener, errorHandler);
// @ts-ignore
subscribeObject.observable = 0;
this.OBSERVABLE$.next('some data');
expect(0).to.be.equal(errorCounter);
}
@test 'defect field "listener" from subscribeObject'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener = (value: string) => {
expect(value).to.be.equal('ERROR DATA');
};
const subscribeObject = this.OBSERVABLE$.subscribe(listener, errorHandler);
// @ts-ignore
subscribeObject.listener = 0;
this.OBSERVABLE$.next('VALID DATA');
expect(0).to.be.equal(errorCounter);
}
@test 'multi use'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
let counter = 0;
const str = '0123456789';
const subscribeObject1 = this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal(str[counter]);
(<IOrder><any>subscribeObject1).order = 1;
}, errorHandler);
const subscribeObject2 = this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal(str[counter]);
(<IOrder><any>subscribeObject2).order = 2;
}, errorHandler);
const subscribeObject3 = this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal(str[counter]);
(<IOrder><any>subscribeObject3).order = 3;
}, errorHandler);
const subscribeObject4 = this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal(str[counter]);
(<IOrder><any>subscribeObject4).order = 4;
}, errorHandler);
const subscribeObject5 = this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal(str[counter]);
(<IOrder><any>subscribeObject5).order = 5;
}, errorHandler);
for (; counter < str.length; counter++) {
this.OBSERVABLE$.next(str[counter]);
}
expect(this.OBSERVABLE$.size()).to.be.equal(5);
expect((<IOrder><any>subscribeObject1).order).to.be.equal(1);
expect((<IOrder><any>subscribeObject2).order).to.be.equal(2);
expect((<IOrder><any>subscribeObject3).order).to.be.equal(3);
expect((<IOrder><any>subscribeObject4).order).to.be.equal(4);
expect((<IOrder><any>subscribeObject5).order).to.be.equal(5);
subscribeObject1.unsubscribe();
expect(this.OBSERVABLE$.size()).to.be.equal(4);
subscribeObject2.unsubscribe();
expect(this.OBSERVABLE$.size()).to.be.equal(3);
subscribeObject3.unsubscribe();
expect(this.OBSERVABLE$.size()).to.be.equal(2);
subscribeObject4.unsubscribe();
expect(this.OBSERVABLE$.size()).to.be.equal(1);
subscribeObject5.unsubscribe();
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(0).to.be.equal(errorCounter);
}
@test 'destroy and try to use next'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal('ERROR DATA');
}, errorHandler);
this.OBSERVABLE$.destroy();
this.OBSERVABLE$.next('VALID DATA');
expect(0).to.be.equal(errorCounter);
}
@test 'destroy and try to use unSubscribe'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const subscribeObject1 = this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal('ERROR DATA');
}, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.destroy();
expect(this.OBSERVABLE$.size()).to.be.equal(0);
this.OBSERVABLE$.unSubscribe(subscribeObject1);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(this.OBSERVABLE$.isDestroyed).to.be.equal(true);
expect(0).to.be.equal(errorCounter);
}
@test 'destroy and try to use unSubscribeAll'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal('ERROR DATA');
}, errorHandler);
this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal('ERROR DATA');
}, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(2);
this.OBSERVABLE$.destroy();
expect(this.OBSERVABLE$.size()).to.be.equal(0);
this.OBSERVABLE$.unsubscribeAll();
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(this.OBSERVABLE$.isDestroyed).to.be.equal(true);
expect(0).to.be.equal(errorCounter);
}
@test 'destroy and try to use getValue'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal('SOME DATA');
}, errorHandler);
this.OBSERVABLE$.next('SOME DATA');
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.destroy();
expect(this.OBSERVABLE$.getValue()).to.be.equal(undefined);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(this.OBSERVABLE$.isDestroyed).to.be.equal(true);
expect(0).to.be.equal(errorCounter);
}
@test 'destroy and try to use subscribe'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal('SOME DATA');
}, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.destroy();
this.OBSERVABLE$.subscribe((value) => {
expect(value).to.be.equal('SOME DATA');
}, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(this.OBSERVABLE$.isDestroyed).to.be.equal(true);
expect(0).to.be.equal(errorCounter);
}
@test 'destroy and try to use pipe'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
this.OBSERVABLE$.subscribe((value) => {
expect('SOME DATA').to.be.equal(value);
}, errorHandler);
expect(this.OBSERVABLE$.size()).to.be.equal(1);
this.OBSERVABLE$.destroy();
expect(this.OBSERVABLE$.pipe()).to.be.equal(undefined);
expect(this.OBSERVABLE$.size()).to.be.equal(0);
expect(this.OBSERVABLE$.isDestroyed).to.be.equal(true);
expect(0).to.be.equal(errorCounter);
}
@test 'error listener'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(true).to.be.equal(!!errorMessage);
errorCounter++;
};
const dataArr: string[] = [];
const listener1 = () => {
throw new Error('LISTENER ERROR');
};
const listener2 = (value: string) => {
dataArr.push(value);
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
this.OBSERVABLE$.subscribe(listener2, errorHandler);
this.OBSERVABLE$.subscribe(listener1);
this.OBSERVABLE$.next('1');
expect(3).to.be.equal(this.OBSERVABLE$.size());
expect(['1']).to.be.eql(dataArr);
expect(1).to.be.equal(errorCounter);
}
@test 'error condition'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(true).to.be.equal(!!errorMessage);
errorCounter++;
};
const dataArr: string[] = [];
const listener1 = (value: string) => dataArr.push(value);
const listener2 = (value: string) => dataArr.push(value);
this.OBSERVABLE$
.pipe()
.emitByPositive(() => {
throw new Error('CONDITION ERROR');
})
.subscribe(listener1, errorHandler);
this.OBSERVABLE$.subscribe(listener2, errorHandler);
this.OBSERVABLE$.next('1');
expect(2).to.be.equal(this.OBSERVABLE$.size());
expect(['1']).to.be.eql(dataArr);
expect(1).to.be.equal(errorCounter);
}
@test 'subscribe undefined listener'() {
let errorCounter = 0;
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = undefined;
const subscribe = this.OBSERVABLE$.subscribe(listener1, errorHandler);
expect(undefined).to.be.equal(subscribe);
expect(0).to.be.equal(this.OBSERVABLE$.size());
expect(0).to.be.equal(errorCounter);
}
@test 'subscribe custom error handler'() {
let counter = 0;
const data = "test";
const listener1 = (value: string) => {
console.log(value);
throw new Error('TEST ERROR HANDLER');
};
const errorHandler = (errorData: any) => {
expect(data).to.be.equal(errorData);
counter++;
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
expect(1).to.be.equal(this.OBSERVABLE$.size());
this.OBSERVABLE$.next(data);
expect(1).to.be.equal(counter);
}
@test 'stream array by 10 elements'() {
let errorCounter = 0;
let counter = 0;
const accum: string[] = [];
const streamArr = ["1", "2", "3", "1", "2", "3", "1", "2", "3", "4"];
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = (data: string) => {
counter++;
accum.push(data);
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
this.OBSERVABLE$.stream(streamArr);
expect(streamArr).to.be.deep.equal(accum);
expect(10).to.be.equal(counter);
}
@test 'stream and pipe array by 10 elements'() {
let errorCounter = 0;
let counter = 0;
const accum: string[] = [];
const streamArr = ["1", "2", "3", "1", "2", "3", "1", "2", "3", "4"];
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = (data: string) => {
counter++;
accum.push(data);
};
this.OBSERVABLE$
.pipe()
.emitByPositive((data) => +data < 2)
.subscribe(listener1, errorHandler);
this.OBSERVABLE$.stream(streamArr);
expect(['1', '1', '1']).to.be.deep.equal(accum);
expect(3).to.be.equal(counter);
}
@test 'stream array by 5 elements'() {
let errorCounter = 0;
let counter = 0;
const accum: string[] = [];
const streamArr = ["1", "2", "3", "4", "5"];
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = (data: string) => {
counter++;
accum.push(data);
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
this.OBSERVABLE$.stream(streamArr);
expect(streamArr).to.be.deep.equal(accum);
expect(5).to.be.equal(counter);
}
@test 'stream array by 1 element'() {
let errorCounter = 0;
let counter = 0;
const accum: string[] = [];
const streamArr = ["1"];
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = (data: string) => {
counter++;
accum.push(data);
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
this.OBSERVABLE$.stream(streamArr);
expect(streamArr).to.be.deep.equal(accum);
expect(1).to.be.equal(counter);
}
@test 'stream array by 0 elements'() {
let errorCounter = 0;
let counter = 0;
const accum: string[] = [];
const streamArr = [];
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = (data: string) => {
counter++;
accum.push(data);
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
this.OBSERVABLE$.stream(streamArr);
expect(streamArr).to.be.deep.equal(accum);
expect(0).to.be.equal(counter);
}
@test 'stream array when destroy'() {
let errorCounter = 0;
let counter = 0;
const accum: string[] = [];
const streamArr = ["1", "2", "3"];
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = (data: string) => {
counter++;
accum.push(data);
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
this.OBSERVABLE$.destroy();
this.OBSERVABLE$.stream(streamArr);
expect([]).to.be.deep.equal(accum);
expect(0).to.be.equal(counter);
expect(true).to.be.equal(this.OBSERVABLE$.isDestroyed);
expect(0).to.be.equal(this.OBSERVABLE$.size());
}
@test 'stream array when disable/enable'() {
let errorCounter = 0;
let counter = 0;
const accum: string[] = [];
const streamArr = ["1", "2", "3"];
const errorHandler = (errorData: any, errorMessage: any) => {
expect(false).to.be.equal(!!errorMessage);
errorCounter++;
};
const listener1 = (data: string) => {
counter++;
accum.push(data);
};
this.OBSERVABLE$.subscribe(listener1, errorHandler);
this.OBSE