module: fix node_modules search path in edge case · nodejs/node@55852e1

11

'use strict';

2-

var common = require('../common');

3-

var assert = require('assert');

425-

var module = require('module');

3+

const common = require('../common');

4+

const assert = require('assert');

5+

const _module = require('module');

667-

var file, delimiter, paths;

7+

const cases = {

8+

'WIN': [{

9+

file: 'C:\\Users\\hefangshi\\AppData\\Roaming\

10+

\\npm\\node_modules\\npm\\node_modules\\minimatch',

11+

expect: [

12+

'C:\\Users\\hefangshi\\AppData\\Roaming\

13+

\\npm\\node_modules\\npm\\node_modules\\minimatch\\node_modules',

14+

'C:\\Users\\hefangshi\\AppData\\Roaming\

15+

\\npm\\node_modules\\npm\\node_modules',

16+

'C:\\Users\\hefangshi\\AppData\\Roaming\\npm\\node_modules',

17+

'C:\\Users\\hefangshi\\AppData\\Roaming\\node_modules',

18+

'C:\\Users\\hefangshi\\AppData\\node_modules',

19+

'C:\\Users\\hefangshi\\node_modules',

20+

'C:\\Users\\node_modules',

21+

'C:\\node_modules'

22+

]

23+

}, {

24+

file: 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo',

25+

expect: [

26+

'C:\\Users\\Rocko Artischocko\\node_stuff\\foo\\node_modules',

27+

'C:\\Users\\Rocko Artischocko\\node_stuff\\node_modules',

28+

'C:\\Users\\Rocko Artischocko\\node_modules',

29+

'C:\\Users\\node_modules',

30+

'C:\\node_modules'

31+

]

32+

}, {

33+

file: 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo_node_modules',

34+

expect: [

35+

'C:\\Users\\Rocko \

36+

Artischocko\\node_stuff\\foo_node_modules\\node_modules',

37+

'C:\\Users\\Rocko Artischocko\\node_stuff\\node_modules',

38+

'C:\\Users\\Rocko Artischocko\\node_modules',

39+

'C:\\Users\\node_modules',

40+

'C:\\node_modules'

41+

]

42+

}, {

43+

file: 'C:\\node_modules',

44+

expect: [

45+

'C:\\node_modules'

46+

]

47+

}, {

48+

file: 'C:\\',

49+

expect: [

50+

'C:\\node_modules'

51+

]

52+

}],

53+

'POSIX': [{

54+

file: '/usr/lib/node_modules/npm/node_modules/\

55+

node-gyp/node_modules/glob/node_modules/minimatch',

56+

expect: [

57+

'/usr/lib/node_modules/npm/node_modules/\

58+

node-gyp/node_modules/glob/node_modules/minimatch/node_modules',

59+

'/usr/lib/node_modules/npm/node_modules/\

60+

node-gyp/node_modules/glob/node_modules',

61+

'/usr/lib/node_modules/npm/node_modules/node-gyp/node_modules',

62+

'/usr/lib/node_modules/npm/node_modules',

63+

'/usr/lib/node_modules',

64+

'/usr/node_modules',

65+

'/node_modules'

66+

]

67+

}, {

68+

file: '/usr/test/lib/node_modules/npm/foo',

69+

expect: [

70+

'/usr/test/lib/node_modules/npm/foo/node_modules',

71+

'/usr/test/lib/node_modules/npm/node_modules',

72+

'/usr/test/lib/node_modules',

73+

'/usr/test/node_modules',

74+

'/usr/node_modules',

75+

'/node_modules'

76+

]

77+

}, {

78+

file: '/usr/test/lib/node_modules/npm/foo_node_modules',

79+

expect: [

80+

'/usr/test/lib/node_modules/npm/foo_node_modules/node_modules',

81+

'/usr/test/lib/node_modules/npm/node_modules',

82+

'/usr/test/lib/node_modules',

83+

'/usr/test/node_modules',

84+

'/usr/node_modules',

85+

'/node_modules'

86+

]

87+

}, {

88+

file: '/node_modules',

89+

expect: [

90+

'/node_modules'

91+

]

92+

}, {

93+

file: '/',

94+

expect: [

95+

'/node_modules'

96+

]

97+

}]

98+

};

8999-

if (common.isWindows) {

10-

file = 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo';

11-

delimiter = '\\';

12-

} else {

13-

file = '/usr/test/lib/node_modules/npm/foo';

14-

delimiter = '/';

15-

}

16-17-

paths = module._nodeModulePaths(file);

18-19-

assert.ok(paths.indexOf(file + delimiter + 'node_modules') !== -1);

20-

assert.ok(Array.isArray(paths));

100+

const platformCases = common.isWindows ? cases.WIN : cases.POSIX;

101+

platformCases.forEach((c) => {

102+

const paths = _module._nodeModulePaths(c.file);

103+

assert.deepStrictEqual(c.expect, paths, 'case ' + c.file +

104+

' failed, actual paths is ' + JSON.stringify(paths));

105+

});