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.

205 lines
4.7 KiB

4 years ago
'use strict'
var test = require('tape')
var packager = require('.')
test('Level constructor has access to levelup errors', function (t) {
function Down () {}
t.ok(packager(Down).errors, '.errors property set on constructor')
t.end()
})
test('Level constructor relays .destroy and .repair if they exist', function (t) {
t.plan(8)
test('destroy')
test('repair')
function test (method) {
function Down () {}
Down[method] = function () {
t.same([].slice.call(arguments), args, 'supports variadic arguments')
}
var level = packager(Down)
var args = []
for (var i = 0; i < 4; i++) {
args.push(i)
level[method].apply(level, args)
}
}
})
test('Level constructor', function (t) {
t.plan(3)
function Down () {
return {
open: function (opts, cb) {
t.same(opts, {
createIfMissing: true,
errorIfExists: false,
// This is a side effect of encoding-down (mutating options)
keyEncoding: 'utf8',
valueEncoding: 'utf8'
})
}
}
}
var levelup = packager(Down)()
t.is(levelup.options.keyEncoding, 'utf8')
t.is(levelup.options.valueEncoding, 'utf8')
})
test('Level constructor with location', function (t) {
t.plan(4)
function Down (location) {
t.is(location, 'location', 'location is correct')
return {
open: function (opts, cb) {
t.same(opts, {
createIfMissing: true,
errorIfExists: false,
keyEncoding: 'utf8',
valueEncoding: 'utf8'
})
}
}
}
var levelup = packager(Down)('location')
t.is(levelup.options.keyEncoding, 'utf8')
t.is(levelup.options.valueEncoding, 'utf8')
})
test('Level constructor with location & options', function (t) {
t.plan(2)
function Down (location, opts) {
t.is(location, 'location', 'location is correct')
t.same(opts, {
prefix: 'foo'
})
return {
open: function (opts, cb) {
cb()
}
}
}
packager(Down)('location', { prefix: 'foo' })
})
test('Level constructor with callback', function (t) {
t.plan(3)
function Down () {
return {
open: function (opts, cb) {
t.same(opts, {
createIfMissing: true,
errorIfExists: false,
keyEncoding: 'utf8',
valueEncoding: 'utf8'
})
process.nextTick(cb)
}
}
}
packager(Down)(function (err, db) {
t.error(err)
t.ok(db, 'db set in callback')
})
})
test('Level constructor with location & callback', function (t) {
t.plan(4)
function Down (location) {
t.is(location, 'location', 'location is correct')
return {
open: function (opts, cb) {
t.same(opts, {
createIfMissing: true,
errorIfExists: false,
keyEncoding: 'utf8',
valueEncoding: 'utf8'
})
process.nextTick(cb)
}
}
}
packager(Down)('location', function (err, db) {
t.error(err)
t.ok(db, 'db set in callback')
})
})
test('Level constructor with location & options passed to levelup', function (t) {
t.plan(4)
var Down = function (location) {
t.is(location, 'location', 'location is correct')
return {
open: function (opts, cb) {
t.same(opts, {
createIfMissing: true,
errorIfExists: false,
keyEncoding: 'binary',
valueEncoding: 'binary'
})
}
}
}
var levelup = packager(Down)('location', {
keyEncoding: 'binary',
valueEncoding: 'binary'
})
t.is(levelup.options.keyEncoding, 'binary')
t.is(levelup.options.valueEncoding, 'binary')
})
test('Level constructor with options passed to levelup', function (t) {
t.plan(3)
var Down = function () {
return {
open: function (opts, cb) {
t.same(opts, {
createIfMissing: true,
errorIfExists: false,
keyEncoding: 'binary',
valueEncoding: 'binary'
})
}
}
}
var levelup = packager(Down)({
keyEncoding: 'binary',
valueEncoding: 'binary'
})
t.is(levelup.options.keyEncoding, 'binary')
t.is(levelup.options.valueEncoding, 'binary')
})
test('Level constructor with options & callback passed to levelup', function (t) {
t.plan(5)
var Down = function () {
return {
open: function (opts, cb) {
t.same(opts, {
createIfMissing: true,
errorIfExists: false,
keyEncoding: 'binary',
valueEncoding: 'binary'
})
process.nextTick(cb)
}
}
}
var levelup = packager(Down)({
keyEncoding: 'binary',
valueEncoding: 'binary'
}, function (err, db) {
t.error(err)
t.ok(db, 'db set in callback')
})
t.is(levelup.options.keyEncoding, 'binary')
t.is(levelup.options.valueEncoding, 'binary')
})