| 'use strict'; |
| require('../common'); |
| const assert = require('assert'); |
| const { spawnSync } = require('child_process'); |
| const { Worker } = require('worker_threads'); |
| |
| // Test that 'exit' events for Workers are not received when the main thread |
| // terminates itself through process.exit(). |
| |
| if (process.argv[2] !== 'child') { |
| const { |
| stdout, stderr, status |
| } = spawnSync(process.execPath, [__filename, 'child'], { encoding: 'utf8' }); |
| assert.strictEqual(stderr, ''); |
| assert.strictEqual(stdout, ''); |
| assert.strictEqual(status, 0); |
| } else { |
| const nestedWorker = new Worker('setInterval(() => {}, 100)', { eval: true }); |
| // This console.log() should never fire. |
| nestedWorker.on('exit', () => console.log('exit event received')); |
| nestedWorker.on('online', () => process.exit()); |
| } |