Home Manual Reference Source Test Repository

spec-js/observables/fromEventPattern-spec.js

"use strict";
var chai_1 = require('chai');
var sinon = require('sinon');
var Rx = require('../../dist/package/Rx');
var noop_1 = require('../../dist/package/util/noop');
var Observable = Rx.Observable;
/** @test {fromEventPattern} */
describe('Observable.fromEventPattern', function () {
    asDiagram('fromEventPattern(addHandler, removeHandler)')('should create an observable from the handler API', function () {
        function addHandler(h) {
            Observable.timer(50, 20, rxTestScheduler)
                .mapTo('ev')
                .take(2)
                .concat(Observable.never())
                .subscribe(h);
        }
        var e1 = Observable.fromEventPattern(addHandler);
        var expected = '-----x-x---';
        expectObservable(e1).toBe(expected, { x: 'ev' });
    });
    it('should call addHandler on subscription', function () {
        var addHandler = sinon.spy();
        Observable.fromEventPattern(addHandler, noop_1.noop).subscribe(noop_1.noop);
        var call = addHandler.getCall(0);
        chai_1.expect(addHandler).calledOnce;
        chai_1.expect(call.args[0]).to.be.a('function');
    });
    it('should call removeHandler on unsubscription', function () {
        var removeHandler = sinon.spy();
        Observable.fromEventPattern(noop_1.noop, removeHandler).subscribe(noop_1.noop).unsubscribe();
        var call = removeHandler.getCall(0);
        chai_1.expect(removeHandler).calledOnce;
        chai_1.expect(call.args[0]).to.be.a('function');
    });
    it('should work without optional removeHandler', function () {
        var addHandler = sinon.spy();
        Observable.fromEventPattern(addHandler).subscribe(noop_1.noop);
        chai_1.expect(addHandler).calledOnce;
    });
    it('should deliver return value of addHandler to removeHandler as signal', function () {
        var expected = { signal: true };
        var addHandler = function () { return expected; };
        var removeHandler = sinon.spy();
        Observable.fromEventPattern(addHandler, removeHandler).subscribe(noop_1.noop).unsubscribe();
        var call = removeHandler.getCall(0);
        chai_1.expect(call).calledWith(sinon.match.any, expected);
    });
    it('should send errors in addHandler down the error path', function (done) {
        Observable.fromEventPattern(function (h) {
            throw 'bad';
        }, noop_1.noop).subscribe(function () { return done(new Error('should not be called')); }, function (err) {
            chai_1.expect(err).to.equal('bad');
            done();
        }, function () { return done(new Error('should not be called')); });
    });
    it('should accept a selector that maps outgoing values', function (done) {
        var target;
        var trigger = function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i - 0] = arguments[_i];
            }
            if (target) {
                target.apply(null, arguments);
            }
        };
        var addHandler = function (handler) {
            target = handler;
        };
        var removeHandler = function (handler) {
            target = null;
        };
        var selector = function (a, b) {
            return a + b + '!';
        };
        Observable.fromEventPattern(addHandler, removeHandler, selector).take(1)
            .subscribe(function (x) {
            chai_1.expect(x).to.equal('testme!');
        }, function (err) {
            done(new Error('should not be called'));
        }, function () {
            done();
        });
        trigger('test', 'me');
    });
    it('should send errors in the selector down the error path', function (done) {
        var target;
        var trigger = function (value) {
            if (target) {
                target(value);
            }
        };
        var addHandler = function (handler) {
            target = handler;
        };
        var removeHandler = function (handler) {
            target = null;
        };
        var selector = function (x) {
            throw 'bad';
        };
        Observable.fromEventPattern(addHandler, removeHandler, selector)
            .subscribe(function (x) {
            done(new Error('should not be called'));
        }, function (err) {
            chai_1.expect(err).to.equal('bad');
            done();
        }, function () {
            done(new Error('should not be called'));
        });
        trigger('test');
    });
});
//# sourceMappingURL=fromEventPattern-spec.js.map