|
1 | | -var referee = require('referee') |
2 | | -var assert = referee.assert |
3 | | -var refute = referee.refute |
4 | | -var each = require('async-each') |
5 | | -var delayed = require('delayed').delayed |
6 | | -var levelup = require('../lib/levelup.js') |
7 | | -var errors = require('level-errors') |
8 | | -var memdown = require('memdown') |
9 | | -var encDown = require('encoding-down') |
10 | | - |
11 | | -assert(levelup.errors === errors) |
12 | | - |
13 | | -referee.add('isInstanceOf', { |
14 | | - assert: function (actual, expected) { |
15 | | - return actual instanceof expected |
16 | | - }, |
17 | | - refute: function (actual, expected) { |
18 | | - return !(actual instanceof expected) |
19 | | - }, |
20 | | - assertMessage: '${0} expected to be instance of ${1}', // eslint-disable-line |
21 | | - refuteMessage: '${0} expected not to be instance of ${1}' // eslint-disable-line |
22 | | -}) |
23 | | - |
24 | | -referee.add('isUndefined', { |
25 | | - assert: function (actual) { |
26 | | - return actual === undefined |
27 | | - }, |
28 | | - refute: function (actual) { |
29 | | - return actual !== undefined |
30 | | - }, |
31 | | - assertMessage: '${0} expected to be undefined', // eslint-disable-line |
32 | | - refuteMessage: '${0} expected not to be undefined' // eslint-disable-line |
33 | | -}) |
34 | | - |
35 | | -module.exports.openTestDatabase = function () { |
36 | | - var options = typeof arguments[0] === 'object' ? arguments[0] : {} |
37 | | - var callback = typeof arguments[0] === 'function' ? arguments[0] : arguments[1] |
38 | | - |
39 | | - levelup(encDown(memdown(), options), function (err, db) { |
40 | | - refute(err) |
41 | | - if (!err) { |
42 | | - this.closeableDatabases.push(db) |
43 | | - callback(db) |
44 | | - } |
45 | | - }.bind(this)) |
46 | | -} |
47 | | - |
48 | | -module.exports.commonTearDown = function (done) { |
49 | | - each(this.closeableDatabases, function (db, callback) { |
50 | | - db.close(callback) |
51 | | - }, done) |
52 | | -} |
53 | | - |
54 | | -module.exports.commonSetUp = function (done) { |
55 | | - this.closeableDatabases = [] |
56 | | - this.openTestDatabase = module.exports.openTestDatabase.bind(this) |
57 | | - this.timeout = 10000 |
58 | | - process.nextTick(done) |
59 | | -} |
60 | | - |
61 | | -module.exports.readStreamSetUp = function (done) { |
62 | | - module.exports.commonSetUp.call(this, function () { |
63 | | - var i |
64 | | - var k |
65 | | - |
66 | | - this.dataSpy = this.spy() |
67 | | - this.endSpy = this.spy() |
68 | | - this.sourceData = [] |
69 | | - |
70 | | - for (i = 0; i < 100; i++) { |
71 | | - k = (i < 10 ? '0' : '') + i |
72 | | - this.sourceData.push({ |
73 | | - type: 'put', |
74 | | - key: k, |
75 | | - value: Math.random() |
76 | | - }) |
77 | | - } |
78 | | - |
79 | | - this.verify = delayed(function (rs, done, data) { |
80 | | - if (!data) data = this.sourceData // can pass alternative data array for verification |
81 | | - assert.equals(this.endSpy.callCount, 1, 'ReadStream emitted single "end" event') |
82 | | - assert.equals(this.dataSpy.callCount, data.length, 'ReadStream emitted correct number of "data" events') |
83 | | - data.forEach(function (d, i) { |
84 | | - var call = this.dataSpy.getCall(i) |
85 | | - if (call) { |
86 | | - assert.equals(call.args.length, 1, 'ReadStream "data" event #' + i + ' fired with 1 argument') |
87 | | - refute.isNull(call.args[0].key, 'ReadStream "data" event #' + i + ' argument has "key" property') |
88 | | - refute.isNull(call.args[0].value, 'ReadStream "data" event #' + i + ' argument has "value" property') |
89 | | - assert.equals(call.args[0].key, d.key, 'ReadStream "data" event #' + i + ' argument has correct "key"') |
90 | | - assert.equals(+call.args[0].value, +d.value, 'ReadStream "data" event #' + i + ' argument has correct "value"') |
91 | | - } |
92 | | - }.bind(this)) |
93 | | - done() |
94 | | - }, 0.05, this) |
95 | | - |
96 | | - done() |
97 | | - }.bind(this)) |
| 1 | +// Same interface as abstract-leveldown's testCommon |
| 2 | +module.exports = function testCommon (options) { |
| 3 | + var factory = options.factory |
| 4 | + var test = options.test |
| 5 | + |
| 6 | + if (typeof factory !== 'function') { |
| 7 | + throw new TypeError('factory must be a function') |
| 8 | + } |
| 9 | + |
| 10 | + if (typeof test !== 'function') { |
| 11 | + throw new TypeError('test must be a function') |
| 12 | + } |
| 13 | + |
| 14 | + return { |
| 15 | + test: test, |
| 16 | + factory: factory, |
| 17 | + |
| 18 | + bufferKeys: options.bufferKeys !== false, |
| 19 | + // createIfMissing: options.createIfMissing !== false, |
| 20 | + // errorIfExists: options.errorIfExists !== false, |
| 21 | + snapshots: options.snapshots !== false, |
| 22 | + seek: options.seek !== false, |
| 23 | + clear: !!options.clear, |
| 24 | + deferredOpen: !!options.deferredOpen, |
| 25 | + promises: !!options.promises, |
| 26 | + streams: !!options.streams, |
| 27 | + encodings: !!options.encodings |
| 28 | + } |
98 | 29 | } |
0 commit comments