<!DOCTYPE html>
<!--
Copyright (c) 2013 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/base/task.html">

<script>
'use strict';

tr.b.unittest.testSuite(function() {
  var Task = tr.b.Task;

  test('basicAllStepsPass', function() {
    var results = [];

    var startingTask = new Task(function(task) {
      results.push('a');
      task.subTask(function() {
        results.push('a/1');
      }, this);
      task.subTask(function() {
        results.push('a/2');
      }, this);
    }, this);
    startingTask.after(function() {
      results.push('b');
    }, this).after(function() {
      results.push('c');
    }, this);

    Task.RunSynchronously(startingTask);
    assert.deepEqual(results, ['a', 'a/1', 'a/2', 'b', 'c']);
  });

  test('basicAllStepsPassAsync', function() {
    var results = [];

    var startingTask = new Task(function(task) {
      results.push('a');
      task.subTask(function() {
        results.push('a/1');
      }, this);
      task.subTask(function() {
        results.push('a/2');
      }, this);
    }, this);
    startingTask.after(function() {
      results.push('b');
    }, this).after(function() {
      results.push('c');
    }, this);

    var promise = Task.RunWhenIdle(startingTask);
    promise.then(function() {
      assert.deepEqual(results, ['a', 'a/1', 'a/2', 'b', 'c']);
    });
    return promise;
  });

  test('taskThatThrowsShouldRejectItsPromise', function() {
    var startingTask = new Task(function(task) {
      throw new Error(
          'IGNORE. This is an expected error to test error handling.');
    }, this);

    var taskPromise = Task.RunWhenIdle(startingTask);

    return new Promise(function(resolve, reject) {
      taskPromise.then(function() {
        reject(new Error('Should have thrown'));
      }, function(err) {
        resolve();
      });
    });
  });

});
</script>
