| var t = require('tap') |
| var loop = require('./') |
| var obj = {} |
| |
| t.test('basic passing operation', function (t) { |
| var i = 0 |
| loop(obj, [ |
| function (cb) { |
| t.equal(this, obj, 'this is correct 1') |
| t.equal(i, 0, '0') |
| cb() |
| i++ |
| }, |
| function () { |
| t.equal(this, obj, 'this is correct 2') |
| t.equal(i++, 1, '1') |
| return Promise.resolve(true) |
| }, |
| function (cb) { |
| t.equal(this, obj, 'this is correct 3') |
| t.equal(i++, 2, '2') |
| setTimeout(cb) |
| }, |
| function (cb) { |
| t.equal(this, obj, 'this is correct 4') |
| t.equal(i++, 3, '3') |
| process.nextTick(cb) |
| } |
| ], function () { |
| t.equal(this, obj, 'this is correct 5') |
| t.equal(i++, 4, '4') |
| t.end() |
| }, function (er) { |
| throw er |
| }) |
| t.equal(i, 2, '2, after loop() call') |
| }) |
| |
| t.test('throws', function (t) { |
| loop(obj, [ |
| function (cb) { |
| t.equal(this, obj, 'this is correct') |
| throw new Error('foo') |
| }, |
| function () { |
| t.fail('should not get here') |
| } |
| ], function () { |
| t.fail('should not get here') |
| }, function (er) { |
| t.match(er, { message: 'foo' }) |
| t.end() |
| }) |
| }) |
| |
| t.test('all sync', function (t) { |
| var i = 0 |
| loop(obj, [ |
| function (cb) { t.equal(i++, 0); cb() }, |
| function (cb) { t.equal(i++, 1); cb() }, |
| function (cb) { t.equal(i++, 2); cb() }, |
| function (cb) { t.equal(i++, 3); cb() }, |
| function (cb) { t.equal(i++, 4); cb() } |
| ], function () { |
| t.equal(i++, 5) |
| }, function (er) { |
| throw er |
| }) |
| t.equal(i, 6) |
| t.end() |
| }) |
| |
| t.test('broken promise', function (t) { |
| loop(obj, [ |
| function (cb) { |
| t.equal(this, obj, 'this is correct') |
| return Promise.reject(new Error('foo')) |
| }, |
| function () { |
| t.fail('should not get here') |
| } |
| ], function () { |
| t.fail('should not get here') |
| }, function (er) { |
| t.equal(this, obj, 'this is correct') |
| t.match(er, { message: 'foo' }) |
| t.end() |
| }) |
| }) |
| |
| t.test('cb err', function (t) { |
| loop(obj, [ |
| function (cb) { |
| t.equal(this, obj, 'this is correct') |
| cb(new Error('foo')) |
| }, |
| function () { |
| t.fail('should not get here') |
| } |
| ], function () { |
| t.fail('should not get here') |
| }, function (er) { |
| t.equal(this, obj, 'this is correct') |
| t.match(er, { message: 'foo' }) |
| t.end() |
| }) |
| }) |