diff options
Diffstat (limited to 'testing/web-platform/tests/infrastructure/testdriver/bless.html')
-rw-r--r-- | testing/web-platform/tests/infrastructure/testdriver/bless.html | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/testing/web-platform/tests/infrastructure/testdriver/bless.html b/testing/web-platform/tests/infrastructure/testdriver/bless.html new file mode 100644 index 0000000000..12257df01b --- /dev/null +++ b/testing/web-platform/tests/infrastructure/testdriver/bless.html @@ -0,0 +1,114 @@ +<!DOCTYPE html> +<head> + <meta charset="utf-8"> + <title>TestDriver bless method</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script> +promise_test(() => { + return test_driver.bless('empty', () => {}); +}, 'functions in the absence of a `body` element'); + </script> +</head> +<body> +<script> +// At the time of this writing, the only standard requirement for user +// activation concerns the interaction between iframe elements and their parent +// browsing contexts [1]. Because testdriver.js currently cannot operate within +// an iframe, the standard requirement cannot be used to verify the correctness +// of the `bless` method. Instead, rely on the optional behavior of early exit +// and rejecting in `video.play()` if the media is not "allowed to play". [2] +// Browsers which don't implement this will pass this test spuriously. +// +// [1] https://html.spec.whatwg.org/multipage/origin.html#attr-iframe-sandbox-allow-top-navigation-by-user-activation +// [2] https://html.spec.whatwg.org/multipage/media.html#allowed-to-play +promise_test(t => { + const video = document.createElement('video'); + document.body.appendChild(video); + t.add_cleanup(() => video.remove()); + return test_driver.bless('start video playback', () => { + // `paused` changes before `play()` returns when "allowed to play", so the + // promise, if any, is ignored. + assert_true(video.paused); + const playPromise = video.play(); + assert_false(video.paused); + if (playPromise) { + playPromise.catch(() => {}); + } + }); +}, 'user activation'); + +promise_test(() => { + return test_driver.bless('demonstrates return value without action') + .then((value) => { + assert_equals(value, null); + }); +}, 'no action function provided'); + +promise_test(() => { + const expectedValue = {}; + + return test_driver.bless('demonstrate a synchronous return value', () => { + return expectedValue; + }).then((actualValue) => { + assert_equals( + actualValue, + expectedValue, + 'the promise should be fulfilled with the returned value' + ); + }); + +}, 'synchronous return value'); + +promise_test(() => { + const expectedError = new Error(); + + return test_driver.bless('demonstrates a synchronous error', () => { + throw expectedError; + }) + .then(() => { + assert_unreached('the promise should be rejected'); + }, (actualError) => { + assert_equals( + actualError, + expectedError, + 'the promise should be rejected with the thrown value' + ); + }); +}, 'synchronous error'); + +promise_test(() => { + const expectedValue = {}; + + return test_driver.bless('demonstrate an asynchronous return value', () => { + return Promise.resolve(expectedValue); + }).then((actualValue) => { + assert_equals( + actualValue, + expectedValue, + 'the promise should be fulfilled with the fulfillment value' + ); + }); + +}, 'asynchronous return value'); + +promise_test(() => { + const expectedError = new Error(); + + return test_driver.bless('demonstrates an asynchronous error', () => { + return Promise.reject(expectedError); + }) + .then(() => { + assert_unreached('the promise should be rejected'); + }, (actualError) => { + assert_equals( + actualError, + expectedError, + 'the promise should be rejected with the rejected value' + ); + }); +}, 'asynchronous error'); +</script> +</body> |