| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Promise rejection during initial parsing of document</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections"> |
| <body> |
| <p>The script in this test is executed immediately while parsing is ongoing, and |
| <a |
| href="https://html.spec.whatwg.org/multipage/webappapis.html#clean-up-after-running-script">cleaning |
| up after running script</a> involves queueing a task on the DOM manipulation |
| task source to fire the <code>unhandledrejection</code> event. Parsing then |
| completes, immediately transitioning the document's readiness state to |
| "interactive," and queuing another task on the DOM manipulation task source to |
| transition the state to "complete." |
| </p> |
| <script> |
| 'use strict'; |
| setup({ allow_uncaught_exception: true }); |
| |
| async_test(function(t) { |
| const events = []; |
| document.addEventListener('readystatechange', t.step_func(function() { |
| events.push('readystatechange:' + document.readyState); |
| })); |
| addEventListener('unhandledrejection', t.step_func(function() { |
| events.push('unhandledrejection'); |
| })); |
| |
| Promise.reject(new Error('this error is intentional')); |
| |
| addEventListener('load', t.step_func(function() { |
| assert_array_equals( |
| events, |
| [ |
| 'readystatechange:interactive', |
| 'unhandledrejection', |
| 'readystatechange:complete' |
| ] |
| ); |
| t.done(); |
| })); |
| }); |
| </script> |