From 672fc8362553b45cf90f22ccfff16239a00c3594 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Tue, 19 Mar 2024 09:02:55 +0200 Subject: [PATCH] test: add test for using `--print` with promises MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/52137 Reviewed-By: Vinícius Lourenço Claro Cardoso Reviewed-By: Debadree Chatterjee --- test/parallel/test-cli-print-promise.mjs | 93 ++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 test/parallel/test-cli-print-promise.mjs diff --git a/test/parallel/test-cli-print-promise.mjs b/test/parallel/test-cli-print-promise.mjs new file mode 100644 index 00000000000000..3f95630693035e --- /dev/null +++ b/test/parallel/test-cli-print-promise.mjs @@ -0,0 +1,93 @@ +import { spawnPromisified } from '../common/index.mjs'; +import assert from 'node:assert'; +import { execPath } from 'node:process'; +import { describe, it } from 'node:test'; + + +describe('--print with a promise', { concurrency: true }, () => { + it('should handle directly-fulfilled promises', async () => { + const result = await spawnPromisified(execPath, [ + '--print', + 'Promise.resolve(42)', + ]); + + assert.deepStrictEqual(result, { + code: 0, + signal: null, + stderr: '', + stdout: 'Promise { 42 }\n', + }); + }); + + it('should handle promises fulfilled after one tick', async () => { + const result = await spawnPromisified(execPath, [ + '--print', + 'Promise.resolve().then(()=>42)', + ]); + + assert.deepStrictEqual(result, { + code: 0, + signal: null, + stderr: '', + stdout: 'Promise { }\n', + }); + }); + + it('should handle promise that never settles', async () => { + const result = await spawnPromisified(execPath, [ + '--print', + 'new Promise(()=>{})', + ]); + + assert.deepStrictEqual(result, { + code: 0, + signal: null, + stderr: '', + stdout: 'Promise { }\n', + }); + }); + + it('should output something if process exits before promise settles', async () => { + const result = await spawnPromisified(execPath, [ + '--print', + 'setTimeout(process.exit,100, 0);timers.promises.setTimeout(200)', + ]); + + assert.deepStrictEqual(result, { + code: 0, + signal: null, + stderr: '', + stdout: 'Promise { }\n', + }); + }); + + it('should handle rejected promises', async () => { + const result = await spawnPromisified(execPath, [ + '--unhandled-rejections=none', + '--print', + 'Promise.reject(1)', + ]); + + assert.deepStrictEqual(result, { + code: 0, + signal: null, + stderr: '', + stdout: 'Promise { 1 }\n', + }); + }); + + it('should handle promises that reject after one tick', async () => { + const result = await spawnPromisified(execPath, [ + '--unhandled-rejections=none', + '--print', + 'Promise.resolve().then(()=>Promise.reject(1))', + ]); + + assert.deepStrictEqual(result, { + code: 0, + signal: null, + stderr: '', + stdout: 'Promise { }\n', + }); + }); +});