summaryrefslogtreecommitdiff
path: root/test/parallel/test-module-nodemodulepaths.js
diff options
context:
space:
mode:
authorhefangshi <hefangshi@gmail.com>2016-05-10 16:16:49 +0800
committerEvan Lucas <evanlucas@me.com>2016-08-09 05:46:40 -0500
commit55852e14212f81b3849508e7e8862b3077316a99 (patch)
tree2526a983c4ca4d9236575ed2e7b3c8750f2d88cb /test/parallel/test-module-nodemodulepaths.js
parent5111e789e62174a72cdbe6963ed5c6e9210a7049 (diff)
downloadandroid-node-v8-55852e14212f81b3849508e7e8862b3077316a99.tar.gz
android-node-v8-55852e14212f81b3849508e7e8862b3077316a99.tar.bz2
android-node-v8-55852e14212f81b3849508e7e8862b3077316a99.zip
module: fix node_modules search path in edge case
The `p < nmLen` condition will fail when a module's name is end with `node_modules` like `foo_node_modules`. The old logic will miss the `foo_node_modules/node_modules` in node_modules paths. TL;TR, a module named like `foo_node_modules` can't require any module in the node_modules folder. Fixes: https://github.com/nodejs/node/issues/6679 PR-URL: https://github.com/nodejs/node/pull/6670 Reviewed-By: Evan Lucas <evanlucas@me.com>
Diffstat (limited to 'test/parallel/test-module-nodemodulepaths.js')
-rw-r--r--test/parallel/test-module-nodemodulepaths.js117
1 files changed, 101 insertions, 16 deletions
diff --git a/test/parallel/test-module-nodemodulepaths.js b/test/parallel/test-module-nodemodulepaths.js
index 0c70de9f28..02ea79b49e 100644
--- a/test/parallel/test-module-nodemodulepaths.js
+++ b/test/parallel/test-module-nodemodulepaths.js
@@ -1,20 +1,105 @@
'use strict';
-var common = require('../common');
-var assert = require('assert');
-var module = require('module');
+const common = require('../common');
+const assert = require('assert');
+const _module = require('module');
-var file, delimiter, paths;
+const cases = {
+ 'WIN': [{
+ file: 'C:\\Users\\hefangshi\\AppData\\Roaming\
+\\npm\\node_modules\\npm\\node_modules\\minimatch',
+ expect: [
+ 'C:\\Users\\hefangshi\\AppData\\Roaming\
+\\npm\\node_modules\\npm\\node_modules\\minimatch\\node_modules',
+ 'C:\\Users\\hefangshi\\AppData\\Roaming\
+\\npm\\node_modules\\npm\\node_modules',
+ 'C:\\Users\\hefangshi\\AppData\\Roaming\\npm\\node_modules',
+ 'C:\\Users\\hefangshi\\AppData\\Roaming\\node_modules',
+ 'C:\\Users\\hefangshi\\AppData\\node_modules',
+ 'C:\\Users\\hefangshi\\node_modules',
+ 'C:\\Users\\node_modules',
+ 'C:\\node_modules'
+ ]
+ }, {
+ file: 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo',
+ expect: [
+ 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo\\node_modules',
+ 'C:\\Users\\Rocko Artischocko\\node_stuff\\node_modules',
+ 'C:\\Users\\Rocko Artischocko\\node_modules',
+ 'C:\\Users\\node_modules',
+ 'C:\\node_modules'
+ ]
+ }, {
+ file: 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo_node_modules',
+ expect: [
+ 'C:\\Users\\Rocko \
+Artischocko\\node_stuff\\foo_node_modules\\node_modules',
+ 'C:\\Users\\Rocko Artischocko\\node_stuff\\node_modules',
+ 'C:\\Users\\Rocko Artischocko\\node_modules',
+ 'C:\\Users\\node_modules',
+ 'C:\\node_modules'
+ ]
+ }, {
+ file: 'C:\\node_modules',
+ expect: [
+ 'C:\\node_modules'
+ ]
+ }, {
+ file: 'C:\\',
+ expect: [
+ 'C:\\node_modules'
+ ]
+ }],
+ 'POSIX': [{
+ file: '/usr/lib/node_modules/npm/node_modules/\
+node-gyp/node_modules/glob/node_modules/minimatch',
+ expect: [
+ '/usr/lib/node_modules/npm/node_modules/\
+node-gyp/node_modules/glob/node_modules/minimatch/node_modules',
+ '/usr/lib/node_modules/npm/node_modules/\
+node-gyp/node_modules/glob/node_modules',
+ '/usr/lib/node_modules/npm/node_modules/node-gyp/node_modules',
+ '/usr/lib/node_modules/npm/node_modules',
+ '/usr/lib/node_modules',
+ '/usr/node_modules',
+ '/node_modules'
+ ]
+ }, {
+ file: '/usr/test/lib/node_modules/npm/foo',
+ expect: [
+ '/usr/test/lib/node_modules/npm/foo/node_modules',
+ '/usr/test/lib/node_modules/npm/node_modules',
+ '/usr/test/lib/node_modules',
+ '/usr/test/node_modules',
+ '/usr/node_modules',
+ '/node_modules'
+ ]
+ }, {
+ file: '/usr/test/lib/node_modules/npm/foo_node_modules',
+ expect: [
+ '/usr/test/lib/node_modules/npm/foo_node_modules/node_modules',
+ '/usr/test/lib/node_modules/npm/node_modules',
+ '/usr/test/lib/node_modules',
+ '/usr/test/node_modules',
+ '/usr/node_modules',
+ '/node_modules'
+ ]
+ }, {
+ file: '/node_modules',
+ expect: [
+ '/node_modules'
+ ]
+ }, {
+ file: '/',
+ expect: [
+ '/node_modules'
+ ]
+ }]
+};
-if (common.isWindows) {
- file = 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo';
- delimiter = '\\';
-} else {
- file = '/usr/test/lib/node_modules/npm/foo';
- delimiter = '/';
-}
-
-paths = module._nodeModulePaths(file);
-
-assert.ok(paths.indexOf(file + delimiter + 'node_modules') !== -1);
-assert.ok(Array.isArray(paths));
+const platformCases = common.isWindows ? cases.WIN : cases.POSIX;
+platformCases.forEach((c) => {
+ const paths = _module._nodeModulePaths(c.file);
+ assert.deepStrictEqual(c.expect, paths, 'case ' + c.file +
+ ' failed, actual paths is ' + JSON.stringify(paths));
+});