| var tape = require('tape') |
| var thunky = require('./') |
| |
| tape('run only once', function (t) { |
| t.plan(3) |
| |
| var ran = 0 |
| var run = thunky(function (cb) { |
| ran++ |
| cb() |
| }) |
| |
| run(function () { |
| t.same(ran, 1, 'ran once') |
| }) |
| run(function () { |
| t.same(ran, 1, 'ran once') |
| }) |
| run(function () { |
| t.same(ran, 1, 'ran once') |
| }) |
| }) |
| |
| tape('run only once async', function (t) { |
| t.plan(3) |
| |
| var ran = 0 |
| var run = thunky(function (cb) { |
| process.nextTick(function () { |
| ran++ |
| cb() |
| }) |
| }) |
| |
| run(function () { |
| t.same(ran, 1, 'ran once') |
| }) |
| run(function () { |
| t.same(ran, 1, 'ran once') |
| }) |
| run(function () { |
| t.same(ran, 1, 'ran once') |
| }) |
| }) |
| |
| tape('re-run on error', function (t) { |
| t.plan(3) |
| |
| var ran = 0 |
| var run = thunky(function (cb) { |
| ran++ |
| cb(new Error('stop')) |
| }) |
| |
| run(function () { |
| t.same(ran, 1, 'ran once') |
| run(function () { |
| t.same(ran, 2, 'ran once') |
| run(function () { |
| t.same(ran, 3, 'ran once') |
| }) |
| }) |
| }) |
| }) |
| |
| tape('pass arguments', function (t) { |
| t.plan(6) |
| |
| var ran = 0 |
| var run = thunky(function (fn) { |
| ran++ |
| fn({ hello: 'world' }) |
| }) |
| |
| run(function (val) { |
| t.same(ran, 1, 'ran once') |
| t.same(val, { hello: 'world' }) |
| run(function (val) { |
| t.same(ran, 1, 'ran once') |
| t.same(val, { hello: 'world' }) |
| run(function (val) { |
| t.same(ran, 1, 'ran once') |
| t.same(val, { hello: 'world' }) |
| }) |
| }) |
| }) |
| }) |
| |
| tape('callback is optional', function (t) { |
| t.plan(2) |
| |
| var ran = 0 |
| var run = thunky(function (fn) { |
| ran++ |
| fn({ hello: 'world' }) |
| }) |
| |
| run() |
| run(function (val) { |
| t.same(ran, 1, 'ran once') |
| t.same(val, { hello: 'world' }) |
| }) |
| }) |
| |
| tape('always async', function (t) { |
| t.plan(2) |
| |
| var run = thunky(function (cb) { |
| process.nextTick(cb) |
| }) |
| |
| var sync = true |
| run(function () { |
| t.ok(!sync, 'not sync') |
| var innerSync = true |
| run(function () { |
| t.ok(!innerSync, 'not sync') |
| }) |
| innerSync = false |
| }) |
| sync = false |
| }) |