1'use strict';
2// Flags: --expose-internals
3
4require('../common');
5const {
6  Worker,
7  getEnvironmentData,
8  setEnvironmentData,
9  threadId,
10} = require('worker_threads');
11
12const { assignEnvironmentData } = require('internal/worker');
13
14const {
15  deepStrictEqual,
16  strictEqual,
17} = require('assert');
18
19if (!process.env.HAS_STARTED_WORKER) {
20  process.env.HAS_STARTED_WORKER = 1;
21  setEnvironmentData('foo', 'bar');
22  setEnvironmentData('hello', { value: 'world' });
23  setEnvironmentData(1, 2);
24  strictEqual(getEnvironmentData(1), 2);
25  setEnvironmentData(1); // Delete it, key won't show up in the worker.
26  new Worker(__filename);
27  setEnvironmentData('hello');  // Delete it. Has no impact on the worker.
28} else {
29  strictEqual(getEnvironmentData('foo'), 'bar');
30  deepStrictEqual(getEnvironmentData('hello'), { value: 'world' });
31  strictEqual(getEnvironmentData(1), undefined);
32  assignEnvironmentData(undefined); // It won't setup any key.
33  strictEqual(getEnvironmentData(undefined), undefined);
34
35  // Recurse to make sure the environment data is inherited
36  if (threadId <= 2)
37    new Worker(__filename);
38}
39