first and take issues

by bman654

HTML

<script src="//code.jquery.com/qunit/qunit-1.11.0.js"></script>
<link rel="stylesheet" href="//code.jquery.com/qunit/qunit-1.11.0.css">
<script src="//rawgit.com/Reactive-Extensions/RxJS/master/dist/rx.all.js"></script>
<div id="qunit"></div>
<div id="qunit-fixture"></div>

JavaScript

QUnit.module("tests");

QUnit.test("take(1) completes after one observation", 2, function () {
    var s = new Rx.Subject();
    var q = s.take(1);
    q.subscribe(

    function (value) {
        QUnit.strictEqual(1, value);
    },

    function (err) {
        QUnit.ok(false);
    },

    function () {
        QUnit.ok(true, "completion called");
    });

    s.onNext(1);
});


QUnit.test("take(1) completes after one observation even when observer triggers new value", 2, function () {
    var s = new Rx.Subject();
    var q = s.take(1);
    var first = true;
    q.subscribe(

    function (value) {
        QUnit.strictEqual(1, value);
        if (first) {
            first = false;
            s.onNext(3); // trigger another operation
        }
    },

    function (err) {
        QUnit.ok(false);
    },

    function () {
        QUnit.ok(true, "completion called");
    });

    s.onNext(1);
});


QUnit.test("first() completes after one observation", 2, function () {
    var s = new Rx.Subject();
    var q = s.first();
    q.subscribe(

    function (value) {
        QUnit.strictEqual(1, value);
    },

    function (err) {
        QUnit.ok(false);
    },

    function () {
        QUnit.ok(true, "completion called");
    });

    s.onNext(1);
});


QUnit.test("first() completes after one observation even when observer triggers new value", 2, function () {
    var s = new Rx.Subject();
    var q = s.first();
    var first = true;
    q.subscribe(

    function (value) {
        QUnit.strictEqual(1, value);
        if (first) {
            first = false;
            s.onNext(3); // trigger another operation
        }
    },

    function (err) {
        QUnit.ok(false);
    },

    function () {
        QUnit.ok(true, "completion called");
    });

    s.onNext(1);
});