UNPKG

@reactivex/rxjs

Version:

Reactive Extensions for modern JavaScript

134 lines 5.34 kB
"use strict"; var chai_1 = require('chai'); var Rx = require('../dist/cjs/Rx'); var Observable = Rx.Observable; var Subscription = Rx.Subscription; /** @test {Subscription} */ describe('Subscription', function () { it('should not leak', function (done) { var tearDowns = []; var source1 = Observable.create(function (observer) { return function () { tearDowns.push(1); }; }); var source2 = Observable.create(function (observer) { return function () { tearDowns.push(2); throw new Error('oops, I am a bad unsubscribe!'); }; }); var source3 = Observable.create(function (observer) { return function () { tearDowns.push(3); }; }); var subscription = Observable.merge(source1, source2, source3).subscribe(); setTimeout(function () { chai_1.expect(function () { subscription.unsubscribe(); }).to.throw(Rx.UnsubscriptionError); chai_1.expect(tearDowns).to.deep.equal([1, 2, 3]); done(); }); }); it('should not leak when adding a bad custom subscription to a subscription', function (done) { var tearDowns = []; var sub = new Subscription(); var source1 = Observable.create(function (observer) { return function () { tearDowns.push(1); }; }); var source2 = Observable.create(function (observer) { return function () { tearDowns.push(2); sub.add(({ unsubscribe: function () { chai_1.expect(sub.closed).to.be.true; throw new Error('Who is your daddy, and what does he do?'); } })); }; }); var source3 = Observable.create(function (observer) { return function () { tearDowns.push(3); }; }); sub.add(Observable.merge(source1, source2, source3).subscribe()); setTimeout(function () { chai_1.expect(function () { sub.unsubscribe(); }).to.throw(Rx.UnsubscriptionError); chai_1.expect(tearDowns).to.deep.equal([1, 2, 3]); done(); }); }); describe('Subscription.add()', function () { it('Should returns the self if the self is passed', function () { var sub = new Subscription(); var ret = sub.add(sub); chai_1.expect(ret).to.equal(sub); }); it('Should returns Subscription.EMPTY if it is passed', function () { var sub = new Subscription(); var ret = sub.add(Subscription.EMPTY); chai_1.expect(ret).to.equal(Subscription.EMPTY); }); it('Should returns Subscription.EMPTY if it is called with `void` value', function () { var sub = new Subscription(); var ret = sub.add(undefined); chai_1.expect(ret).to.equal(Subscription.EMPTY); }); it('Should returns a new Subscription created with teardown function if it is passed a function', function () { var sub = new Subscription(); var isCalled = false; var ret = sub.add(function () { isCalled = true; }); ret.unsubscribe(); chai_1.expect(isCalled).to.equal(true); }); it('Should wrap the AnonymousSubscription and return a subscription that unsubscribes and removes it when unsubbed', function () { var sub = new Subscription(); var called = false; var arg = { unsubscribe: function () { return called = true; }, }; var ret = sub.add(arg); chai_1.expect(called).to.equal(false); chai_1.expect(sub._subscriptions.length).to.equal(1); ret.unsubscribe(); chai_1.expect(called).to.equal(true); chai_1.expect(sub._subscriptions.length).to.equal(0); }); it('Should returns the passed one if passed a AnonymousSubscription having not function `unsubscribe` member', function () { var sub = new Subscription(); var arg = { isUnsubscribed: false, unsubscribe: undefined, }; var ret = sub.add(arg); chai_1.expect(ret).to.equal(arg); }); it('Should returns the passed one if the self has been unsubscribed', function () { var main = new Subscription(); main.unsubscribe(); var child = new Subscription(); var ret = main.add(child); chai_1.expect(ret).to.equal(child); }); it('Should unsubscribe the passed one if the self has been unsubscribed', function () { var main = new Subscription(); main.unsubscribe(); var isCalled = false; var child = new Subscription(function () { isCalled = true; }); main.add(child); chai_1.expect(isCalled).to.equal(true); }); }); }); //# sourceMappingURL=Subscription-spec.js.map