Home Manual Reference Source Test Repository

spec-js/operators/takeLast-spec.js

"use strict";
var chai_1 = require('chai');
var Rx = require('../../dist/cjs/Rx');
var Observable = Rx.Observable;
/** @test {takeLast} */
describe('Observable.prototype.takeLast', function () {
    asDiagram('takeLast(2)')('should take two values of an observable with many values', function () {
        var e1 = cold('--a-----b----c---d--|    ');
        var e1subs = '^                   !    ';
        var expected = '--------------------(cd|)';
        expectObservable(e1.takeLast(2)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should take last three values', function () {
        var e1 = cold('--a-----b----c---d--|    ');
        var e1subs = '^                   !    ';
        var expected = '--------------------(bcd|)';
        expectObservable(e1.takeLast(3)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should take all element when try to take larger then source', function () {
        var e1 = cold('--a-----b----c---d--|    ');
        var e1subs = '^                   !    ';
        var expected = '--------------------(abcd|)';
        expectObservable(e1.takeLast(5)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should take all element when try to take exact', function () {
        var e1 = cold('--a-----b----c---d--|    ');
        var e1subs = '^                   !    ';
        var expected = '--------------------(abcd|)';
        expectObservable(e1.takeLast(4)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should not take any values', function () {
        var e1 = cold('--a-----b----c---d--|');
        var expected = '|';
        expectObservable(e1.takeLast(0)).toBe(expected);
    });
    it('should work with empty', function () {
        var e1 = cold('|');
        var e1subs = '(^!)';
        var expected = '|';
        expectObservable(e1.takeLast(42)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should go on forever on never', function () {
        var e1 = cold('-');
        var e1subs = '^';
        var expected = '-';
        expectObservable(e1.takeLast(42)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should be empty on takeLast(0)', function () {
        var e1 = hot('--a--^--b----c---d--|');
        var e1subs = []; // Don't subscribe at all
        var expected = '|';
        expectObservable(e1.takeLast(0)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should take one value from an observable with one value', function () {
        var e1 = hot('---(a|)');
        var e1subs = '^  !   ';
        var expected = '---(a|)';
        expectObservable(e1.takeLast(1)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should take one value from an observable with many values', function () {
        var e1 = hot('--a--^--b----c---d--|   ');
        var e1subs = '^              !   ';
        var expected = '---------------(d|)';
        expectObservable(e1.takeLast(1)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should error on empty', function () {
        var e1 = hot('--a--^----|');
        var e1subs = '^    !';
        var expected = '-----|';
        expectObservable(e1.takeLast(42)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should propagate error from the source observable', function () {
        var e1 = hot('---^---#', null, 'too bad');
        var e1subs = '^   !';
        var expected = '----#';
        expectObservable(e1.takeLast(42)).toBe(expected, null, 'too bad');
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should propagate error from an observable with values', function () {
        var e1 = hot('---^--a--b--#');
        var e1subs = '^        !';
        var expected = '---------#';
        expectObservable(e1.takeLast(42)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should allow unsubscribing explicitly and early', function () {
        var e1 = hot('---^--a--b-----c--d--e--|');
        var unsub = '         !            ';
        var e1subs = '^        !            ';
        var expected = '----------            ';
        expectObservable(e1.takeLast(42), unsub).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should work with throw', function () {
        var e1 = cold('#');
        var e1subs = '(^!)';
        var expected = '#';
        expectObservable(e1.takeLast(42)).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
    it('should throw if total is less than zero', function () {
        chai_1.expect(function () { Observable.range(0, 10).takeLast(-1); })
            .to.throw(Rx.ArgumentOutOfRangeError);
    });
    it('should not break unsubscription chain when unsubscribed explicitly', function () {
        var e1 = hot('---^--a--b-----c--d--e--|');
        var unsub = '         !            ';
        var e1subs = '^        !            ';
        var expected = '----------            ';
        var result = e1
            .mergeMap(function (x) { return Observable.of(x); })
            .takeLast(42)
            .mergeMap(function (x) { return Observable.of(x); });
        expectObservable(result, unsub).toBe(expected);
        expectSubscriptions(e1.subscriptions).toBe(e1subs);
    });
});
//# sourceMappingURL=takeLast-spec.js.map