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.
281 lines
5.2 KiB
281 lines
5.2 KiB
3 years ago
|
var test = require('tape')
|
||
|
var series = require('./')
|
||
|
|
||
|
test('basically works', function (t) {
|
||
|
t.plan(8)
|
||
|
|
||
|
var instance = series({
|
||
|
released: released
|
||
|
})
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [build(0), build(1)], 42, function done () {
|
||
|
t.equal(count, 2, 'all functions must have completed')
|
||
|
})
|
||
|
|
||
|
function build (expected) {
|
||
|
return function something (arg, cb) {
|
||
|
t.equal(obj, this)
|
||
|
t.equal(arg, 42)
|
||
|
t.equal(expected, count)
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb()
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function released () {
|
||
|
t.pass()
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('accumulates results', function (t) {
|
||
|
t.plan(8)
|
||
|
|
||
|
var instance = series({
|
||
|
released: released
|
||
|
})
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [something, something], 42, function done (err, results) {
|
||
|
t.notOk(err, 'no error')
|
||
|
t.equal(count, 2, 'all functions must have completed')
|
||
|
t.deepEqual(results, [1, 2])
|
||
|
})
|
||
|
|
||
|
function something (arg, cb) {
|
||
|
t.equal(obj, this)
|
||
|
t.equal(arg, 42)
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb(null, count)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function released () {
|
||
|
t.pass()
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('fowards errs', function (t) {
|
||
|
t.plan(4)
|
||
|
|
||
|
var instance = series({
|
||
|
released: released
|
||
|
})
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [somethingErr, something], 42, function done (err, results) {
|
||
|
t.ok(err, 'error exists')
|
||
|
t.equal(err.message, 'this is an err!')
|
||
|
t.equal(count, 1, 'only the first function must have completed')
|
||
|
})
|
||
|
|
||
|
function something (arg, cb) {
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb(null, count)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function somethingErr (arg, cb) {
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb(new Error('this is an err!'))
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function released () {
|
||
|
t.pass()
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('does not forward errors or result with results:false flag', function (t) {
|
||
|
t.plan(8)
|
||
|
|
||
|
var instance = series({
|
||
|
released: released,
|
||
|
results: false
|
||
|
})
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [something, something], 42, function done (err, results) {
|
||
|
t.equal(err, undefined, 'no err')
|
||
|
t.equal(results, undefined, 'no err')
|
||
|
t.equal(count, 2, 'all functions must have completed')
|
||
|
})
|
||
|
|
||
|
function something (arg, cb) {
|
||
|
t.equal(obj, this)
|
||
|
t.equal(arg, 42)
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb()
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function released () {
|
||
|
t.pass()
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('should call done and released if an empty is passed', function (t) {
|
||
|
t.plan(2)
|
||
|
|
||
|
var instance = series({
|
||
|
released: released
|
||
|
})
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [], 42, function done () {
|
||
|
t.pass()
|
||
|
})
|
||
|
|
||
|
function released () {
|
||
|
t.pass()
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('each support', function (t) {
|
||
|
t.plan(8)
|
||
|
|
||
|
var instance = series({
|
||
|
released: released
|
||
|
})
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
var args = [1, 2, 3]
|
||
|
var i = 0
|
||
|
|
||
|
instance(obj, something, [].concat(args), function done () {
|
||
|
t.equal(count, 3, 'all functions must have completed')
|
||
|
})
|
||
|
|
||
|
function something (arg, cb) {
|
||
|
t.equal(obj, this, 'this matches')
|
||
|
t.equal(args[i++], arg, 'the arg is correct')
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb()
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function released () {
|
||
|
t.pass()
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('call the callback with the given this', function (t) {
|
||
|
t.plan(1)
|
||
|
|
||
|
var instance = series()
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [build(), build()], 42, function done () {
|
||
|
t.equal(obj, this, 'this matches')
|
||
|
})
|
||
|
|
||
|
function build () {
|
||
|
return function something (arg, cb) {
|
||
|
setImmediate(cb)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('call the callback with the given this with no results', function (t) {
|
||
|
t.plan(1)
|
||
|
|
||
|
var instance = series({ results: false })
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [build(), build()], 42, function done () {
|
||
|
t.equal(obj, this, 'this matches')
|
||
|
})
|
||
|
|
||
|
function build () {
|
||
|
return function something (arg, cb) {
|
||
|
setImmediate(cb)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('call the callback with the given this with no data', function (t) {
|
||
|
t.plan(1)
|
||
|
|
||
|
var instance = series()
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [], 42, function done () {
|
||
|
t.equal(obj, this, 'this matches')
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('support no final callback', function (t) {
|
||
|
t.plan(6)
|
||
|
|
||
|
var instance = series()
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [build(0), build(1)], 42)
|
||
|
|
||
|
function build (expected) {
|
||
|
return function something (arg, cb) {
|
||
|
t.equal(obj, this)
|
||
|
t.equal(arg, 42)
|
||
|
t.equal(expected, count)
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb()
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('call without arg if there is no arg with no results', function (t) {
|
||
|
t.plan(3)
|
||
|
|
||
|
var instance = series({
|
||
|
results: false
|
||
|
})
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [something, something], 42, function done () {
|
||
|
t.equal(count, 2, 'all functions must have completed')
|
||
|
})
|
||
|
|
||
|
function something (cb) {
|
||
|
t.equal(obj, this)
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb()
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('call without arg if there is no arg with results', function (t) {
|
||
|
t.plan(3)
|
||
|
|
||
|
var instance = series()
|
||
|
var count = 0
|
||
|
var obj = {}
|
||
|
|
||
|
instance(obj, [something, something], 42, function done () {
|
||
|
t.equal(count, 2, 'all functions must have completed')
|
||
|
})
|
||
|
|
||
|
function something (cb) {
|
||
|
t.equal(obj, this)
|
||
|
setImmediate(function () {
|
||
|
count++
|
||
|
cb()
|
||
|
})
|
||
|
}
|
||
|
})
|