1 | var test = require('tape')
|
2 | , testCommon = require('abstract-leveldown/testCommon')
|
3 | , MemDOWN = require('./')
|
4 |
|
5 | , testBuffer = require('./testdata_b64')
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | require('abstract-leveldown/abstract/open-test').args(MemDOWN, test, testCommon)
|
12 | require('abstract-leveldown/abstract/open-test').open(MemDOWN, test, testCommon)
|
13 |
|
14 | require('abstract-leveldown/abstract/del-test').all(MemDOWN, test, testCommon)
|
15 |
|
16 | require('abstract-leveldown/abstract/get-test').all(MemDOWN, test, testCommon)
|
17 |
|
18 | require('abstract-leveldown/abstract/put-test').all(MemDOWN, test, testCommon)
|
19 |
|
20 | require('abstract-leveldown/abstract/put-get-del-test').all(MemDOWN, test, testCommon, testBuffer)
|
21 |
|
22 | require('abstract-leveldown/abstract/batch-test').all(MemDOWN, test, testCommon)
|
23 | require('abstract-leveldown/abstract/chained-batch-test').all(MemDOWN, test, testCommon)
|
24 |
|
25 | require('abstract-leveldown/abstract/close-test').close(MemDOWN, test, testCommon)
|
26 |
|
27 | require('abstract-leveldown/abstract/iterator-test').all(MemDOWN, test, testCommon)
|
28 |
|
29 | require('abstract-leveldown/abstract/ranges-test').all(MemDOWN, test, testCommon)
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 | test('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 |
|
72 | test('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 |
|
102 | test('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 |
|
124 | test('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 |
|
146 | test('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 |
|
161 | test('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 |
|
179 | test('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 |
|
206 | test('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 | })
|