summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/webappapis/user-prompts/print-manual.html
diff options
context:
space:
mode:
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.html93
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>