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.
		
		
		
		
		
			
		
			
				
					
					
						
							585 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
	
	
							585 lines
						
					
					
						
							13 KiB
						
					
					
				| 'use strict'
 | |
| 
 | |
| var test = require('tape')
 | |
| var factory = require('./')
 | |
| 
 | |
| function buildTest (steed) {
 | |
|   test('each', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
| 
 | |
|     steed.each(input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.notOk(snd, 'no second argument')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('each with this', function (t) {
 | |
|     t.plan(13)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.each(obj, input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.error(err, 'no error')
 | |
|       t.notOk(snd, 'no second argument')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('each with this without a done callback', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.each(obj, input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('each without a done callback', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
| 
 | |
|     steed.each(input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('map', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
| 
 | |
|     steed.map(input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('map with this', function (t) {
 | |
|     t.plan(13)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.map(obj, input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('map with this without a done callback', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.map(obj, input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('map without a done callback', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
| 
 | |
|     steed.map(input, function (num, cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('eachSeries', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
| 
 | |
|     steed.eachSeries(input, function (num, cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         t.equal(input[i++], num)
 | |
|         cb(null, input[i] * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.notOk(snd, 'no second argument')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('eachSeries with this', function (t) {
 | |
|     t.plan(13)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.eachSeries(obj, input, function (num, cb) {
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         t.equal(input[i++], num)
 | |
|         cb(null, input[i] * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.notOk(snd, 'no second argument')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('eachSeries with this without a done callback', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.eachSeries(obj, input, function (num, cb) {
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         t.equal(input[i++], num)
 | |
|         cb(null, input[i] * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('eachSeries without a done callback', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
| 
 | |
|     steed.eachSeries(input, function (num, cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         t.equal(input[i++], num)
 | |
|         cb(null, input[i] * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('mapSeries', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
| 
 | |
|     steed.mapSeries(input, function (num, cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('mapSeries with this', function (t) {
 | |
|     t.plan(13)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.mapSeries(obj, input, function (num, cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('mapSeries with this without a done callback', function (t) {
 | |
|     t.plan(9)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     steed.mapSeries(obj, input, function (num, cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('mapSeries without a done callback', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
| 
 | |
|     steed.mapSeries(input, function (num, cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         t.equal(res, num)
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('parallel', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.parallel([myfunc, myfunc, myfunc], function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('parallel with this', function (t) {
 | |
|     t.plan(10)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.parallel(obj, [myfunc, myfunc, myfunc], function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('parallel with this without a done callback', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.parallel(obj, [myfunc, myfunc, myfunc])
 | |
|   })
 | |
| 
 | |
|   test('parallel without a done callback', function (t) {
 | |
|     t.plan(3)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.parallel([myfunc, myfunc, myfunc])
 | |
|   })
 | |
| 
 | |
|   test('parallel with an object', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(0, i, 'calls in parallel')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.parallel({
 | |
|       a: myfunc,
 | |
|       b: myfunc,
 | |
|       c: myfunc
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual({
 | |
|         a: 2,
 | |
|         b: 4,
 | |
|         c: 6
 | |
|       }, snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('series', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.series([myfunc, myfunc, myfunc], function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('series with this', function (t) {
 | |
|     t.plan(10)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.series(obj, [myfunc, myfunc, myfunc], function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       t.deepEqual([2, 4, 6], snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('series with this without a done callback', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
|     var obj = {}
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       t.equal(obj, this, 'this is set')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.series(obj, [myfunc, myfunc, myfunc])
 | |
|   })
 | |
| 
 | |
|   test('series without a done callback', function (t) {
 | |
|     t.plan(3)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.series([myfunc, myfunc, myfunc])
 | |
|   })
 | |
| 
 | |
|   test('series with an object', function (t) {
 | |
|     t.plan(6)
 | |
| 
 | |
|     var input = [1, 2, 3]
 | |
|     var i = 0
 | |
|     var count = 0
 | |
| 
 | |
|     function myfunc (cb) {
 | |
|       t.equal(count++, i, 'calls in series')
 | |
|       setImmediate(function () {
 | |
|         var res = input[i++]
 | |
|         cb(null, res * 2)
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     steed.series({
 | |
|       a: myfunc,
 | |
|       b: myfunc,
 | |
|       c: myfunc
 | |
|     }, function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual({
 | |
|         a: 2,
 | |
|         b: 4,
 | |
|         c: 6
 | |
|       }, snd, 'second args contains the map')
 | |
|       t.equal(3, i, 'iterated over all inputs')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('waterfall', function (t) {
 | |
|     t.plan(4)
 | |
| 
 | |
|     steed.waterfall([ function a (cb) {
 | |
|       cb(null, [1])
 | |
|     }, function b (arg, cb) {
 | |
|       t.deepEqual([1], arg, 'arg for b is right')
 | |
|       arg.push(2)
 | |
|       cb(null, arg)
 | |
|     }, function c (arg, cb) {
 | |
|       t.deepEqual([1, 2], arg, 'arg for c is right')
 | |
|       arg.push(3)
 | |
|       cb(null, arg)
 | |
|     }], function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual([1, 2, 3], snd, 'second args contains the last result')
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('queue', function (t) {
 | |
|     t.plan(4)
 | |
| 
 | |
|     steed.waterfall([ function a (cb) {
 | |
|       cb(null, [1])
 | |
|     }, function b (arg, cb) {
 | |
|       t.deepEqual([1], arg, 'arg for b is right')
 | |
|       arg.push(2)
 | |
|       cb(null, arg)
 | |
|     }, function c (arg, cb) {
 | |
|       t.deepEqual([1, 2], arg, 'arg for c is right')
 | |
|       arg.push(3)
 | |
|       cb(null, arg)
 | |
|     }], function (err, snd) {
 | |
|       t.error(err, 'no error')
 | |
|       t.deepEqual([1, 2, 3], snd, 'second args contains the last result')
 | |
|     })
 | |
|   })
 | |
| }
 | |
| 
 | |
| buildTest(factory)
 | |
| buildTest(factory())
 |