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