1 | "use strict"
|
2 |
|
3 | var test = require('tape')
|
4 |
|
5 | var path = require('path')
|
6 |
|
7 | var npmWhich = require('../')
|
8 |
|
9 | var level0 = path.join(__dirname, 'fixtures', 'level0')
|
10 | var level1 = path.join(level0, 'node_modules', 'level1')
|
11 | var level2 = path.join(level1, 'node_modules', 'level2')
|
12 |
|
13 | var level = [level0, level1, level2]
|
14 | var binPath = level.map(function(levelPath) {
|
15 | return path.join(levelPath, "node_modules", ".bin")
|
16 | })
|
17 |
|
18 | test('includes all .bin dirs in all parent node_modules folders', function(t) {
|
19 | t.test('no nesting', function(t) {
|
20 | var level1Bin = npmWhich.sync('level1', {cwd: level[0]})
|
21 | t.equal(level1Bin, path.join(binPath[0], 'level1'))
|
22 | t.end()
|
23 | })
|
24 |
|
25 | t.test('nesting', function(t) {
|
26 | var level1Bin = npmWhich.sync('level1', {cwd: level[1]})
|
27 | t.equal(level1Bin, path.join(binPath[0], 'level1'))
|
28 | var level2Bin = npmWhich.sync('level2', {cwd: level[1]})
|
29 | t.equal(level2Bin, path.join(binPath[1], 'level2'))
|
30 | t.end()
|
31 | })
|
32 |
|
33 | t.test('more nesting', function(t) {
|
34 | var level1Bin = npmWhich.sync('level1', {cwd: level[2]})
|
35 | t.equal(level1Bin, path.join(binPath[0], 'level1'))
|
36 | var level2Bin = npmWhich.sync('level2', {cwd: level[2]})
|
37 | t.equal(level2Bin, path.join(binPath[1], 'level2'))
|
38 | t.end()
|
39 | })
|
40 |
|
41 | t.end()
|
42 | })
|
43 |
|
44 | test('which.sync does not mutate PATH', function(t) {
|
45 | var before = process.env.PATH
|
46 | var level1Bin = npmWhich.sync('level1', {cwd: __dirname, env: {PATH: binPath[0]}})
|
47 | var after = process.env.PATH
|
48 | t.deepEqual(before, after)
|
49 | t.end()
|
50 | })
|
51 |
|
52 | test('which.sync does not mutate PATH after failed find', function(t) {
|
53 | var before = process.env.PATH
|
54 | t.throws(function() {
|
55 | var level1Bin = npmWhich.sync('asdasd', {cwd: __dirname, env: {PATH: binPath[0]}})
|
56 | })
|
57 | var after = process.env.PATH
|
58 | t.deepEqual(before, after)
|
59 | t.end()
|
60 | })
|
61 |
|
62 | test('which does not mutate PATH', function(t) {
|
63 | var before = process.env.PATH
|
64 | npmWhich('level1', {cwd: __dirname, env: {PATH: binPath[0]}}, function(err) {
|
65 | t.ifError(err)
|
66 | var after = process.env.PATH
|
67 | t.deepEqual(before, after)
|
68 | t.end()
|
69 | })
|
70 | })
|
71 |
|
72 | test('which does not mutate PATH after failed find', function(t) {
|
73 | var before = process.env.PATH
|
74 | npmWhich('asdasd', {cwd: 'asdasdb/jhbhj'}, function(err) {
|
75 | t.ok(err)
|
76 | var after = process.env.PATH
|
77 | t.deepEqual(before, after)
|
78 | t.end()
|
79 | })
|
80 | })
|
81 |
|
82 | test('can find path with bad cwd', function(t) {
|
83 | var before = process.env.PATH
|
84 | npmWhich('node', {cwd: '/asdasdb/jhbhj'}, function(err, path) {
|
85 | t.ifError(err)
|
86 | t.ok(path)
|
87 | t.equal(path.split('/').pop(), 'node')
|
88 | var after = process.env.PATH
|
89 | t.deepEqual(before, after)
|
90 | t.end()
|
91 | })
|
92 | })
|
93 |
|
94 | test('which does not mutate PATH with bad cmd & cwd', function(t) {
|
95 | var before = process.env.PATH
|
96 | npmWhich('asdasd', {cwd: 'asdasdb/jhbhj'}, function(err) {
|
97 | t.ok(err)
|
98 | var after = process.env.PATH
|
99 | t.deepEqual(before, after)
|
100 | t.end()
|
101 | })
|
102 | })
|
103 |
|
104 | if (process.version.indexOf('v0.10') !== -1) {
|
105 |
|
106 | test('which does not mutate PATH with bad cwd/cmd on "windows"', function(t) {
|
107 | var actualPlatform = process.platform
|
108 | process.platform = "win32"
|
109 | var before = process.env.PATH
|
110 | npmWhich('asdasd', {cwd: 'asdasdb/jhbhj'}, function(err) {
|
111 | process.platform = actualPlatform
|
112 | t.ok(err)
|
113 | var after = process.env.PATH
|
114 | t.deepEqual(before, after)
|
115 | t.end()
|
116 | })
|
117 | })
|
118 | }
|
119 |
|