1'use strict'; 2 3const common = require('../common'); 4const assert = require('assert'); 5 6assert.strictEqual(typeof queueMicrotask, 'function'); 7 8[ 9 undefined, 10 null, 11 0, 12 'x = 5', 13].forEach((t) => { 14 assert.throws(common.mustCall(() => { 15 queueMicrotask(t); 16 }), { 17 code: 'ERR_INVALID_ARG_TYPE', 18 }); 19}); 20 21{ 22 let called = false; 23 queueMicrotask(common.mustCall(() => { 24 called = true; 25 })); 26 assert.strictEqual(called, false); 27} 28 29queueMicrotask(common.mustCall(function() { 30 assert.strictEqual(arguments.length, 0); 31}), 'x', 'y'); 32 33{ 34 const q = []; 35 Promise.resolve().then(() => q.push('a')); 36 queueMicrotask(common.mustCall(() => q.push('b'))); 37 Promise.reject().catch(() => q.push('c')); 38 39 queueMicrotask(common.mustCall(() => { 40 assert.deepStrictEqual(q, ['a', 'b', 'c']); 41 })); 42} 43 44const eq = []; 45process.on('uncaughtException', (e) => { 46 eq.push(e); 47}); 48 49process.on('exit', () => { 50 assert.strictEqual(eq.length, 2); 51 assert.strictEqual(eq[0].message, 'E1'); 52 assert.strictEqual( 53 eq[1].message, 'Class constructor cannot be invoked without \'new\''); 54}); 55 56queueMicrotask(common.mustCall(() => { 57 throw new Error('E1'); 58})); 59 60queueMicrotask(class {}); 61