1.0.0-interface.js 3.3 KB

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