Home Manual Reference Source Test Repository

spec-js/operators/windowTime-spec.js

"use strict";
var Rx = require('../../dist/package/Rx');
var Observable = Rx.Observable;
/** @test {windowTime} */
describe('Observable.prototype.windowTime', function () {
    asDiagram('windowTime(50, 100)')('should emit windows given windowTimeSpan ' +
        'and windowCreationInterval', function () {
        var source = hot('--1--2--^-a--b--c--d--e---f--g--h-|');
        var subs = '^                         !';
        //  100 frames            0---------1---------2-----|
        //  50                     ----|
        //  50                               ----|
        //  50                                         ----|
        var expected = 'x---------y---------z-----|';
        var x = cold('--a--(b|)                  ');
        var y = cold('-d--e|           ');
        var z = cold('-g--h| ');
        var values = { x: x, y: y, z: z };
        var result = source.windowTime(50, 100, rxTestScheduler);
        expectObservable(result).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should close windows after max count is reached', function () {
        var source = hot('--1--2--^--a--b--c--d--e--f--g-----|');
        var subs = '^                          !';
        var timeSpan = time('----------|');
        //  100 frames              0---------1---------2------|
        var expected = 'x---------y---------z------|';
        var x = cold('---a--(b|)                  ');
        var y = cold('--d--(e|)         ');
        var z = cold('-g-----|');
        var values = { x: x, y: y, z: z };
        var result = source.windowTime(timeSpan, null, 2, rxTestScheduler);
        expectObservable(result).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should close window after max count is reached with' +
        'windowCreationInterval', function () {
        var source = hot('--1--2--^-a--b--c--de-f---g--h--i-|');
        var subs = '^                         !';
        //  100 frames              0---------1---------2-----|
        //  50                      ----|
        //  50                                ----|
        //  50                                          ----|
        var expected = 'x---------y---------z-----|';
        var x = cold('--a--(b|)                  ');
        var y = cold('-de-(f|)         ');
        var z = cold('-h--i| ');
        var values = { x: x, y: y, z: z };
        var result = source.windowTime(50, 100, 3, rxTestScheduler);
        expectObservable(result).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should emit windows given windowTimeSpan', function () {
        var source = hot('--1--2--^--a--b--c--d--e--f--g--h--|');
        var subs = '^                          !';
        var timeSpan = time('----------|');
        //  100 frames            0---------1---------2------|
        var expected = 'x---------y---------z------|';
        var x = cold('---a--b--c|                 ');
        var y = cold('--d--e--f-|       ');
        var z = cold('-g--h--|');
        var values = { x: x, y: y, z: z };
        var result = source.windowTime(timeSpan, rxTestScheduler);
        expectObservable(result).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should emit windows given windowTimeSpan and windowCreationInterval', function () {
        var source = hot('--1--2--^--a--b--c--d--e--f--g--h--|');
        var subs = '^                          !';
        var timeSpan = time('-----|');
        var interval = time('----------|');
        //  100 frames            0---------1---------2------|
        //  50                     ----|
        //  50                               ----|
        //  50                                         ----|
        var expected = 'x---------y---------z------|';
        var x = cold('---a-|                      ');
        var y = cold('--d--(e|)         ');
        var z = cold('-g--h|  ');
        var values = { x: x, y: y, z: z };
        var result = source.windowTime(timeSpan, interval, rxTestScheduler);
        expectObservable(result).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should return a single empty window if source is empty', function () {
        var source = cold('|');
        var subs = '(^!)';
        var expected = '(w|)';
        var w = cold('|');
        var expectedValues = { w: w };
        var timeSpan = time('-----|');
        var interval = time('----------|');
        var result = source.windowTime(timeSpan, interval, rxTestScheduler);
        expectObservable(result).toBe(expected, expectedValues);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should split a Just source into a single window identical to source', function () {
        var source = cold('(a|)');
        var subs = '(^!)';
        var expected = '(w|)';
        var w = cold('(a|)');
        var expectedValues = { w: w };
        var timeSpan = time('-----|');
        var interval = time('----------|');
        var result = source.windowTime(timeSpan, interval, rxTestScheduler);
        expectObservable(result).toBe(expected, expectedValues);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should be able to split a never Observable into timely empty windows', function () {
        var source = hot('^----------');
        var subs = '^         !';
        var expected = 'a--b--c--d-';
        var timeSpan = time('---|');
        var interval = time('---|');
        var a = cold('---|       ');
        var b = cold('---|    ');
        var c = cold('---| ');
        var d = cold('--');
        var unsub = '          !';
        var expectedValues = { a: a, b: b, c: c, d: d };
        var result = source.windowTime(timeSpan, interval, rxTestScheduler);
        expectObservable(result, unsub).toBe(expected, expectedValues);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should emit an error-only window if outer is a simple throw-Observable', function () {
        var source = cold('#');
        var subs = '(^!)';
        var expected = '(w#)';
        var w = cold('#');
        var expectedValues = { w: w };
        var timeSpan = time('-----|');
        var interval = time('----------|');
        var result = source.windowTime(timeSpan, interval, rxTestScheduler);
        expectObservable(result).toBe(expected, expectedValues);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should handle source Observable which eventually emits an error', function () {
        var source = hot('--1--2--^--a--b--c--d--e--f--g--h--#');
        var subs = '^                          !';
        var timeSpan = time('-----|');
        var interval = time('----------|');
        //  100 frames            0---------1---------2------|
        //  50                     ----|
        //  50                               ----|
        //  50                                         ----|
        var expected = 'x---------y---------z------#';
        var x = cold('---a-|                      ');
        var y = cold('--d--(e|)         ');
        var z = cold('-g--h|  ');
        var values = { x: x, y: y, z: z };
        var result = source.windowTime(timeSpan, interval, rxTestScheduler);
        expectObservable(result).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should emit windows given windowTimeSpan and windowCreationInterval, ' +
        'but outer is unsubscribed early', function () {
        var source = hot('--1--2--^--a--b--c--d--e--f--g--h--|');
        var subs = '^          !                ';
        var timeSpan = time('-----|');
        var interval = time('----------|');
        //  100 frames            0---------1---------2------|
        //  50                     ----|
        //  50                               ----|
        //  50                                         ----|
        var expected = 'x---------y-                ';
        var x = cold('---a-|                      ');
        var y = cold('--                ');
        var unsub = '           !                ';
        var values = { x: x, y: y };
        var result = source.windowTime(timeSpan, interval, rxTestScheduler);
        expectObservable(result, unsub).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(subs);
    });
    it('should not break unsubscription chains when result is unsubscribed explicitly', function () {
        var source = hot('--1--2--^--a--b--c--d--e--f--g--h--|');
        var sourcesubs = '^             !             ';
        var timeSpan = time('-----|');
        var interval = time('----------|');
        //  100 frames            0---------1---------2------|
        //  50                     ----|
        //  50                               ----|
        //  50                                         ----|
        var expected = 'x---------y----             ';
        var x = cold('---a-|                      ');
        var y = cold('--d--             ');
        var unsub = '              !             ';
        var values = { x: x, y: y };
        var result = source
            .mergeMap(function (x) { return Observable.of(x); })
            .windowTime(timeSpan, interval, rxTestScheduler)
            .mergeMap(function (x) { return Observable.of(x); });
        expectObservable(result, unsub).toBe(expected, values);
        expectSubscriptions(source.subscriptions).toBe(sourcesubs);
    });
});
//# sourceMappingURL=windowTime-spec.js.map