summaryrefslogtreecommitdiff
path: root/test/parallel/test-worker-process-cwd.js
blob: dec70ac07c8f118df47024b3aab49c5259292a1c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
'use strict';
const assert = require('assert');
const common = require('../common');
const { Worker, isMainThread, parentPort } = require('worker_threads');

// Do not use isMainThread directly, otherwise the test would time out in case
// it's started inside of another worker thread.
if (!process.env.HAS_STARTED_WORKER) {
  process.env.HAS_STARTED_WORKER = '1';
  if (!isMainThread) {
    common.skip('This test can only run as main thread');
  }
  const w = new Worker(__filename);
  process.chdir('..');
  w.on('message', common.mustCall((message) => {
    assert.strictEqual(message, process.cwd());
    process.chdir('..');
    w.postMessage(process.cwd());
  }));
} else if (!process.env.SECOND_WORKER) {
  process.env.SECOND_WORKER = '1';
  const firstCwd = process.cwd();
  const w = new Worker(__filename);
  w.on('message', common.mustCall((message) => {
    assert.strictEqual(message, process.cwd());
    parentPort.postMessage(firstCwd);
    parentPort.onmessage = common.mustCall((obj) => {
      const secondCwd = process.cwd();
      assert.strictEqual(secondCwd, obj.data);
      assert.notStrictEqual(secondCwd, firstCwd);
      w.postMessage(secondCwd);
      parentPort.unref();
    });
  }));
} else {
  const firstCwd = process.cwd();
  parentPort.postMessage(firstCwd);
  parentPort.onmessage = common.mustCall((obj) => {
    const secondCwd = process.cwd();
    assert.strictEqual(secondCwd, obj.data);
    assert.notStrictEqual(secondCwd, firstCwd);
    process.exit();
  });
}