diff options
Diffstat (limited to 'testing/web-platform/tests/html/webappapis/user-prompts/print-manual.html')
-rw-r--r-- | testing/web-platform/tests/html/webappapis/user-prompts/print-manual.html | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/webappapis/user-prompts/print-manual.html b/testing/web-platform/tests/html/webappapis/user-prompts/print-manual.html new file mode 100644 index 0000000000..67cbd0dd48 --- /dev/null +++ b/testing/web-platform/tests/html/webappapis/user-prompts/print-manual.html @@ -0,0 +1,93 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Printing</title> +<link rel=help href="https://html.spec.whatwg.org/#printing"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +setup({explicit_timeout: true}) +</script> + +<p>Click on the button below.</p> +<p>If the browser offers to print the current page, dismiss the prompt to +return to this page. The following should then appear in the box marked as +"Output":</p> +<pre> +before calling print() +beforeprint +afterprint +after calling print() +</pre> +<p>If no user dialog appears, either the above or the following should be +printed in the box marked as "Output":</p> +<pre> +before calling print() +after calling print() +</pre> +<p>The test passes if the above criteria are satisfied and "PASS" appears in a +table below this paragraph. The test fails otherwise.</p> + +<button onclick="testBtn(this)">Click here!</button> +<h3>Output</h3> +<pre id=output></pre> + +<script> +"use strict"; +// This test is actually synchronous, but we use async_test()'s nice +// infrastructure around t.step() to capture errors in event listeners. This is +// necessary since it seems like in Chrome, exceptions in beforeprint/afterprint +// event listeners are not propagated to error events. See +// https://crbug.com/977828. +const t = async_test(); +const log = []; +function out(str) { + log.push(str); + output.appendChild(document.createTextNode(str + "\n")); +} +function testBtn(btn) { + btn.remove(); + window.addEventListener("beforeprint", function (ev) { + // t.step_func() does not preserve `this`, which we test below. + t.step(() => { + out("beforeprint"); + assert_equals(Object.getPrototypeOf(ev), Event.prototype); + assert_equals(this, window); + assert_equals(ev.target, window); + assert_equals(ev.type, "beforeprint"); + }); + }); + window.addEventListener("afterprint", function (ev) { + // t.step_func() does not preserve `this`, which we test below. + t.step(() => { + out("afterprint"); + assert_equals(Object.getPrototypeOf(ev), Event.prototype); + assert_equals(this, window); + assert_equals(ev.target, window); + assert_equals(ev.type, "afterprint"); + }); + }); + out("before calling print()"); + print(); + out("after calling print()"); + t.step(() => { + try { + assert_array_equals(log, [ + "before calling print()", + "beforeprint", + "afterprint", + "after calling print()", + ]); + } catch (err) { + try { + assert_array_equals(log, [ + "before calling print()", + "after calling print()", + ]); + } catch (err) { + assert_unreached("Output does not match either possibility"); + } + } + }); + t.done(); +} +</script> |