spec-js/observables/forkJoin-spec.js
"use strict";
var chai_1 = require('chai');
var Rx = require('../../dist/package/Rx');
var test_helper_1 = require('../helpers/test-helper');
var Observable = Rx.Observable;
/** @test {forkJoin} */
describe('Observable.forkJoin', function () {
asDiagram('forkJoin')('should join the last values of the provided observables into an array', function () {
var e1 = Observable.forkJoin(hot('---a---b---c---d---|'), hot('-1---2---3---|'));
var expected = '-------------------(x|)';
expectObservable(e1).toBe(expected, { x: ['d', '3'] });
});
it('should join the last values of the provided observables into an array', function () {
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('(b|)'), hot('--1--2--3--|'));
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: ['d', 'b', '3'] });
});
it('should allow emit null or undefined', function () {
var e2 = Observable.forkJoin(hot('--a--b--c--d--|', { d: null }), hot('(b|)'), hot('--1--2--3--|'), hot('-----r--t--u--|', { u: undefined }));
var expected2 = '--------------(x|)';
expectObservable(e2).toBe(expected2, { x: [null, 'b', '3', undefined] });
});
it('should join the last values of the provided observables with selector', function () {
function selector(x, y, z) {
return x + y + z;
}
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('(b|)'), hot('--1--2--3--|'), selector);
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: 'db3' });
});
it('should accept single observable', function () {
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'));
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: ['d'] });
});
it('should accept array of observable contains single', function () {
var e1 = Observable.forkJoin([hot('--a--b--c--d--|')]);
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: ['d'] });
});
it('should accept single observable with selector', function () {
function selector(x) {
return x + x;
}
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), selector);
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: 'dd' });
});
it('should accept array of observable contains single with selector', function () {
function selector(x) {
return x + x;
}
var e1 = Observable.forkJoin([hot('--a--b--c--d--|')], selector);
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: 'dd' });
});
it('should accept lowercase-o observables', function () {
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('(b|)'), test_helper_1.lowerCaseO('1', '2', '3'));
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: ['d', 'b', '3'] });
});
it('should accept empty lowercase-o observables', function () {
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('(b|)'), test_helper_1.lowerCaseO());
var expected = '|';
expectObservable(e1).toBe(expected);
});
it('should accept promise', function (done) {
var e1 = Observable.forkJoin(Observable.of(1), Promise.resolve(2));
e1.subscribe(function (x) {
chai_1.expect(x).to.deep.equal([1, 2]);
}, function (err) {
done(new Error('should not be called'));
}, function () {
done();
});
});
it('should accept array of observables', function () {
var e1 = Observable.forkJoin([hot('--a--b--c--d--|'),
hot('(b|)'),
hot('--1--2--3--|')]);
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: ['d', 'b', '3'] });
});
it('should accept array of observables with selector', function () {
function selector(x, y, z) {
return x + y + z;
}
var e1 = Observable.forkJoin([hot('--a--b--c--d--|'),
hot('(b|)'),
hot('--1--2--3--|')], selector);
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: 'db3' });
});
it('should not emit if any of source observable is empty', function () {
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('(b|)'), hot('------------------|'));
var expected = '------------------|';
expectObservable(e1).toBe(expected);
});
it('should complete early if any of source is empty and completes before than others', function () {
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('(b|)'), hot('---------|'));
var expected = '---------|';
expectObservable(e1).toBe(expected);
});
it('should complete when all sources are empty', function () {
var e1 = Observable.forkJoin(hot('--------------|'), hot('---------|'));
var expected = '---------|';
expectObservable(e1).toBe(expected);
});
it('should not complete when only source never completes', function () {
var e1 = Observable.forkJoin(hot('--------------'));
var expected = '-';
expectObservable(e1).toBe(expected);
});
it('should not complete when one of the sources never completes', function () {
var e1 = Observable.forkJoin(hot('--------------'), hot('-a---b--c--|'));
var expected = '-';
expectObservable(e1).toBe(expected);
});
it('should complete when one of the sources never completes but other completes without values', function () {
var e1 = Observable.forkJoin(hot('--------------'), hot('------|'));
var expected = '------|';
expectObservable(e1).toBe(expected);
});
it('should complete if source is not provided', function () {
var e1 = Observable.forkJoin();
var expected = '|';
expectObservable(e1).toBe(expected);
});
it('should complete if sources list is empty', function () {
var e1 = Observable.forkJoin([]);
var expected = '|';
expectObservable(e1).toBe(expected);
});
it('should complete when any of source is empty with selector', function () {
function selector(x, y) {
return x + y;
}
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('---------|'), selector);
var expected = '---------|';
expectObservable(e1).toBe(expected);
});
it('should emit results by resultselector', function () {
function selector(x, y) {
return x + y;
}
var e1 = Observable.forkJoin(hot('--a--b--c--d--|'), hot('---2-----|'), selector);
var expected = '--------------(x|)';
expectObservable(e1).toBe(expected, { x: 'd2' });
});
it('should raise error when any of source raises error with empty observable', function () {
var e1 = Observable.forkJoin(hot('------#'), hot('---------|'));
var expected = '------#';
expectObservable(e1).toBe(expected);
});
it('should raise error when any of source raises error with source that never completes', function () {
var e1 = Observable.forkJoin(hot('------#'), hot('----------'));
var expected = '------#';
expectObservable(e1).toBe(expected);
});
it('should raise error when any of source raises error with selector with empty observable', function () {
function selector(x, y) {
return x + y;
}
var e1 = Observable.forkJoin(hot('------#'), hot('---------|'), selector);
var expected = '------#';
expectObservable(e1).toBe(expected);
});
it('should raise error when source raises error', function () {
var e1 = Observable.forkJoin(hot('------#'), hot('---a-----|'));
var expected = '------#';
expectObservable(e1).toBe(expected);
});
it('should raise error when source raises error with selector', function () {
function selector(x, y) {
return x + y;
}
var e1 = Observable.forkJoin(hot('------#'), hot('-------b-|'), selector);
var expected = '------#';
expectObservable(e1).toBe(expected);
});
it('should allow unsubscribing early and explicitly', function () {
var e1 = hot('--a--^--b--c---d-| ');
var e1subs = '^ ! ';
var e2 = hot('---e-^---f--g---h-|');
var e2subs = '^ ! ';
var expected = '---------- ';
var unsub = ' ! ';
var result = Observable.forkJoin(e1, e2);
expectObservable(result, unsub).toBe(expected);
expectSubscriptions(e1.subscriptions).toBe(e1subs);
expectSubscriptions(e2.subscriptions).toBe(e2subs);
});
it('should unsubscribe other Observables, when one of them errors', function () {
var e1 = hot('--a--^--b--c---d-| ');
var e1subs = '^ ! ';
var e2 = hot('---e-^---f--g-#');
var e2subs = '^ ! ';
var expected = '---------# ';
var result = Observable.forkJoin(e1, e2);
expectObservable(result).toBe(expected);
expectSubscriptions(e1.subscriptions).toBe(e1subs);
expectSubscriptions(e2.subscriptions).toBe(e2subs);
});
it('should support promises', function () {
type(function () {
/* tslint:disable:no-unused-variable */
var a;
var b;
var c;
var o1 = Observable.forkJoin(a, b, c);
var o2 = Observable.forkJoin(a, b, c, function (aa, bb, cc) { return !!aa && !!bb && cc; });
/* tslint:enable:no-unused-variable */
});
});
it('should support observables', function () {
type(function () {
/* tslint:disable:no-unused-variable */
var a;
var b;
var c;
var o1 = Observable.forkJoin(a, b, c);
var o2 = Observable.forkJoin(a, b, c, function (aa, bb, cc) { return !!aa && !!bb && cc; });
/* tslint:enable:no-unused-variable */
});
});
it('should support mixed observables and promises', function () {
type(function () {
/* tslint:disable:no-unused-variable */
var a;
var b;
var c;
var d;
var o1 = Observable.forkJoin(a, b, c, d);
var o2 = Observable.forkJoin(a, b, c, d, function (aa, bb, cc, dd) { return !!aa && !!bb && cc && !!dd.length; });
/* tslint:enable:no-unused-variable */
});
});
it('should support arrays of promises', function () {
type(function () {
/* tslint:disable:no-unused-variable */
var a;
var o1 = Observable.forkJoin(a);
var o2 = Observable.forkJoin.apply(Observable, a);
var o3 = Observable.forkJoin(a, function () {
var x = [];
for (var _i = 0; _i < arguments.length; _i++) {
x[_i - 0] = arguments[_i];
}
return x.length;
});
/* tslint:enable:no-unused-variable */
});
});
it('should support arrays of observables', function () {
type(function () {
/* tslint:disable:no-unused-variable */
var a;
var o1 = Observable.forkJoin(a);
var o2 = Observable.forkJoin.apply(Observable, a);
var o3 = Observable.forkJoin(a, function () {
var x = [];
for (var _i = 0; _i < arguments.length; _i++) {
x[_i - 0] = arguments[_i];
}
return x.length;
});
/* tslint:enable:no-unused-variable */
});
});
it('should return Array<T> when given a single promise', function () {
type(function () {
/* tslint:disable:no-unused-variable */
var a;
var o1 = Observable.forkJoin(a);
/* tslint:enable:no-unused-variable */
});
});
it('should return Array<T> when given a single observable', function () {
type(function () {
/* tslint:disable:no-unused-variable */
var a;
var o1 = Observable.forkJoin(a);
/* tslint:enable:no-unused-variable */
});
});
});
//# sourceMappingURL=forkJoin-spec.js.map