queue-microtask.any.js (1394B)
1 // META: global=window,worker 2 "use strict"; 3 4 test(() => { 5 assert_equals(typeof queueMicrotask, "function"); 6 }, "It exists and is a function"); 7 8 test(() => { 9 assert_throws_js(TypeError, () => queueMicrotask(), "no argument"); 10 assert_throws_js(TypeError, () => queueMicrotask(undefined), "undefined"); 11 assert_throws_js(TypeError, () => queueMicrotask(null), "null"); 12 assert_throws_js(TypeError, () => queueMicrotask(0), "0"); 13 assert_throws_js(TypeError, () => queueMicrotask({ handleEvent() { } }), "an event handler object"); 14 assert_throws_js(TypeError, () => queueMicrotask("window.x = 5;"), "a string"); 15 }, "It throws when given non-functions"); 16 17 async_test(t => { 18 let called = false; 19 queueMicrotask(t.step_func_done(() => { 20 called = true; 21 })); 22 assert_false(called); 23 }, "It calls the callback asynchronously"); 24 25 async_test(t => { 26 queueMicrotask(t.step_func_done(function () { // note: intentionally not an arrow function 27 assert_array_equals(arguments, []); 28 }), "x", "y"); 29 }, "It does not pass any arguments"); 30 31 async_test(t => { 32 const happenings = []; 33 Promise.resolve().then(() => happenings.push("a")); 34 queueMicrotask(() => happenings.push("b")); 35 Promise.reject().catch(() => happenings.push("c")); 36 queueMicrotask(t.step_func_done(() => { 37 assert_array_equals(happenings, ["a", "b", "c"]); 38 })); 39 }, "It interleaves with promises as expected");