<!DOCTYPE HTML> <html> <head> <title>Promise Tests</title> </head> <body> <h1>Promise Tests</h1> <p>This test demonstrates the use of <tt>promise_test</tt>. 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"); promise_test( function() { return Promise.resolve("x") .then( function(value) { assert_equals(value, "x", "Fulfilled promise should pass result to " + "fulfill reaction."); }); }, "Promise fulfillment with result"); promise_test( function(t) { return Promise.reject(new Error("fail")) .then(t.unreached_func("Promise should reject"), function(reason) { assert_true( reason instanceof Error, "Rejected promise should pass reason to fulfill reaction."); assert_equals( reason.message, "fail", "Rejected promise should pass reason to reject reaction."); }); }, "Promise rejection with result"); promise_test( function() { var resolutions = []; return Promise.resolve("a") .then( function(value) { resolutions.push(value); return "b"; }) .then( function(value) { resolutions.push(value); return "c"; }) .then( function(value) { resolutions.push(value); assert_array_equals(resolutions, ["a", "b", "c"]); }); }, "Chain of promise resolutions"); promise_test( function(t) { var resolutions = []; return Promise.resolve("x") .then( function(value) { assert_true(false, "Expected failure."); }) .then(t.unreached_func("UNEXPECTED FAILURE: Promise should not have resolved.")); }, "Assertion failure in a fulfill reaction (should FAIL with an expected failure)"); promise_test( function(t) { return new Promise( function(resolve, reject) { reject(123); }) .then(t.unreached_func("UNEXPECTED FAILURE: Fulfill reaction reached after rejection."), t.unreached_func("Expected failure.")); }, "unreached_func as reactor (should FAIL with an expected failure)"); promise_test( function() { return true; }, "promise_test with function that doesn't return a Promise"); promise_test(function(){}, "promise_test with function that doesn't return anything"); promise_test( function() { return Promise.reject("Expected rejection"); }, "promise_test with unhandled rejection (should FAIL)"); promise_test( function() { return Promise.resolve(10) .then( function(value) { throw Error("Expected exception."); }); }, "promise_test with unhandled exception in fulfill reaction (should FAIL)"); promise_test( function(t) { return Promise.reject(10) .then( t.unreached_func("UNEXPECTED FAILURE: Fulfill reaction reached after rejection."), function(value) { throw Error("Expected exception."); }); }, "promise_test with unhandled exception in reject reaction (should FAIL)"); </script>