UNPKG

@reactivex/rxjs

Version:

Reactive Extensions for modern JavaScript

171 lines 7.76 kB
"use strict"; /** @test {delayWhen} */ describe('Observable.prototype.delayWhen', function () { asDiagram('delayWhen(durationSelector)')('should delay by duration selector', function () { var e1 = hot('---a---b---c--|'); var expected = '-----a------c----(b|)'; var subs = '^ !'; var selector = [cold('--x--|'), cold('----------(x|)'), cold('-x--|')]; var selectorSubs = [' ^ ! ', ' ^ !', ' ^! ']; var idx = 0; function durationSelector(x) { return selector[idx++]; } var result = e1.delayWhen(durationSelector); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector[0].subscriptions).toBe(selectorSubs[0]); expectSubscriptions(selector[1].subscriptions).toBe(selectorSubs[1]); expectSubscriptions(selector[2].subscriptions).toBe(selectorSubs[2]); }); it('should delay by selector', function () { var e1 = hot('--a--b--|'); var expected = '---a--b-|'; var subs = '^ !'; var selector = cold('-x--|'); var selectorSubs = [' ^! ', ' ^! ']; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should raise error if source raises error', function () { var e1 = hot('--a--#'); var expected = '---a-#'; var subs = '^ !'; var selector = cold('-x--|'); var selectorSubs = ' ^! '; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should raise error if selector raises error', function () { var e1 = hot('--a--b--|'); var expected = '---#'; var subs = '^ !'; var selector = cold('-#'); var selectorSubs = ' ^! '; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should delay by selector and completes after value emits', function () { var e1 = hot('--a--b--|'); var expected = '---------a--(b|)'; var subs = '^ !'; var selector = cold('-------x--|'); var selectorSubs = [' ^ !', ' ^ !']; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should delay by selector completes if selector does not emits', function () { var e1 = hot('--a--b--|'); var expected = '------a--(b|)'; var subs = '^ !'; var selector = cold('----|'); var selectorSubs = [' ^ !', ' ^ !']; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should not emit if selector never emits', function () { var e1 = hot('--a--b--|'); var expected = '-'; var subs = '^ '; var selector = cold('-'); var selectorSubs = [' ^ ', ' ^ ']; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should delay by first value from selector', function () { var e1 = hot('--a--b--|'); var expected = '------a--(b|)'; var subs = '^ !'; var selector = cold('----x--y--|'); var selectorSubs = [' ^ !', ' ^ !']; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should delay by selector does not completes', function () { var e1 = hot('--a--b--|'); var expected = '------a--(b|)'; var subs = '^ !'; var selector = cold('----x-----y---'); var selectorSubs = [' ^ !', ' ^ !']; var result = e1.delayWhen(function (x) { return selector; }); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); }); it('should raise error if selector throws', function () { var e1 = hot('--a--b--|'); var expected = '--#'; var subs = '^ !'; var err = new Error('error'); var result = e1.delayWhen((function (x) { throw err; })); expectObservable(result).toBe(expected, null, err); expectSubscriptions(e1.subscriptions).toBe(subs); }); it('should start subscription when subscription delay emits', function () { var e1 = hot('-----a---b---|'); var expected = ' -----a---b-|'; var subs = ' ^ !'; var selector = cold('--x--|'); var selectorSubs = [' ^ !', ' ^ !']; var subDelay = cold('--x--|'); var subDelaySub = '^ !'; var result = e1.delayWhen(function (x) { return selector; }, subDelay); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); expectSubscriptions(subDelay.subscriptions).toBe(subDelaySub); }); it('should start subscription when subscription delay completes without emit value', function () { var e1 = hot('-----a---b---|'); var expected = ' -----a---b-|'; var subs = ' ^ !'; var selector = cold('--x--|'); var selectorSubs = [' ^ !', ' ^ !']; var subDelay = cold('--|'); var subDelaySub = '^ !'; var result = e1.delayWhen(function (x) { return selector; }, subDelay); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(subs); expectSubscriptions(selector.subscriptions).toBe(selectorSubs); expectSubscriptions(subDelay.subscriptions).toBe(subDelaySub); }); it('should raise error when subscription delay raises error', function () { var e1 = hot('-----a---b---|'); var expected = ' # '; var selector = cold('--x--|'); var subDelay = cold('---#'); var subDelaySub = '^ !'; var result = e1.delayWhen(function (x) { return selector; }, subDelay); expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe([]); expectSubscriptions(selector.subscriptions).toBe([]); expectSubscriptions(subDelay.subscriptions).toBe(subDelaySub); }); }); //# sourceMappingURL=delayWhen-spec.js.map