| var test = require('tap').test |
| var inf = require('./inflight.js') |
| |
| |
| function req (key, cb) { |
| cb = inf(key, cb) |
| if (cb) setTimeout(function () { |
| cb(key) |
| cb(key) |
| }) |
| return cb |
| } |
| |
| test('basic', function (t) { |
| var calleda = false |
| var a = req('key', function (k) { |
| t.notOk(calleda) |
| calleda = true |
| t.equal(k, 'key') |
| if (calledb) t.end() |
| }) |
| t.ok(a, 'first returned cb function') |
| |
| var calledb = false |
| var b = req('key', function (k) { |
| t.notOk(calledb) |
| calledb = true |
| t.equal(k, 'key') |
| if (calleda) t.end() |
| }) |
| |
| t.notOk(b, 'second should get falsey inflight response') |
| }) |
| |
| test('timing', function (t) { |
| var expect = [ |
| 'method one', |
| 'start one', |
| 'end one', |
| 'two', |
| 'tick', |
| 'three' |
| ] |
| var i = 0 |
| |
| function log (m) { |
| t.equal(m, expect[i], m + ' === ' + expect[i]) |
| ++i |
| if (i === expect.length) |
| t.end() |
| } |
| |
| function method (name, cb) { |
| log('method ' + name) |
| process.nextTick(cb) |
| } |
| |
| var one = inf('foo', function () { |
| log('start one') |
| var three = inf('foo', function () { |
| log('three') |
| }) |
| if (three) method('three', three) |
| log('end one') |
| }) |
| |
| method('one', one) |
| |
| var two = inf('foo', function () { |
| log('two') |
| }) |
| if (two) method('one', two) |
| |
| process.nextTick(log.bind(null, 'tick')) |
| }) |
| |
| test('parameters', function (t) { |
| t.plan(8) |
| |
| var a = inf('key', function (first, second, third) { |
| t.equal(first, 1) |
| t.equal(second, 2) |
| t.equal(third, 3) |
| }) |
| t.ok(a, 'first returned cb function') |
| |
| var b = inf('key', function (first, second, third) { |
| t.equal(first, 1) |
| t.equal(second, 2) |
| t.equal(third, 3) |
| }) |
| t.notOk(b, 'second should get falsey inflight response') |
| |
| setTimeout(function () { |
| a(1, 2, 3) |
| }) |
| }) |