summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order')
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash-twice.html38
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash.html32
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-pushState.html31
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-replaceState.html30
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash-twice.html29
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html27
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-pushState.html28
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-replaceState.html26
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/pushState-inside-popstate.html16
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-immediate.html38
-rw-r--r--testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-wait.html39
11 files changed, 334 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash-twice.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash-twice.html
new file mode 100644
index 0000000000..75889ef517
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash-twice.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ // 0 timeout is necessary because if we do location.hash assignment before load is finished firing it counts as a replacement.
+ window.addEventListener("load", () => t.step_timeout(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+
+ window.addEventListener("hashchange", t.step_func(() => {
+ assert_array_equals(window.eventOrder, ["load", "popstate", "popstate", "hashchange"]);
+
+ window.addEventListener("hashchange", t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load", "popstate", "popstate", "hashchange", "hashchange"]);
+ }));
+ }), { once: true });
+
+ location.hash = "#1";
+ assert_array_equals(window.eventOrder, ["load", "popstate"]);
+ location.hash = "#2";
+ assert_array_equals(window.eventOrder, ["load", "popstate", "popstate"]);
+ }, 0));
+}, "when changing hash, after the load event");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash.html
new file mode 100644
index 0000000000..f74d716d91
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-hash.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ // 0 timeout is necessary because if we do location.hash assignment before load is finished firing it counts as a replacement.
+ window.addEventListener("load", () => t.step_timeout(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+
+ window.addEventListener("hashchange", t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange"]);
+ }));
+
+ location.hash = "#1";
+ assert_array_equals(window.eventOrder, ["load", "popstate"]);
+ }, 0));
+}, "when changing hash, after the load event");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-pushState.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-pushState.html
new file mode 100644
index 0000000000..4f9f3dad47
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-pushState.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ // 0 timeout is necessary because if we do pushState before load is finished firing it counts as a replacement.
+ window.addEventListener("load", () => t.step_timeout(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+
+ t.step_timeout(t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+ }), 100);
+
+ history.pushState({ state: "new state" }, "");
+ }, 0));
+}, "when pushing state, after the load event");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-replaceState.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-replaceState.html
new file mode 100644
index 0000000000..28148ff7b2
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/after-load-replaceState.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ window.addEventListener("load", t.step_func(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+
+ t.step_timeout(t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+ }), 100);
+
+ history.replaceState({ state: "new state" }, "");
+ }));
+}, "when replacing state, after the load event");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash-twice.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash-twice.html
new file mode 100644
index 0000000000..7c8df11843
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash-twice.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ window.addEventListener("load", t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["popstate", "popstate", "hashchange", "hashchange", "load"]);
+ }));
+
+ location.hash = "#1";
+ assert_array_equals(window.eventOrder, ["popstate"]);
+ location.hash = "#2";
+ assert_array_equals(window.eventOrder, ["popstate", "popstate"]);
+}, "when changing hash twice, before load");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html
new file mode 100644
index 0000000000..97c4636fad
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-hash.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ window.addEventListener("load", t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["popstate", "hashchange", "load"]);
+ }));
+
+ location.hash = "#1";
+ assert_array_equals(window.eventOrder, ["popstate"]);
+}, "when changing hash, before load");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-pushState.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-pushState.html
new file mode 100644
index 0000000000..a08afa474f
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-pushState.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ window.addEventListener("load", t.step_func(() => {
+ t.step_timeout(t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+ }), 100);
+ }));
+
+ history.pushState({ state: "new state" }, "");
+}, "when pushing state, before load");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-replaceState.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-replaceState.html
new file mode 100644
index 0000000000..10d30038fb
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/before-load-replaceState.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ t.step_timeout(t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+ }), 100);
+
+ history.replaceState({ state: "new state" }, "");
+}, "when replacing state, before load");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/pushState-inside-popstate.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/pushState-inside-popstate.html
new file mode 100644
index 0000000000..35ada116ed
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/pushState-inside-popstate.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(t => {
+ let popstate_called = false;
+ window.onpopstate = t.step_func(e => {
+ popstate_called = true;
+ history.pushState(2, null, "#2");
+ assert_not_equals(history.state, e.state);
+ });
+ location.hash = "#1";
+ assert_true(popstate_called);
+}, "pushState inside popstate")
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-immediate.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-immediate.html
new file mode 100644
index 0000000000..51ea20b289
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-immediate.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ // 0 timeout is necessary because if we do location.hash assignment before load is finished firing it counts as a replacement.
+ window.addEventListener("load", () => t.step_timeout(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+
+ window.addEventListener("hashchange", t.step_func(() => {
+ assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange"]);
+
+ window.addEventListener("hashchange", t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange", "popstate", "hashchange"]);
+ }));
+ }), { once: true });
+
+ location.hash = "#1";
+ assert_array_equals(window.eventOrder, ["load", "popstate"]);
+ history.back();
+ assert_array_equals(window.eventOrder, ["load", "popstate"]);
+ }, 0));
+}, "when traversing back, before hashchange");
+</script>
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-wait.html b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-wait.html
new file mode 100644
index 0000000000..39bc760ff7
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/browsing-the-web/history-traversal/event-order/same-document-traverse-wait.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Popstate/hashchange/load event ordering</title>
+
+<script>
+// Set these up super-early before we hit the network for the test harness, just in case.
+window.eventOrder = [];
+window.onhashchange = () => window.eventOrder.push("hashchange");
+window.onpopstate = () => window.eventOrder.push("popstate");
+window.onload = () => window.eventOrder.push("load");
+</script>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<script>
+async_test(t => {
+ assert_array_equals(window.eventOrder, []);
+
+ // 0 timeout is necessary because if we do location.hash assignment before load is finished firing it counts as a replacement.
+ window.addEventListener("load", () => t.step_timeout(() => {
+ assert_array_equals(window.eventOrder, ["load"]);
+
+ window.addEventListener("hashchange", t.step_func(() => {
+ assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange"]);
+
+ window.addEventListener("hashchange", t.step_func_done(() => {
+ assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange", "popstate", "hashchange"]);
+ }));
+
+ history.back();
+ assert_array_equals(window.eventOrder, ["load", "popstate", "hashchange"]);
+ }), { once: true });
+
+ location.hash = "#1";
+ assert_array_equals(window.eventOrder, ["load", "popstate"]);
+ }, 0));
+}, "when traversing back, after hashchange");
+</script>