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.
60 lines
2.0 KiB
60 lines
2.0 KiB
/* Copyright (c) 2012-2016 LevelUP contributors |
|
* See list at <https://github.com/level/levelup#contributing> |
|
* MIT License <https://github.com/level/levelup/blob/master/LICENSE.md> |
|
*/ |
|
|
|
var assert = require('referee').assert |
|
var format = require('util').format |
|
var buster = require('bustermove') |
|
|
|
function clearCache () { |
|
delete require.cache[require.resolve('..')] |
|
delete require.cache[require.resolve('leveldown')] |
|
delete require.cache[require.resolve('leveldown/package')] |
|
delete require.cache[require.resolve('../lib/leveldown')] |
|
} |
|
|
|
buster.testCase('Optional LevelDOWN', { |
|
'setUp': clearCache, |
|
'tearDown': clearCache, |
|
|
|
'test getLevelDOWN()': function () { |
|
var getLevelDOWN = require('../lib/leveldown') |
|
assert.same(getLevelDOWN(), require('leveldown'), 'correct leveldown provided') |
|
}, |
|
|
|
'test wrong version': function () { |
|
var levelup = require('..') |
|
require('leveldown/package').version = '0.0.0' |
|
assert.exception(levelup.bind(null, '/foo/bar'), function (err) { |
|
if (err.name !== 'LevelUPError') { return false } |
|
if (!/Installed version of LevelDOWN \(0\.0\.0\) does not match required version \(\^\d+\.\d+\.\d+\)/.test(err.message)) { return false } |
|
return true |
|
}) |
|
}, |
|
|
|
'test no leveldown/package': function () { |
|
assertRequireThrows('leveldown/package') |
|
}, |
|
|
|
'test no leveldown': function () { |
|
assertRequireThrows('leveldown') |
|
} |
|
}) |
|
|
|
function assertRequireThrows (module) { |
|
var levelup = require('..') |
|
var error = 'Wow, this is kind of evil isn\'t it?' |
|
// simulate an exception from a require() that doesn't resolved a package |
|
Object.defineProperty(require.cache, require.resolve(module), { |
|
get: function () { |
|
throw new Error(error) |
|
} |
|
}) |
|
assert.exception(levelup.bind(null, '/foo/bar'), function (err) { |
|
if (err.name !== 'LevelUPError') { return false } |
|
var template = 'Failed to require LevelDOWN (%s). Try `npm install leveldown` if it\'s missing' |
|
if (format(template, error) !== err.message) { return false } |
|
return true |
|
}) |
|
}
|
|
|