You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							119 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							119 lines
						
					
					
						
							3.3 KiB
						
					
					
				"use strict" | 
						|
 | 
						|
var test = require('tape') | 
						|
 | 
						|
var path = require('path') | 
						|
 | 
						|
var npmWhich = require('../') | 
						|
 | 
						|
var level0 = path.join(__dirname, 'fixtures', 'level0') | 
						|
var level1 = path.join(level0, 'node_modules', 'level1') | 
						|
var level2 = path.join(level1, 'node_modules', 'level2') | 
						|
 | 
						|
var level = [level0, level1, level2] | 
						|
var binPath = level.map(function(levelPath) { | 
						|
  return path.join(levelPath, "node_modules", ".bin") | 
						|
}) | 
						|
 | 
						|
test('includes all .bin dirs in all parent node_modules folders', function(t) { | 
						|
  t.test('no nesting', function(t) { | 
						|
    var level1Bin = npmWhich.sync('level1', {cwd: level[0]}) | 
						|
    t.equal(level1Bin, path.join(binPath[0], 'level1')) | 
						|
    t.end() | 
						|
  }) | 
						|
 | 
						|
  t.test('nesting', function(t) { | 
						|
    var level1Bin = npmWhich.sync('level1', {cwd: level[1]}) | 
						|
    t.equal(level1Bin, path.join(binPath[0], 'level1')) | 
						|
    var level2Bin = npmWhich.sync('level2', {cwd: level[1]}) | 
						|
    t.equal(level2Bin, path.join(binPath[1], 'level2')) | 
						|
    t.end() | 
						|
  }) | 
						|
 | 
						|
  t.test('more nesting', function(t) { | 
						|
    var level1Bin = npmWhich.sync('level1', {cwd: level[2]}) | 
						|
    t.equal(level1Bin, path.join(binPath[0], 'level1')) | 
						|
    var level2Bin = npmWhich.sync('level2', {cwd: level[2]}) | 
						|
    t.equal(level2Bin, path.join(binPath[1], 'level2')) | 
						|
    t.end() | 
						|
  }) | 
						|
 | 
						|
  t.end() | 
						|
}) | 
						|
 | 
						|
test('which.sync does not mutate PATH', function(t) { | 
						|
  var before = process.env.PATH | 
						|
  var level1Bin = npmWhich.sync('level1', {cwd: __dirname, env: {PATH: binPath[0]}}) | 
						|
  var after = process.env.PATH | 
						|
  t.deepEqual(before, after) | 
						|
  t.end() | 
						|
}) | 
						|
 | 
						|
test('which.sync does not mutate PATH after failed find', function(t) { | 
						|
  var before = process.env.PATH | 
						|
  t.throws(function() { | 
						|
    var level1Bin = npmWhich.sync('asdasd', {cwd: __dirname, env: {PATH: binPath[0]}}) | 
						|
  }) | 
						|
  var after = process.env.PATH | 
						|
  t.deepEqual(before, after) | 
						|
  t.end() | 
						|
}) | 
						|
 | 
						|
test('which does not mutate PATH', function(t) { | 
						|
  var before = process.env.PATH | 
						|
  npmWhich('level1', {cwd: __dirname, env: {PATH: binPath[0]}}, function(err) { | 
						|
    t.ifError(err) | 
						|
    var after = process.env.PATH | 
						|
    t.deepEqual(before, after) | 
						|
    t.end() | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
test('which does not mutate PATH after failed find', function(t) { | 
						|
  var before = process.env.PATH | 
						|
  npmWhich('asdasd', {cwd: 'asdasdb/jhbhj'}, function(err) { | 
						|
    t.ok(err) | 
						|
    var after = process.env.PATH | 
						|
    t.deepEqual(before, after) | 
						|
    t.end() | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
test('can find path with bad cwd', function(t) { | 
						|
  var before = process.env.PATH | 
						|
  npmWhich('node', {cwd: '/asdasdb/jhbhj'}, function(err, path) { | 
						|
    t.ifError(err) | 
						|
    t.ok(path) | 
						|
    t.equal(path.split('/').pop(), 'node') | 
						|
    var after = process.env.PATH | 
						|
    t.deepEqual(before, after) | 
						|
    t.end() | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
test('which does not mutate PATH with bad cmd & cwd', function(t) { | 
						|
  var before = process.env.PATH | 
						|
  npmWhich('asdasd', {cwd: 'asdasdb/jhbhj'}, function(err) { | 
						|
    t.ok(err) | 
						|
    var after = process.env.PATH | 
						|
    t.deepEqual(before, after) | 
						|
    t.end() | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
if (process.version.indexOf('v0.10') !== -1) { | 
						|
  // can't test this on 0.11 as process.platform is (rightfully) read-only | 
						|
  test('which does not mutate PATH with bad cwd/cmd on "windows"', function(t) { | 
						|
    var actualPlatform = process.platform | 
						|
    process.platform = "win32" | 
						|
    var before = process.env.PATH | 
						|
    npmWhich('asdasd', {cwd: 'asdasdb/jhbhj'}, function(err) { | 
						|
      process.platform = actualPlatform | 
						|
      t.ok(err) | 
						|
      var after = process.env.PATH | 
						|
      t.deepEqual(before, after) | 
						|
      t.end() | 
						|
    }) | 
						|
  }) | 
						|
} | 
						|
 | 
						|
 |