UNPKG

3.41 kBJavaScriptView Raw
1"use strict"
2
3var test = require('tape')
4
5var path = require('path')
6
7var npmWhich = require('../')
8
9var level0 = path.join(__dirname, 'fixtures', 'level0')
10var level1 = path.join(level0, 'node_modules', 'level1')
11var level2 = path.join(level1, 'node_modules', 'level2')
12
13var level = [level0, level1, level2]
14var binPath = level.map(function(levelPath) {
15 return path.join(levelPath, "node_modules", ".bin")
16})
17
18test('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
44test('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
52test('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
62test('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
72test('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
82test('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
94test('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
104if (process.version.indexOf('v0.10') !== -1) {
105 // can't test this on 0.11 as process.platform is (rightfully) read-only
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