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.
214 lines
6.8 KiB
214 lines
6.8 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 levelup = require('../lib/levelup.js') |
|
var errors = levelup.errors |
|
var fs = require('fs') |
|
var common = require('./common') |
|
var assert = require('referee').assert |
|
var refute = require('referee').refute |
|
var buster = require('bustermove') |
|
var MemDOWN = require('memdown') |
|
|
|
buster.testCase('Init & open()', { |
|
'setUp': common.commonSetUp, |
|
'tearDown': common.commonTearDown, |
|
|
|
'levelup()': function () { |
|
assert.isFunction(levelup) |
|
assert.equals(levelup.length, 3) // location, options & callback arguments |
|
assert.exception(levelup, 'InitializationError') // no location |
|
}, |
|
|
|
'default options': function (done) { |
|
var location = common.nextLocation() |
|
levelup(location, { createIfMissing: true, errorIfExists: true }, function (err, db) { |
|
refute(err, 'no error') |
|
assert.isTrue(db.isOpen()) |
|
this.closeableDatabases.push(db) |
|
this.cleanupDirs.push(location) |
|
db.close(function (err) { |
|
refute(err) |
|
|
|
assert.isFalse(db.isOpen()) |
|
|
|
levelup(location, function (err, db) { // no options object |
|
refute(err) |
|
assert.isObject(db) |
|
assert.isTrue(db.options.createIfMissing) |
|
assert.isFalse(db.options.errorIfExists) |
|
assert.equals(db.options.keyEncoding, 'utf8') |
|
assert.equals(db.options.valueEncoding, 'utf8') |
|
assert.equals(db.location, location) |
|
|
|
// read-only properties |
|
db.location = 'foo' |
|
assert.equals(db.location, location) |
|
|
|
done() |
|
}) |
|
}) |
|
}.bind(this)) |
|
}, |
|
|
|
'basic options': function (done) { |
|
var location = common.nextLocation() |
|
levelup( |
|
location, |
|
{ createIfMissing: true, errorIfExists: true, valueEncoding: 'binary' }, function (err, db) { |
|
refute(err) |
|
|
|
this.closeableDatabases.push(db) |
|
this.cleanupDirs.push(location) |
|
assert.isObject(db) |
|
assert.isTrue(db.options.createIfMissing) |
|
assert.isTrue(db.options.errorIfExists) |
|
assert.equals(db.options.keyEncoding, 'utf8') |
|
assert.equals(db.options.valueEncoding, 'binary') |
|
assert.equals(db.location, location) |
|
|
|
// read-only properties |
|
db.location = 'bar' |
|
assert.equals(db.location, location) |
|
|
|
done() |
|
}.bind(this) |
|
) |
|
}, |
|
|
|
'options with encoding': function (done) { |
|
var location = common.nextLocation() |
|
levelup( |
|
location, |
|
{ createIfMissing: true, errorIfExists: true, keyEncoding: 'ascii', valueEncoding: 'json' }, function (err, db) { |
|
refute(err) |
|
|
|
this.closeableDatabases.push(db) |
|
this.cleanupDirs.push(location) |
|
assert.isObject(db) |
|
assert.isTrue(db.options.createIfMissing) |
|
assert.isTrue(db.options.errorIfExists) |
|
assert.equals(db.options.keyEncoding, 'ascii') |
|
assert.equals(db.options.valueEncoding, 'json') |
|
assert.equals(db.location, location) |
|
|
|
// read-only properties |
|
db.location = 'bar' |
|
assert.equals(db.location, location) |
|
|
|
done() |
|
}.bind(this) |
|
) |
|
}, |
|
|
|
'without callback': function (done) { |
|
var location = common.nextLocation() |
|
var db = levelup(location, { createIfMissing: true, errorIfExists: true }) |
|
|
|
this.closeableDatabases.push(db) |
|
this.cleanupDirs.push(location) |
|
assert.isObject(db) |
|
assert.isTrue(db.options.createIfMissing) |
|
assert.isTrue(db.options.errorIfExists) |
|
assert.equals(db.location, location) |
|
|
|
db.on('ready', function () { |
|
assert.isTrue(db.isOpen()) |
|
done() |
|
}) |
|
}, |
|
|
|
'open() with !createIfMissing expects error': function (done) { |
|
levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: false }, function (err, db) { |
|
assert(err) |
|
refute(db) |
|
assert.isInstanceOf(err, Error) |
|
assert.isInstanceOf(err, errors.LevelUPError) |
|
assert.isInstanceOf(err, errors.OpenError) |
|
assert(err.notFound === undefined, 'err.notFound is `undefined`, should only be on NotFoundError') |
|
done() |
|
}) |
|
}, |
|
|
|
'open() with createIfMissing expects directory to be created': function (done) { |
|
levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: true }, function (err, db) { |
|
this.closeableDatabases.push(db) |
|
refute(err) |
|
assert.isTrue(db.isOpen()) |
|
fs.stat(this.cleanupDirs[0], function (err, stat) { |
|
refute(err) |
|
assert(stat.isDirectory()) |
|
done() |
|
}) |
|
}.bind(this)) |
|
}, |
|
|
|
'open() with errorIfExists expects error if exists': function (done) { |
|
levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: true }, function (err, db) { |
|
this.closeableDatabases.push(db) |
|
refute(err) // sanity |
|
levelup(this.cleanupDirs[0], { errorIfExists: true }, function (err) { |
|
assert(err) |
|
assert.isInstanceOf(err, Error) |
|
assert.isInstanceOf(err, errors.LevelUPError) |
|
assert.isInstanceOf(err, errors.OpenError) |
|
done() |
|
}) |
|
}.bind(this)) |
|
}, |
|
|
|
'open() with !errorIfExists does not expect error if exists': function (done) { |
|
levelup(this.cleanupDirs[0] = common.nextLocation(), { createIfMissing: true }, function (err, db) { |
|
refute(err) // sanity |
|
this.closeableDatabases.push(db) |
|
assert.isTrue(db.isOpen()) |
|
|
|
db.close(function () { |
|
assert.isFalse(db.isOpen()) |
|
|
|
levelup(this.cleanupDirs[0], { errorIfExists: false }, function (err, db) { |
|
refute(err) |
|
this.closeableDatabases.push(db) |
|
assert.isTrue(db.isOpen()) |
|
done() |
|
}.bind(this)) |
|
}.bind(this)) |
|
}.bind(this)) |
|
}, |
|
|
|
'constructor with options argument uses factory': function (done) { |
|
var db = levelup({ db: MemDOWN }) |
|
assert.isNull(db.location, 'location property is null') |
|
db.on('open', function () { |
|
assert(db.db instanceof MemDOWN, 'using a memdown backend') |
|
assert.same(db.db.location, '', 'db location property is ""') |
|
db.put('foo', 'bar', function (err) { |
|
refute(err, 'no error') |
|
db.get('foo', function (err, value) { |
|
refute(err, 'no error') |
|
assert.equals(value, 'bar', 'correct value') |
|
done() |
|
}) |
|
}) |
|
}) |
|
}, |
|
|
|
'constructor with only function argument uses factory': function (done) { |
|
var db = levelup(MemDOWN) |
|
assert.isNull(db.location, 'location property is null') |
|
db.on('open', function () { |
|
assert(db.db instanceof MemDOWN, 'using a memdown backend') |
|
assert.same(db.db.location, '', 'db location property is ""') |
|
db.put('foo', 'bar', function (err) { |
|
refute(err, 'no error') |
|
db.get('foo', function (err, value) { |
|
refute(err, 'no error') |
|
assert.equals(value, 'bar', 'correct value') |
|
done() |
|
}) |
|
}) |
|
}) |
|
} |
|
})
|
|
|