| 'use strict'; |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| |
| assert.strictEqual(typeof queueMicrotask, 'function'); |
| |
| [ |
| undefined, |
| null, |
| 0, |
| 'x = 5', |
| ].forEach((t) => { |
| assert.throws(common.mustCall(() => { |
| queueMicrotask(t); |
| }), { |
| code: 'ERR_INVALID_ARG_TYPE', |
| }); |
| }); |
| |
| { |
| let called = false; |
| queueMicrotask(common.mustCall(() => { |
| called = true; |
| })); |
| assert.strictEqual(called, false); |
| } |
| |
| queueMicrotask(common.mustCall(function() { |
| assert.strictEqual(arguments.length, 0); |
| }), 'x', 'y'); |
| |
| { |
| const q = []; |
| Promise.resolve().then(() => q.push('a')); |
| queueMicrotask(common.mustCall(() => q.push('b'))); |
| Promise.reject().catch(() => q.push('c')); |
| |
| queueMicrotask(common.mustCall(() => { |
| assert.deepStrictEqual(q, ['a', 'b', 'c']); |
| })); |
| } |
| |
| const eq = []; |
| process.on('uncaughtException', (e) => { |
| eq.push(e); |
| }); |
| |
| process.on('exit', () => { |
| assert.strictEqual(eq.length, 2); |
| assert.strictEqual(eq[0].message, 'E1'); |
| assert.strictEqual( |
| eq[1].message, 'Class constructor cannot be invoked without \'new\''); |
| }); |
| |
| queueMicrotask(common.mustCall(() => { |
| throw new Error('E1'); |
| })); |
| |
| queueMicrotask(class {}); |