| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| var test = require('prova'); |
| var Promise = require('../../src/lib/promise'); |
| var TaskSequence = require('../../src/lib/task-sequence'); |
| var promiseFor = require('../../src/lib/async-helper').promiseFor; |
| |
| test('task sequence', function(t) { |
| var callOrder = []; |
| function callSequence(n) { |
| var numLoop = 5 - n; |
| // Create a promise chain of 5 - n and then append to the array. We create |
| // a longer promise chain for early tasks to make sure that the task |
| // queue waits for early tasks to finish before starting later tasks. If |
| // the tasks were run in parallel, then later tasks with shorter chains |
| // will catch up to earlier promises. |
| return promiseFor(numLoop, function() { |
| return Promise.resolve(); |
| }).then(function() { |
| callOrder.push(n); |
| }); |
| } |
| var sequence = new TaskSequence(); |
| for (var i = 0; i < 5; i++) { |
| sequence.addTask(callSequence.bind(null, i)); |
| } |
| sequence.addTask(function() { |
| t.deepEqual(callOrder, [0, 1, 2, 3, 4]); |
| t.end(); |
| return Promise.resolve(); |
| }); |
| }); |
| |
| test('task continues after a failure', function(t) { |
| var sequence = new TaskSequence(); |
| sequence.addTask(function() { |
| throw new Error('Bad!!!'); |
| }); |
| sequence.addTask(function() { |
| t.pass('task run after failure'); |
| t.end(); |
| }); |
| }); |