1'use strict';
2
3const common = require('../../common');
4const tmpdir = require('../../common/tmpdir');
5const child_process = require('child_process');
6const fs = require('fs');
7const path = require('path');
8const url = require('url');
9const filename = require.resolve(`./build/${common.buildType}/test_general`);
10const test_general = require(filename);
11const assert = require('assert');
12
13tmpdir.refresh();
14
15{
16  // TODO(gabrielschulhof): This test may need updating if/when the filename
17  // becomes a full-fledged URL.
18  assert.strictEqual(test_general.filename, url.pathToFileURL(filename).href);
19}
20
21{
22  const urlTestDir = path.join(tmpdir.path, 'foo%#bar');
23  const urlTestFile = path.join(urlTestDir, path.basename(filename));
24  fs.mkdirSync(urlTestDir, { recursive: true });
25  fs.copyFileSync(filename, urlTestFile);
26  // Use a child process as indirection so that the built-in modules is not loaded
27  // into this process and can be removed here.
28  const reportedFilename = child_process.spawnSync(
29    process.execPath,
30    ['-p', `require(${JSON.stringify(urlTestFile)}).filename`],
31    { encoding: 'utf8' }).stdout.trim();
32  assert.doesNotMatch(reportedFilename, /foo%#bar/);
33  assert.strictEqual(reportedFilename, url.pathToFileURL(urlTestFile).href);
34  fs.rmSync(urlTestDir, {
35    force: true,
36    recursive: true,
37    maxRetries: 256,
38  });
39}
40
41{
42  const [ major, minor, patch, release ] = test_general.testGetNodeVersion();
43  assert.strictEqual(process.version.split('-')[0],
44                     `v${major}.${minor}.${patch}`);
45  assert.strictEqual(release, process.release.name);
46}
47