Revision 2486f01bf4c58de1c1b7cb39322af7b55c6c700b authored by Simon Pieters on 28 November 2014, 11:12:00 UTC, committed by Simon Pieters on 28 November 2014, 11:12:00 UTC
2 parent s eeea5b7 + f033dd6
Raw File
apisample10.html
<!DOCTYPE HTML>
<html>
<head>
<title>Async Tests and Promises</title>
</head>
<body>
<h1>Async Tests and Promises</h1>
<p>This test assumes ECMAScript 6 Promise support. Some failures are expected.</p>
<div id="log"></div>
<script src="testharness.js"></script>
<script src="testharnessreport.js"></script>
<script>

test(function() {
  var p = new Promise(function(resolve, reject) {});
  assert_true('then' in p);
  assert_equals(typeof Promise.resolve, 'function');
  assert_equals(typeof Promise.reject, 'function');
}, "Promises are supported in your browser");

(function() {
  var t = async_test("Promise resolution");
  t.step(function() {
    Promise.resolve('x').then(
      t.step_func(function(value) {
        assert_equals(value, 'x');
        t.done();
      }),
      t.unreached_func('Promise should not reject')
    );
  });
}());

(function() {
  var t = async_test("Promise rejection");
  t.step(function() {
    Promise.reject(Error('fail')).then(
      t.unreached_func('Promise should reject'),
      t.step_func(function(reason) {
        assert_true(reason instanceof Error);
        assert_equals(reason.message, 'fail');
        t.done();
      })
    );
  });
}());

(function() {
  var t = async_test("Promises resolution chaining");
  t.step(function() {
    var resolutions = [];
    Promise.resolve('a').then(
      t.step_func(function(value) {
        resolutions.push(value);
        return 'b';
      })
    ).then(
      t.step_func(function(value) {
        resolutions.push(value);
        return 'c';
      })
    ).then(
      t.step_func(function(value) {
        resolutions.push(value);

        assert_array_equals(resolutions, ['a', 'b', 'c']);
        t.done();
      })
    ).catch(
      t.unreached_func('promise should not have rejected')
    );
  });
}());

(function() {
  var t = async_test("Use of step_func with Promises");
  t.step(function() {
    var resolutions = [];
    Promise.resolve('x').then(
      t.step_func_done(),
      t.unreached_func('Promise should not have rejected')
    );
  });
}());

(function() {
  var t = async_test("Promises and test assertion failures (should fail)");
  t.step(function() {
    var resolutions = [];
    Promise.resolve('x').then(
      t.step_func(function(value) {
        assert_true(false, 'This failure is expected');
      })
    ).then(
      t.unreached_func('Promise should not have resolved')
    ).catch(
      t.unreached_func('Promise should not have rejected')
    );
  });
}());

(function() {
  var t = async_test("Use of unreached_func with Promises (should fail)");
  t.step(function() {
    var resolutions = [];
    var r;
    var p = new Promise(function(resolve, reject) {
      // Reject instead of resolve, to demonstrate failure.
      reject(123);
    });
    p.then(
      function(value) {
        assert_equals(value, 123, 'This should not actually happen');
      },
      t.unreached_func('This failure is expected')
    );
  });
}());
</script>
back to top