89 lines
2.3 KiB
JavaScript
89 lines
2.3 KiB
JavaScript
'use strict'
|
|
|
|
// NOTE: copied from levelup
|
|
exports.all = function (test, testCommon) {
|
|
for (const deferred of [false, true]) {
|
|
test(`json encoding: simple-object values (deferred: ${deferred})`, function (t) {
|
|
run(t, deferred, [
|
|
{ key: '0', value: 0 },
|
|
{ key: '1', value: 1 },
|
|
{ key: '2', value: 'a string' },
|
|
{ key: '3', value: true },
|
|
{ key: '4', value: false }
|
|
])
|
|
})
|
|
|
|
test(`json encoding: simple-object keys (deferred: ${deferred})`, function (t) {
|
|
run(t, deferred, [
|
|
{ value: 'string', key: 'a string' },
|
|
{ value: '0', key: 0 },
|
|
{ value: '1', key: 1 },
|
|
{ value: 'false', key: false },
|
|
{ value: 'true', key: true }
|
|
])
|
|
})
|
|
|
|
test(`json encoding: complex-object values (deferred: ${deferred})`, function (t) {
|
|
run(t, deferred, [{
|
|
key: '0',
|
|
value: {
|
|
foo: 'bar',
|
|
bar: [1, 2, 3],
|
|
bang: { yes: true, no: false }
|
|
}
|
|
}])
|
|
})
|
|
|
|
test(`json encoding: complex-object keys (deferred: ${deferred})`, function (t) {
|
|
run(t, deferred, [{
|
|
value: '0',
|
|
key: {
|
|
foo: 'bar',
|
|
bar: [1, 2, 3],
|
|
bang: { yes: true, no: false }
|
|
}
|
|
}])
|
|
})
|
|
}
|
|
|
|
function run (t, deferred, entries) {
|
|
const db = testCommon.factory({ keyEncoding: 'json', valueEncoding: 'json' })
|
|
const operations = entries.map(entry => ({ type: 'put', ...entry }))
|
|
const init = deferred ? (fn) => fn() : db.open.bind(db)
|
|
|
|
init(function (err) {
|
|
t.ifError(err, 'no init() error')
|
|
|
|
db.batch(operations, function (err) {
|
|
t.ifError(err, 'no batch() error')
|
|
|
|
let pending = entries.length + 1
|
|
const next = () => {
|
|
if (--pending === 0) db.close(t.end.bind(t))
|
|
}
|
|
|
|
testGet(next)
|
|
testIterator(next)
|
|
})
|
|
})
|
|
|
|
function testGet (next) {
|
|
for (const entry of entries) {
|
|
db.get(entry.key, function (err, value) {
|
|
t.ifError(err, 'no get() error')
|
|
t.same(value, entry.value)
|
|
next()
|
|
})
|
|
}
|
|
}
|
|
|
|
function testIterator (next) {
|
|
db.iterator().all(function (err, result) {
|
|
t.ifError(err, 'no all() error')
|
|
t.same(result, entries.map(kv => [kv.key, kv.value]))
|
|
next()
|
|
})
|
|
}
|
|
}
|
|
}
|