UNPKG

6.63 kBJavaScriptView Raw
1var test = require('tape')
2 , testCommon = require('abstract-leveldown/testCommon')
3 , MemDOWN = require('./')
4 //, AbstractIterator = require('./').AbstractIterator
5 , testBuffer = require('./testdata_b64')
6
7/*** compatibility with basic LevelDOWN API ***/
8
9// meh require('abstract-leveldown/abstract/leveldown-test').args(MemDOWN, test, testCommon)
10
11require('abstract-leveldown/abstract/open-test').args(MemDOWN, test, testCommon)
12require('abstract-leveldown/abstract/open-test').open(MemDOWN, test, testCommon)
13
14require('abstract-leveldown/abstract/del-test').all(MemDOWN, test, testCommon)
15
16require('abstract-leveldown/abstract/get-test').all(MemDOWN, test, testCommon)
17
18require('abstract-leveldown/abstract/put-test').all(MemDOWN, test, testCommon)
19
20require('abstract-leveldown/abstract/put-get-del-test').all(MemDOWN, test, testCommon, testBuffer)
21
22require('abstract-leveldown/abstract/batch-test').all(MemDOWN, test, testCommon)
23require('abstract-leveldown/abstract/chained-batch-test').all(MemDOWN, test, testCommon)
24
25require('abstract-leveldown/abstract/close-test').close(MemDOWN, test, testCommon)
26
27require('abstract-leveldown/abstract/iterator-test').all(MemDOWN, test, testCommon)
28
29require('abstract-leveldown/abstract/ranges-test').all(MemDOWN, test, testCommon)
30
31
32//
33// TODO: destroy() test copied from localstorage-down
34// https://github.com/pouchdb/pouchdb/blob/master/lib/adapters/leveldb.js#L1019
35// move this test to abstract-leveldown
36//
37
38test('test .destroy', function (t) {
39 var db = new MemDOWN('destroy-test')
40 var db2 = new MemDOWN('other-db')
41 db2.put('key2', 'value2', function (err) {
42 t.notOk(err, 'no error')
43 db.put('key', 'value', function (err) {
44 t.notOk(err, 'no error')
45 db.get('key', {asBuffer: false}, function (err, value) {
46 t.notOk(err, 'no error')
47 t.equal(value, 'value', 'should have value')
48 db.close(function (err) {
49 t.notOk(err, 'no error')
50 db2.close(function (err) {
51 t.notOk(err, 'no error')
52 MemDOWN.destroy('destroy-test', function (err) {
53 t.notOk(err, 'no error')
54 var db3 = new MemDOWN('destroy-test')
55 var db4 = new MemDOWN('other-db')
56 db3.get('key', function (err, value) {
57 t.ok(err, 'key is not there')
58 db4.get('key2', {asBuffer: false}, function (err, value) {
59 t.notOk(err, 'no error')
60 t.equal(value, 'value2', 'should have value2')
61 t.end()
62 })
63 })
64 })
65 })
66 })
67 })
68 })
69 })
70})
71
72test('unsorted entry, sorted iterator', function (t) {
73 var db = new MemDOWN('foo')
74 , noop = function () {}
75 db.open(noop)
76 db.put('f', 'F', noop)
77 db.put('a', 'A', noop)
78 db.put('c', 'C', noop)
79 db.put('e', 'E', noop)
80 db.batch([
81 { type: 'put', key: 'd', value: 'D' }
82 , { type: 'put', key: 'b', value: 'B' }
83 , { type: 'put', key: 'g', value: 'G' }
84 ], noop)
85 testCommon.collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false }), function (err, data) {
86 t.notOk(err, 'no error')
87 t.equal(data.length, 7, 'correct number of entries')
88 var expected = [
89 { key: 'a', value: 'A' }
90 , { key: 'b', value: 'B' }
91 , { key: 'c', value: 'C' }
92 , { key: 'd', value: 'D' }
93 , { key: 'e', value: 'E' }
94 , { key: 'f', value: 'F' }
95 , { key: 'g', value: 'G' }
96 ]
97 t.deepEqual(data, expected)
98 t.end()
99 })
100})
101
102test('reading while putting', function (t) {
103 var db = new MemDOWN('foo2')
104 , noop = function () {}
105 , iterator
106 db.open(noop)
107 db.put('f', 'F', noop)
108 db.put('c', 'C', noop)
109 db.put('e', 'E', noop)
110 iterator = db.iterator({ keyAsBuffer: false, valueAsBuffer: false })
111 iterator.next(function (err, key, value) {
112 t.equal(key, 'c')
113 t.equal(value, 'C')
114 db.put('a', 'A', noop)
115 iterator.next(function (err, key, value) {
116 t.equal(key, 'e')
117 t.equal(value, 'E')
118 t.end()
119 })
120 })
121})
122
123
124test('reading while deleting', function (t) {
125 var db = new MemDOWN('foo3')
126 , noop = function () {}
127 , iterator
128 db.open(noop)
129 db.put('f', 'F', noop)
130 db.put('a', 'A', noop)
131 db.put('c', 'C', noop)
132 db.put('e', 'E', noop)
133 iterator = db.iterator({ keyAsBuffer: false, valueAsBuffer: false })
134 iterator.next(function (err, key, value) {
135 t.equal(key, 'a')
136 t.equal(value, 'A')
137 db.del('a', noop)
138 iterator.next(function (err, key, value) {
139 t.equal(key, 'c')
140 t.equal(value, 'C')
141 t.end()
142 })
143 })
144})
145
146test('reverse ranges', function(t) {
147 var db = new MemDOWN('foo4')
148 , noop = function () {}
149 , iterator
150 db.open(noop)
151 db.put('a', 'A', noop)
152 db.put('c', 'C', noop)
153 iterator = db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start:'b', reverse:true })
154 iterator.next(function (err, key, value) {
155 t.equal(key, 'a')
156 t.equal(value, 'A')
157 t.end()
158 })
159})
160
161test('no location', function(t) {
162 var db = new MemDOWN()
163 , noerr = function (err) {
164 t.error(err, 'opens correctly')
165 }
166 , noop = function () {}
167 , iterator
168 db.open(noerr)
169 db.put('a', 'A', noop)
170 db.put('c', 'C', noop)
171 iterator = db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start:'b', reverse:true })
172 iterator.next(function (err, key, value) {
173 t.equal(key, 'a')
174 t.equal(value, 'A')
175 t.end()
176 })
177})
178
179test('delete while iterating', function(t) {
180 var db = new MemDOWN()
181 , noerr = function (err) {
182 t.error(err, 'opens correctly')
183 }
184 , noop = function () {}
185 , iterator
186 db.open(noerr)
187 db.put('a', 'A', noop)
188 db.put('b', 'B', noop)
189 db.put('c', 'C', noop)
190 iterator = db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start:'a' })
191 iterator.next(function (err, key, value) {
192 t.equal(key, 'a')
193 t.equal(value, 'A')
194 db.del('b', function (err) {
195 t.notOk(err, 'no error')
196 iterator.next(function (err, key, value) {
197 t.notOk(err, 'no error');
198 t.equals(key, 'b')
199 t.equal(value, 'B')
200 t.end()
201 });
202 })
203 })
204})
205
206test('iterator with byte range', function(t){
207 var db = new MemDOWN()
208 , noerr = function (err) {
209 t.error(err, 'opens correctly')
210 }
211 , noop = function () {}
212 , iterator
213
214 db.open(noerr)
215 db.put(new Buffer('a0', 'hex'), 'A', noop)
216
217 iterator = db.iterator({ valueAsBuffer: false, lt: new Buffer('ff', 'hex') })
218
219 iterator.next(function (err, key, value) {
220 t.notOk(err, 'no error');
221 t.equal(key.toString('hex'), 'a0')
222 t.equal(value, 'A')
223 t.end()
224 })
225})