diff --git a/test/parallel/test-experimental-shared-value-conveyor.js b/test/parallel/test-experimental-shared-value-conveyor.js index e61c5efebd0eeb..17eb32c66b1103 100644 --- a/test/parallel/test-experimental-shared-value-conveyor.js +++ b/test/parallel/test-experimental-shared-value-conveyor.js @@ -1,25 +1,38 @@ 'use strict'; - -// Flags: --harmony-struct - const common = require('../common'); const assert = require('assert'); +const { spawnSync } = require('child_process'); const { Worker, parentPort } = require('worker_threads'); -// Do not use isMainThread so that this test itself can be run inside a Worker. -if (!process.env.HAS_STARTED_WORKER) { - process.env.HAS_STARTED_WORKER = 1; - const m = new globalThis.SharedArray(16); +if (process.env.TEST_CHILD_PROCESS === '1') { + // Do not use isMainThread so that this test itself can be run inside a Worker. + if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + const m = new globalThis.SharedArray(16); - const worker = new Worker(__filename); - worker.once('message', common.mustCall((message) => { - assert.strictEqual(message, m); - })); + const worker = new Worker(__filename); + worker.once('message', common.mustCall((message) => { + assert.strictEqual(message, m); + })); - worker.postMessage(m); + worker.postMessage(m); + } else { + parentPort.once('message', common.mustCall((message) => { + // Simple echo. + parentPort.postMessage(message); + })); + } } else { - parentPort.once('message', common.mustCall((message) => { - // Simple echo. - parentPort.postMessage(message); - })); + if (process.config.variables.v8_enable_pointer_compression === 1) { + common.skip('--harmony-struct cannot be used with pointer compression'); + } + + const args = ['--harmony-struct', __filename]; + const options = { env: { TEST_CHILD_PROCESS: '1', ...process.env } }; + const child = spawnSync(process.execPath, args, options); + + assert.strictEqual(child.stderr.toString().trim(), ''); + assert.strictEqual(child.stdout.toString().trim(), ''); + assert.strictEqual(child.status, 0); + assert.strictEqual(child.signal, null); }