diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 01:47:29 +0000 |
commit | 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch) | |
tree | a31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/infrastructure/testdriver/bless.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip |
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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> |