From 07e8c53c66e9e12f9902bd5cb5504351eb811516 Mon Sep 17 00:00:00 2001 From: Andre Staltz Date: Wed, 9 Dec 2015 15:30:52 +0200 Subject: [PATCH] test(windowCount): add test asserting window Subject is disposed Add test for windowCount operator, to verify that every window Subject is disposed when the outer Observable is unsubscribed. --- spec/operators/windowCount-spec.js | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/spec/operators/windowCount-spec.js b/spec/operators/windowCount-spec.js index 5a14bbb03c..55a266db78 100644 --- a/spec/operators/windowCount-spec.js +++ b/spec/operators/windowCount-spec.js @@ -1,5 +1,5 @@ /* globals describe, it, expect, hot, cold, expectObservable, expectSubscriptions */ -var Rx = require('../../dist/cjs/Rx'); +var Rx = require('../../dist/cjs/Rx.KitchenSink'); var Observable = Rx.Observable; describe('Observable.prototype.windowCount', function () { @@ -111,6 +111,33 @@ describe('Observable.prototype.windowCount', function () { expectSubscriptions(source.subscriptions).toBe(subs); }); + it('should dispose window Subjects if the outer is unsubscribed early', function () { + var virtualTimeScheduler = new Rx.VirtualTimeScheduler(); + var source = new Rx.Subject(); + var result = source.windowCount(10, 10); + var win; + var subscription; + + virtualTimeScheduler.schedule(function () { + subscription = result.subscribe(function (w) { win = w; }); + }, 0); + virtualTimeScheduler.schedule(function () { source.next('a'); }, 0); + virtualTimeScheduler.schedule(function () { source.next('b'); }, 10); + virtualTimeScheduler.schedule(function () { source.next('c'); }, 20); + virtualTimeScheduler.schedule(function () { subscription.unsubscribe(); }, 30); + virtualTimeScheduler.schedule(function () { source.next('d'); }, 40); + virtualTimeScheduler.schedule(function () { source.next('e'); }, 50); + virtualTimeScheduler.schedule(function () { source.next('f'); }, 60); + virtualTimeScheduler.schedule(function () { source.next('g'); }, 70); + virtualTimeScheduler.schedule(function () { + expect(function () { + win.subscribe(); + }).toThrowError('Cannot subscribe to a disposed Subject.'); + }, 80); + + virtualTimeScheduler.flush(); + }); + it('should not break unsubscription chains when result is unsubscribed explicitly', function () { var source = hot('^-a--b--c--d--|'); var subs = '^ ! ';