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