<!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>