import '../common/index.mjs'; import { spawnSyncAndAssert } from '../common/child_process.js'; import fixtures from '../common/fixtures.js'; import { it } from 'node:test'; import assert from 'assert'; const files = [ 'close.mjs', 'before-exit.mjs', 'gc-not-close.mjs', 'unregister.mjs', 'different-registry-per-thread.mjs', ]; for (const file of files) { it(`should exit file ${file} with code=0`, () => { spawnSyncAndAssert(process.execPath, ['--expose-gc', `${file}`], { cwd: fixtures.path('process'), }, { code: 0, }); }); } it('register is different per thread', () => { spawnSyncAndAssert(process.execPath, ['--expose-gc', 'different-registry-per-thread.mjs'], { cwd: fixtures.path('process'), }, { code: 0, stdout: 'shutdown on worker\nshutdown on main thread\n', }); }); it('should throw when register undefined value', () => { try { process.finalization.register(undefined); assert.fail('Expected an error to be thrown for registerFreeOnExit'); } catch (e) { assert.ok(e.message.includes('must be of type object'), `Expected error message to include 'Invalid' but got: ${e.message}`); } try { process.finalization.registerBeforeExit(undefined); assert.fail('Expected an error to be thrown for registerFreeOnBeforeExit'); } catch (e) { assert.ok(e.message.includes('must be of type object'), `Expected error message to include 'Invalid' but got: ${e.message}`); } });