|
1 | 1 | 'use strict';
|
2 |
| - |
3 |
| -// Flags: --harmony-struct |
4 |
| - |
5 | 2 | const common = require('../common');
|
6 | 3 | const assert = require('assert');
|
| 4 | +const { spawnSync } = require('child_process'); |
7 | 5 | const { Worker, parentPort } = require('worker_threads');
|
8 | 6 |
|
9 |
| -// Do not use isMainThread so that this test itself can be run inside a Worker. |
10 |
| -if (!process.env.HAS_STARTED_WORKER) { |
11 |
| - process.env.HAS_STARTED_WORKER = 1; |
12 |
| - const m = new globalThis.SharedArray(16); |
| 7 | +if (process.env.TEST_CHILD_PROCESS === '1') { |
| 8 | + // Do not use isMainThread so that this test itself can be run inside a Worker. |
| 9 | + if (!process.env.HAS_STARTED_WORKER) { |
| 10 | + process.env.HAS_STARTED_WORKER = 1; |
| 11 | + const m = new globalThis.SharedArray(16); |
13 | 12 |
|
14 |
| - const worker = new Worker(__filename); |
15 |
| - worker.once('message', common.mustCall((message) => { |
16 |
| - assert.strictEqual(message, m); |
17 |
| - })); |
| 13 | + const worker = new Worker(__filename); |
| 14 | + worker.once('message', common.mustCall((message) => { |
| 15 | + assert.strictEqual(message, m); |
| 16 | + })); |
18 | 17 |
|
19 |
| - worker.postMessage(m); |
| 18 | + worker.postMessage(m); |
| 19 | + } else { |
| 20 | + parentPort.once('message', common.mustCall((message) => { |
| 21 | + // Simple echo. |
| 22 | + parentPort.postMessage(message); |
| 23 | + })); |
| 24 | + } |
20 | 25 | } else {
|
21 |
| - parentPort.once('message', common.mustCall((message) => { |
22 |
| - // Simple echo. |
23 |
| - parentPort.postMessage(message); |
24 |
| - })); |
| 26 | + if (process.config.variables.v8_enable_pointer_compression === 1) { |
| 27 | + common.skip('--harmony-struct cannot be used with pointer compression'); |
| 28 | + } |
| 29 | + |
| 30 | + const args = ['--harmony-struct', __filename]; |
| 31 | + const options = { env: { TEST_CHILD_PROCESS: '1', ...process.env } }; |
| 32 | + const child = spawnSync(process.execPath, args, options); |
| 33 | + |
| 34 | + assert.strictEqual(child.stderr.toString().trim(), ''); |
| 35 | + assert.strictEqual(child.stdout.toString().trim(), ''); |
| 36 | + assert.strictEqual(child.status, 0); |
| 37 | + assert.strictEqual(child.signal, null); |
25 | 38 | }
|
0 commit comments