123 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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
 | 
						|
})
 |