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.
 
 
 
 
 
 

84 lines
3.2 KiB

var path = require('path')
var test = require('tap').test
var npm = require('../../lib/npm.js')
var requireInject = require('require-inject')
var realizePackageSpecifier = requireInject('realize-package-specifier', {
'fs': {
stat: function (file, cb) {
process.nextTick(function () {
switch (file) {
case path.resolve('named'):
cb(new Error('ENOENT'))
break
case path.resolve('file.tgz'):
cb(null, { isDirectory: function () { return false } })
break
case path.resolve('dir-no-package'):
cb(null, { isDirectory: function () { return true } })
break
case path.resolve('dir-no-package/package.json'):
cb(new Error('ENOENT'))
break
case path.resolve('dir-with-package'):
cb(null, { isDirectory: function () { return true } })
break
case path.resolve('dir-with-package/package.json'):
cb(null, {})
break
case path.resolve(__dirname, 'dir-with-package'):
cb(null, { isDirectory: function () { return true } })
break
case path.join(__dirname, 'dir-with-package', 'package.json'):
cb(null, {})
break
case path.resolve(__dirname, 'file.tgz'):
cb(null, { isDirectory: function () { return false } })
break
default:
throw new Error('Unknown test file passed to stat: ' + file)
}
})
}
}
})
npm.load({ loglevel: 'silent' }, function () {
var cache = requireInject('../../lib/cache.js', {
'realize-package-specifier': realizePackageSpecifier,
'../../lib/cache/add-named.js': function addNamed (name, version, data, cb) {
cb(null, 'addNamed')
},
'../../lib/cache/add-local.js': function addLocal (name, data, cb) {
cb(null, 'addLocal')
}
})
test('npm install localdir fallback', function (t) {
t.plan(12)
cache.add('named', null, null, false, function (er, which) {
t.ifError(er, 'named was cached')
t.is(which, 'addNamed', 'registry package name')
})
cache.add('file.tgz', null, null, false, function (er, which) {
t.ifError(er, 'file.tgz was cached')
t.is(which, 'addLocal', 'local file')
})
cache.add('dir-no-package', null, null, false, function (er, which) {
t.ifError(er, 'local directory was cached')
t.is(which, 'addNamed', 'local directory w/o package.json')
})
cache.add('dir-with-package', null, null, false, function (er, which) {
t.ifError(er, 'local directory with package was cached')
t.is(which, 'addLocal', 'local directory with package.json')
})
cache.add('file:./dir-with-package', null, __dirname, false, function (er, which) {
t.ifError(er, 'local directory (as URI) with package was cached')
t.is(which, 'addLocal', 'file: URI to local directory with package.json')
})
cache.add('file:./file.tgz', null, __dirname, false, function (er, which) {
t.ifError(er, 'local file (as URI) with package was cached')
t.is(which, 'addLocal', 'file: URI to local file with package.json')
})
})
})