1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const { Worker, parentPort, SHARE_ENV, workerData } = require('worker_threads');
5
6if (!workerData) {
7  process.env.SET_IN_PARENT = 'set';
8  assert.strictEqual(process.env.SET_IN_PARENT, 'set');
9
10  const w = new Worker(__filename, {
11    workerData: 'runInWorker',
12    env: SHARE_ENV
13  }).on('exit', common.mustCall(() => {
14    // Env vars from the child thread are not set globally.
15    assert.strictEqual(process.env.SET_IN_WORKER, 'set');
16  }));
17
18  process.env.SET_IN_PARENT_AFTER_CREATION = 'set';
19  w.postMessage({});
20} else {
21  assert.strictEqual(workerData, 'runInWorker');
22
23  // Env vars from the parent thread are inherited.
24  assert.strictEqual(process.env.SET_IN_PARENT, 'set');
25
26  process.env.SET_IN_WORKER = 'set';
27  assert.strictEqual(process.env.SET_IN_WORKER, 'set');
28
29  parentPort.once('message', common.mustCall(() => {
30    assert.strictEqual(process.env.SET_IN_PARENT_AFTER_CREATION, 'set');
31  }));
32}
33