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.
173 lines
4.6 KiB
173 lines
4.6 KiB
4 years ago
|
var db
|
||
|
|
||
|
exports.setUp = function (test, testCommon) {
|
||
|
test('setUp common', testCommon.setUp)
|
||
|
test('setUp db', function (t) {
|
||
|
db = testCommon.factory()
|
||
|
db.open(t.end.bind(t))
|
||
|
})
|
||
|
}
|
||
|
|
||
|
exports.args = function (test, testCommon) {
|
||
|
test('test iterator has db reference', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
t.ok(iterator.db === db)
|
||
|
iterator.end(t.end.bind(t))
|
||
|
})
|
||
|
|
||
|
test('test argument-less iterator#next() throws', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
t.throws(
|
||
|
iterator.next.bind(iterator),
|
||
|
/Error: next\(\) requires a callback argument/,
|
||
|
'no-arg iterator#next() throws'
|
||
|
)
|
||
|
iterator.end(t.end.bind(t))
|
||
|
})
|
||
|
|
||
|
test('test argument-less iterator#end() after next() throws', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
iterator.next(function () {
|
||
|
t.throws(
|
||
|
iterator.end.bind(iterator),
|
||
|
/Error: end\(\) requires a callback argument/,
|
||
|
'no-arg iterator#end() throws'
|
||
|
)
|
||
|
iterator.end(t.end.bind(t))
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('test argument-less iterator#end() throws', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
t.throws(
|
||
|
iterator.end.bind(iterator),
|
||
|
/Error: end\(\) requires a callback argument/,
|
||
|
'no-arg iterator#end() throws'
|
||
|
)
|
||
|
iterator.end(t.end.bind(t))
|
||
|
})
|
||
|
|
||
|
test('test iterator#next returns this', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
var self = iterator.next(function () {})
|
||
|
t.ok(iterator === self)
|
||
|
iterator.end(t.end.bind(t))
|
||
|
})
|
||
|
}
|
||
|
|
||
|
exports.sequence = function (test, testCommon) {
|
||
|
test('test twice iterator#end() callback with error', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
iterator.end(function (err) {
|
||
|
t.error(err)
|
||
|
|
||
|
var async = false
|
||
|
|
||
|
iterator.end(function (err2) {
|
||
|
t.ok(err2, 'returned error')
|
||
|
t.is(err2.name, 'Error', 'correct error')
|
||
|
t.is(err2.message, 'end() already called on iterator')
|
||
|
t.ok(async, 'callback is asynchronous')
|
||
|
t.end()
|
||
|
})
|
||
|
|
||
|
async = true
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('test iterator#next after iterator#end() callback with error', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
iterator.end(function (err) {
|
||
|
t.error(err)
|
||
|
|
||
|
var async = false
|
||
|
|
||
|
iterator.next(function (err2) {
|
||
|
t.ok(err2, 'returned error')
|
||
|
t.is(err2.name, 'Error', 'correct error')
|
||
|
t.is(err2.message, 'cannot call next() after end()', 'correct message')
|
||
|
t.ok(async, 'callback is asynchronous')
|
||
|
t.end()
|
||
|
})
|
||
|
|
||
|
async = true
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('test twice iterator#next() throws', function (t) {
|
||
|
var iterator = db.iterator()
|
||
|
iterator.next(function (err) {
|
||
|
t.error(err)
|
||
|
iterator.end(function (err) {
|
||
|
t.error(err)
|
||
|
t.end()
|
||
|
})
|
||
|
})
|
||
|
|
||
|
var async = false
|
||
|
|
||
|
iterator.next(function (err) {
|
||
|
t.ok(err, 'returned error')
|
||
|
t.is(err.name, 'Error', 'correct error')
|
||
|
t.is(err.message, 'cannot call next() before previous next() has completed')
|
||
|
t.ok(async, 'callback is asynchronous')
|
||
|
})
|
||
|
|
||
|
async = true
|
||
|
})
|
||
|
}
|
||
|
|
||
|
exports.iterator = function (test, testCommon) {
|
||
|
test('test simple iterator()', function (t) {
|
||
|
var data = [
|
||
|
{ type: 'put', key: 'foobatch1', value: 'bar1' },
|
||
|
{ type: 'put', key: 'foobatch2', value: 'bar2' },
|
||
|
{ type: 'put', key: 'foobatch3', value: 'bar3' }
|
||
|
]
|
||
|
var idx = 0
|
||
|
|
||
|
db.batch(data, function (err) {
|
||
|
t.error(err)
|
||
|
var iterator = db.iterator()
|
||
|
var fn = function (err, key, value) {
|
||
|
t.error(err)
|
||
|
if (key && value) {
|
||
|
t.ok(Buffer.isBuffer(key), 'key argument is a Buffer')
|
||
|
t.ok(Buffer.isBuffer(value), 'value argument is a Buffer')
|
||
|
t.is(key.toString(), data[idx].key, 'correct key')
|
||
|
t.is(value.toString(), data[idx].value, 'correct value')
|
||
|
process.nextTick(next)
|
||
|
idx++
|
||
|
} else { // end
|
||
|
t.ok(typeof err === 'undefined', 'err argument is undefined')
|
||
|
t.ok(typeof key === 'undefined', 'key argument is undefined')
|
||
|
t.ok(typeof value === 'undefined', 'value argument is undefined')
|
||
|
t.is(idx, data.length, 'correct number of entries')
|
||
|
iterator.end(function () {
|
||
|
t.end()
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
var next = function () {
|
||
|
iterator.next(fn)
|
||
|
}
|
||
|
|
||
|
next()
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
|
||
|
exports.tearDown = function (test, testCommon) {
|
||
|
test('tearDown', function (t) {
|
||
|
db.close(testCommon.tearDown.bind(null, t))
|
||
|
})
|
||
|
}
|
||
|
|
||
|
exports.all = function (test, testCommon) {
|
||
|
exports.setUp(test, testCommon)
|
||
|
exports.args(test, testCommon)
|
||
|
exports.sequence(test, testCommon)
|
||
|
exports.iterator(test, testCommon)
|
||
|
exports.tearDown(test, testCommon)
|
||
|
}
|