Skip to content

Commit

Permalink
test(windowCount): add test asserting window Subject is disposed
Browse files Browse the repository at this point in the history
Add test for windowCount operator, to verify that every window Subject is disposed when the outer
Observable is unsubscribed.
  • Loading branch information
staltz authored and kwonoj committed Dec 9, 2015
1 parent dbadba7 commit 07e8c53
Showing 1 changed file with 28 additions and 1 deletion.
29 changes: 28 additions & 1 deletion spec/operators/windowCount-spec.js
Original file line number Diff line number Diff line change
@@ -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 () {
Expand Down Expand Up @@ -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 = '^ ! ';
Expand Down

0 comments on commit 07e8c53

Please sign in to comment.