Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRichard Lau <riclau@uk.ibm.com>2016-10-20 22:38:54 +0300
committerItalo A. Casas <me@italoacasas.com>2017-03-13 18:20:07 +0300
commitaaf8536dbca463c8c1dbd56b6ca64f87a66dceb0 (patch)
tree85d336804857deb13b463b7dd205f7c0772b4af7 /test
parentc01c7a490a8ada3455fdcf591c5f2e8effd26273 (diff)
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>
Diffstat (limited to 'test')
-rw-r--r--test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_libraries/foo.js1
-rw-r--r--test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_modules/foo.js1
-rw-r--r--test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_libraries/.node_libraries/foo.js1
-rw-r--r--test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_modules/.node_modules/foo.js1
-rw-r--r--test/fixtures/test-module-loading-globalpaths/local-pkg/node_modules/foo.js1
-rw-r--r--test/fixtures/test-module-loading-globalpaths/local-pkg/test.js2
-rw-r--r--test/fixtures/test-module-loading-globalpaths/node_path/foo.js1
-rw-r--r--test/parallel/test-module-loading-globalpaths.js101
8 files changed, 109 insertions, 0 deletions
diff --git a/test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_libraries/foo.js b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_libraries/foo.js
new file mode 100644
index 00000000000..eb278f95762
--- /dev/null
+++ b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_libraries/foo.js
@@ -0,0 +1 @@
+exports.string = '$HOME/.node_libraries';
diff --git a/test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_modules/foo.js b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_modules/foo.js
new file mode 100644
index 00000000000..8a665b3e98c
--- /dev/null
+++ b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-both/.node_modules/foo.js
@@ -0,0 +1 @@
+exports.string = '$HOME/.node_modules';
diff --git a/test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_libraries/.node_libraries/foo.js b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_libraries/.node_libraries/foo.js
new file mode 100644
index 00000000000..eb278f95762
--- /dev/null
+++ b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_libraries/.node_libraries/foo.js
@@ -0,0 +1 @@
+exports.string = '$HOME/.node_libraries';
diff --git a/test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_modules/.node_modules/foo.js b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_modules/.node_modules/foo.js
new file mode 100644
index 00000000000..8a665b3e98c
--- /dev/null
+++ b/test/fixtures/test-module-loading-globalpaths/home-pkg-in-node_modules/.node_modules/foo.js
@@ -0,0 +1 @@
+exports.string = '$HOME/.node_modules';
diff --git a/test/fixtures/test-module-loading-globalpaths/local-pkg/node_modules/foo.js b/test/fixtures/test-module-loading-globalpaths/local-pkg/node_modules/foo.js
new file mode 100644
index 00000000000..63e844e4d40
--- /dev/null
+++ b/test/fixtures/test-module-loading-globalpaths/local-pkg/node_modules/foo.js
@@ -0,0 +1 @@
+exports.string = 'local';
diff --git a/test/fixtures/test-module-loading-globalpaths/local-pkg/test.js b/test/fixtures/test-module-loading-globalpaths/local-pkg/test.js
new file mode 100644
index 00000000000..8054983e992
--- /dev/null
+++ b/test/fixtures/test-module-loading-globalpaths/local-pkg/test.js
@@ -0,0 +1,2 @@
+'use strict';
+console.log(require('foo').string);
diff --git a/test/fixtures/test-module-loading-globalpaths/node_path/foo.js b/test/fixtures/test-module-loading-globalpaths/node_path/foo.js
new file mode 100644
index 00000000000..3ce43c49206
--- /dev/null
+++ b/test/fixtures/test-module-loading-globalpaths/node_path/foo.js
@@ -0,0 +1 @@
+exports.string = '$NODE_PATH';
diff --git a/test/parallel/test-module-loading-globalpaths.js b/test/parallel/test-module-loading-globalpaths.js
new file mode 100644
index 00000000000..d789f540990
--- /dev/null
+++ b/test/parallel/test-module-loading-globalpaths.js
@@ -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');
+}