• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// META: global=window,worker
2"use strict";
3
4test(() => {
5  assert_equals(typeof queueMicrotask, "function");
6}, "It exists and is a function");
7
8test(() => {
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
17async_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
25async_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
31async_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");
40