File "condvariable.js"

Full Path: /srv/www/www.cadoro.it/app/lib/locks/test/condvariable.js
File size: 1.32 KB
MIME-type: text/plain
Charset: utf-8

var locks = require('..');
var test = require('tape');

var trueTest = function (value) { return value === true; };
var falseTest = function (value) { return value === false; };


test('CondVariable', function (t) {
	var cond = locks.createCondVariable(false);
	var timerFired = false;

	t.throws(function () {
		cond.wait({}, function () {});
	}, 'Objects are not valid conditions to wait for')

	t.equal(cond.get(), false, 'Condition starts false');

	cond.wait(trueTest, function () {
		t.equal(this.get(), true, 'Condition is true');

		cond.set(null);

		var fired = 0;
		var expect = 4;

		cond.wait('foo', function () {
			t.equal(this.get(), 'foo', 'String matching');
			fired += 1;
		});

		cond.wait(/foo/, function () {
			t.equal(this.get(), 'foo', 'RegExp matching');
			fired += 1;
		});

		cond.wait(5, function () {
			t.equal(this.get(), 5, 'Number matching');
			fired += 1;
		});

		cond.wait(false, function () {
			t.equal(this.get(), false, 'Boolean matching');
			fired += 1;
		});

		cond.set('foo');
		cond.set(5);
		cond.set(false);

		t.equal(fired, 4, 'All match types fired');

		t.end();
	});

	cond.wait(falseTest, function () {
		t.equal(this.get(), false, 'Condition is false');
		t.equal(timerFired, false, 'Timer has not yet fired');
	});

	setTimeout(function () {
		timerFired = true;
		cond.set(true);
	}, 10);
});