mirror of https://github.com/nodejs/node.git
test: add test for loading from global folders
Test executes with a copy of the node executable since $PREFIX/lib/node is relative to the executable location. PR-URL: https://github.com/nodejs/node/pull/9283 Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: João Reis <reis@janeasystems.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
443691a5ae
commit
92e7c93fce
1
test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_libraries/foo.js
vendored
Normal file
1
test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_libraries/foo.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
exports.string = '$HOME/.node_libraries';
|
1
test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_modules/foo.js
generated
vendored
Normal file
1
test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_modules/foo.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
exports.string = '$HOME/.node_modules';
|
|
@ -0,0 +1 @@
|
|||
exports.string = '$HOME/.node_libraries';
|
1
test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_modules/.node_modules/foo.js
generated
vendored
Normal file
1
test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_modules/.node_modules/foo.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
exports.string = '$HOME/.node_modules';
|
1
test/fixtures/test-module-loading-globalpaths/local-pkg/node_modules/foo.js
generated
vendored
Normal file
1
test/fixtures/test-module-loading-globalpaths/local-pkg/node_modules/foo.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
exports.string = 'local';
|
|
@ -0,0 +1,2 @@
|
|||
'use strict';
|
||||
console.log(require('foo').string);
|
|
@ -0,0 +1 @@
|
|||
exports.string = '$NODE_PATH';
|
|
@ -0,0 +1,101 @@
|
|||
'use strict';
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const child_process = require('child_process');
|
||||
const pkgName = 'foo';
|
||||
|
||||
if (process.argv[2] === 'child') {
|
||||
console.log(require(pkgName).string);
|
||||
} else {
|
||||
common.refreshTmpDir();
|
||||
|
||||
// Copy node binary into a test $PREFIX directory.
|
||||
const prefixPath = path.join(common.tmpDir, 'install');
|
||||
fs.mkdirSync(prefixPath);
|
||||
let testExecPath;
|
||||
if (common.isWindows) {
|
||||
testExecPath = path.join(prefixPath, path.basename(process.execPath));
|
||||
} else {
|
||||
const prefixBinPath = path.join(prefixPath, 'bin');
|
||||
fs.mkdirSync(prefixBinPath);
|
||||
testExecPath = path.join(prefixBinPath, path.basename(process.execPath));
|
||||
}
|
||||
const mode = fs.statSync(process.execPath).mode;
|
||||
fs.writeFileSync(testExecPath, fs.readFileSync(process.execPath));
|
||||
fs.chmodSync(testExecPath, mode);
|
||||
|
||||
const runTest = (expectedString, env) => {
|
||||
const child = child_process.execFileSync(testExecPath,
|
||||
[ __filename, 'child' ],
|
||||
{ encoding: 'utf8', env: env });
|
||||
assert.strictEqual(child.trim(), expectedString);
|
||||
};
|
||||
|
||||
const testFixturesDir = path.join(common.fixturesDir,
|
||||
path.basename(__filename, '.js'));
|
||||
|
||||
const env = Object.assign({}, process.env);
|
||||
// Turn on module debug to aid diagnosing failures.
|
||||
env['NODE_DEBUG'] = 'module';
|
||||
// Unset NODE_PATH.
|
||||
delete env['NODE_PATH'];
|
||||
|
||||
// Test empty global path.
|
||||
const noPkgHomeDir = path.join(common.tmpDir, 'home-no-pkg');
|
||||
fs.mkdirSync(noPkgHomeDir);
|
||||
env['HOME'] = env['USERPROFILE'] = noPkgHomeDir;
|
||||
assert.throws(
|
||||
() => {
|
||||
child_process.execFileSync(testExecPath, [ __filename, 'child' ],
|
||||
{ encoding: 'utf8', env: env });
|
||||
},
|
||||
new RegExp('Cannot find module \'' + pkgName + '\''));
|
||||
|
||||
// Test module in $HOME/.node_modules.
|
||||
const modHomeDir = path.join(testFixturesDir, 'home-pkg-in-node_modules');
|
||||
env['HOME'] = env['USERPROFILE'] = modHomeDir;
|
||||
runTest('$HOME/.node_modules', env);
|
||||
|
||||
// Test module in $HOME/.node_libraries.
|
||||
const libHomeDir = path.join(testFixturesDir, 'home-pkg-in-node_libraries');
|
||||
env['HOME'] = env['USERPROFILE'] = libHomeDir;
|
||||
runTest('$HOME/.node_libraries', env);
|
||||
|
||||
// Test module both $HOME/.node_modules and $HOME/.node_libraries.
|
||||
const bothHomeDir = path.join(testFixturesDir, 'home-pkg-in-both');
|
||||
env['HOME'] = env['USERPROFILE'] = bothHomeDir;
|
||||
runTest('$HOME/.node_modules', env);
|
||||
|
||||
// Test module in $PREFIX/lib/node.
|
||||
// Write module into $PREFIX/lib/node.
|
||||
const expectedString = '$PREFIX/lib/node';
|
||||
const prefixLibPath = path.join(prefixPath, 'lib');
|
||||
fs.mkdirSync(prefixLibPath);
|
||||
const prefixLibNodePath = path.join(prefixLibPath, 'node');
|
||||
fs.mkdirSync(prefixLibNodePath);
|
||||
const pkgPath = path.join(prefixLibNodePath, pkgName + '.js');
|
||||
fs.writeFileSync(pkgPath, 'exports.string = \'' + expectedString + '\';');
|
||||
|
||||
env['HOME'] = env['USERPROFILE'] = noPkgHomeDir;
|
||||
runTest(expectedString, env);
|
||||
|
||||
// Test module in all global folders.
|
||||
env['HOME'] = env['USERPROFILE'] = bothHomeDir;
|
||||
runTest('$HOME/.node_modules', env);
|
||||
|
||||
// Test module in NODE_PATH is loaded ahead of global folders.
|
||||
env['HOME'] = env['USERPROFILE'] = bothHomeDir;
|
||||
env['NODE_PATH'] = path.join(testFixturesDir, 'node_path');
|
||||
runTest('$NODE_PATH', env);
|
||||
|
||||
// Test module in local folder is loaded ahead of global folders.
|
||||
const localDir = path.join(testFixturesDir, 'local-pkg');
|
||||
env['HOME'] = env['USERPROFILE'] = bothHomeDir;
|
||||
env['NODE_PATH'] = path.join(testFixturesDir, 'node_path');
|
||||
const child = child_process.execFileSync(testExecPath,
|
||||
[ path.join(localDir, 'test.js') ],
|
||||
{ encoding: 'utf8', env: env });
|
||||
assert.strictEqual(child.trim(), 'local');
|
||||
}
|
Loading…
Reference in New Issue