Index: third_party/WebKit/LayoutTests/imported/wpt/html/webappapis/scripting/event-loops/microtask_after_script.html |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/webappapis/scripting/event-loops/microtask_after_script.html b/third_party/WebKit/LayoutTests/imported/wpt/html/webappapis/scripting/event-loops/microtask_after_script.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..799a0de605fb7ad99aa19da3bdc5195f40ce2bf1 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/webappapis/scripting/event-loops/microtask_after_script.html |
@@ -0,0 +1,55 @@ |
+<!DOCTYPE html> |
+<head> |
+<link rel=author title="Aleks Totic" href="mailto:atotic@chromium.org"> |
+<link rel=help href="https://html.spec.whatwg.org/#clean-up-after-running-script"> |
+<script src="/resources/testharness.js"></script> |
+<script src="/resources/testharnessreport.js"></script> |
+<script src="resources/common.js"></script> |
+</head> |
+<body style="height:2000px;"> |
+<script> |
+/* |
+promise 1, promise 2 execute immediately after script tag |
+promise 1 child executes immediately after promise 2. |
+ |
+Relevant specs: |
+ |
+https://html.spec.whatwg.org/#clean-up-after-running-script |
+If the JavaScript execution context stack is now empty, perform a microtask checkpoint. |
+ |
+https://html.spec.whatwg.org/#perform-a-microtask-checkpoint |
+"perform a microtask checkpoint" runs in a loop until all microtasks have been delivered. |
+*/ |
+ |
+var test = async_test("Microtask immediately after script"); |
+ |
+var events = []; |
+ |
+Promise.resolve() |
+.then(function() { |
+ events.push("promise 1"); |
+ return Promise.resolve(); |
+}) |
+.then(function() { |
+ test.step(function() { |
+ events.push("promise 1 child"); |
+ assert_array_equals(events, ["promise 1", "promise 2", "promise 1 child"]); |
+ test.done(); |
+ }); |
+}); |
+Promise.resolve() |
+.then(function() { |
+ events.push("promise 2"); |
+}); |
+ |
+// Set up events that must be executed after Promise. |
+window.setTimeout(function() { |
+ events.push('timeout'); |
+}, 0); |
+window.addEventListener('scroll', function() { |
+ events.push('scroll'); |
+}); |
+window.scrollBy(0,10); |
+ |
+</script> |
+</body> |