prefixdown
Version:
Prefix implemented using leveldowns
88 lines (81 loc) • 3.22 kB
JavaScript
var test = require('tape')
var leveldown = require('leveldown')
var levelup = require('levelup')
var levelSublevel = require('level-sublevel')
var prefixdown = require('../')
var testCommon = require('abstract-leveldown/testCommon')
var testBuffer = require('./testdata_b64')
var callback = require('callback-stream')
require('rimraf').sync('test/db')
var db = levelup('test/db', { db: leveldown })
var dbs = [
db,
levelSublevel(db).sublevel('level-sublevel')
]
dbs.forEach(function (db) {
test('PrefixDOWN specific', function (t) {
// prefix as location
var dbA = levelup('!a!', { db: prefixdown, levelup: db })
var dbB = levelup('!b!', { db: prefixdown, levelup: db })
var dbC = levelup('!c!', { db: prefixdown(db) })
dbA.batch([
{ type: 'put', key: 'foo', value: 'b', prefix: dbB },
{ type: 'put', key: 'foo', value: 'c', prefix: '!c!' },
{ type: 'put', key: 'foo', value: 'a' },
{ type: 'put', key: 'foo', value: 'root', prefix: db }
], function () {
db.keyStream().pipe(callback.obj(function (err, list) {
t.notOk(err)
t.deepEqual(list, [
'!a!foo',
'!b!foo',
'!c!foo',
'foo'
])
db.get('foo', function (err, val) {
t.notOk(err)
t.equal(val, 'root', 'root levelup prefix')
})
dbA.get('foo', function (err, val) {
t.notOk(err)
t.equal(val, 'a', 'default prefix')
})
dbB.get('foo', function (err, val) {
t.notOk(err)
t.equal(val, 'b', 'levelup prefix prefix')
})
dbC.get('foo', function (err, val) {
t.notOk(err)
t.equal(val, 'c', 'string prefix')
})
prefixdown.destroy(db, '!a!', function (err) {
t.notOk(err)
prefixdown.destroy(db, '!c!', function (err) {
t.notOk(err)
db.keyStream().pipe(callback.obj(function (err, list) {
t.notOk(err)
t.deepEqual(list, [
'!b!foo',
'foo'
], 'prefix.destroy()')
prefixdown.destroy(db, '!b!', t.end)
}))
})
})
}))
})
})
// compatibility with basic LevelDOWN API
var prefix = prefixdown(db)
require('abstract-leveldown/abstract/leveldown-test').args(prefix, test, testCommon)
require('abstract-leveldown/abstract/open-test').args(prefix, test, testCommon)
require('abstract-leveldown/abstract/del-test').all(prefix, test, testCommon)
require('abstract-leveldown/abstract/get-test').all(prefix, test, testCommon)
require('abstract-leveldown/abstract/put-test').all(prefix, test, testCommon)
require('abstract-leveldown/abstract/put-get-del-test').all(prefix, test, testCommon, testBuffer)
require('abstract-leveldown/abstract/batch-test').all(prefix, test, testCommon)
require('abstract-leveldown/abstract/chained-batch-test').all(prefix, test, testCommon)
require('abstract-leveldown/abstract/close-test').close(prefix, test, testCommon)
require('abstract-leveldown/abstract/iterator-test').all(prefix, test, testCommon)
require('abstract-leveldown/abstract/ranges-test').all(prefix, test, testCommon)
})