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('does not mutate PATH', function(t) {
|
45 | var before = process.env.PATH
|
46 | var level1Bin = npmWhich.sync('level1', {env: {PATH: binPath[0]}})
|
47 | var after = process.env.PATH
|
48 | t.deepEqual(before, after)
|
49 | t.end()
|
50 | })
|
51 |
|
52 | test('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', {env: {PATH: binPath[0]}})
|
56 | })
|
57 | var after = process.env.PATH
|
58 | t.deepEqual(before, after)
|
59 | t.end()
|
60 | })
|