|
|
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 })
|