var tape = require('tape') var Lock = require('../') tape('single lock', function (t) { var lock = Lock(), r = Math.random(), r2 = Math.random() lock('hello', function (release) { t.equal(lock.isLocked('hello'), true) var _release = release(function (_r, _r2) { t.equal(lock.isLocked('hello'), false) t.equal(_r, r) t.equal(_r2, r2) t.end() }) t.equal(lock.isLocked('hello'), true) _release(r, r2) t.equal(lock.isLocked('hello'), false) }) }) tape('2 locks', function (t) { var lock = Lock(), released = 0 lock('what?', function (release) { t.equal(lock.isLocked('what?'), true) release(function () { console.log('released!') released = 1 })() }) lock('what?', function (release) { console.log(released) t.equal(released, 1, 'first lock should be completely released') t.equal(lock.isLocked('what?'), true) release(function () { t.equal(lock.isLocked('what?'), false) t.end() })() }) }) tape('3 locks', function (t) { var lock = Lock(), released = 0 lock('what?', function (release) { t.equal(lock.isLocked('what?'), true) release(function () { console.log('released! 1') released = 1 })() }) lock('what?', function (release) { console.log('1st', released) t.equal(released, 1, 'first lock should be completely released') t.equal(lock.isLocked('what?'), true) release(function () { console.log('released! 2') released = 2 t.equal(lock.isLocked('what?'), false) })() }) lock('what?', function (release) { console.log('2nd', released) t.equal(released, 2, 'second lock should be completely released') t.equal(lock.isLocked('what?'), true) release(function () { console.log('released! 3') t.equal(lock.isLocked('what?'), false) t.end() })() }) }) tape('lock with optional done', function (t) { var lock = Lock(), released = 0 lock('what?', function (release) { released = 1 process.nextTick(release()) }) lock('what?', function (release) { t.equal(released, 1, 'first lock should be completely released') release(function () { t.end() })() }) })