You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					123 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					123 lines
				
				2.0 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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
							 | 
						||
| 
								 | 
							
								})
							 |