3 original test: http://mxr.mozilla.org/mozilla2.0/source/dom/indexedDB/test/test_cursors.html?force=1
4 license of original test:
5 " Any copyright is dedicated to the Public Domain.
6 http://creativecommons.org/publicdomain/zero/1.0/ "
10 <script src="../../../fast/js/resources/js-test-pre.js"></script>
11 <script src="../resources/shared.js"></script>
14 <p id="description"></p>
15 <div id="console"></div>
18 description("Test IndexedDB cursor behavior");
19 if (window.layoutTestController)
20 layoutTestController.waitUntilDone();
24 indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
25 shouldBeFalse("indexedDB == null");
26 IDBDatabaseException = evalAndLog("IDBDatabaseException = window.IDBDatabaseException || window.webkitIDBDatabaseException;");
27 shouldBeFalse("IDBDatabaseException == null");
28 IDBCursor = evalAndLog("IDBCursor = window.IDBCursor || window.webkitIDBCursor;");
29 shouldBeFalse("IDBCursor == null");
30 IDBKeyRange = evalAndLog("IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;");
31 shouldBeFalse("IDBKeyRange == null");
33 name = window.location.pathname;
34 description = "My Test Database";
35 request = evalAndLog("indexedDB.open(name, description)");
36 request.onsuccess = openSuccess;
37 request.onerror = unexpectedErrorCallback;
40 function openSuccess()
42 db = evalAndLog("db = event.target.result");
44 request = evalAndLog("request = db.setVersion('1')");
45 request.onsuccess = testGroup1;
46 request.onerror = unexpectedErrorCallback;
51 deleteAllObjectStores(db);
53 objectStore = evalAndLog("db.createObjectStore('autoIncrement', { autoIncrement: true });");
55 request = evalAndLog("request = objectStore.openCursor();");
56 request.onerror = unexpectedErrorCallback;
57 request.onsuccess = function (event) {
58 shouldBe("event.target.result", "null");
65 objectStore = evalAndLog("db.createObjectStore('autoIncrementKeyPath', { keyPath: 'foo', autoIncrement: true });");
67 request = evalAndLog("request = objectStore.openCursor();");
68 request.onerror = unexpectedErrorCallback;
69 request.onsuccess = function (event) {
70 shouldBe("event.target.result", "null");
77 objectStore = evalAndLog("db.createObjectStore('keyPath', { keyPath: 'foo' });");
79 request = evalAndLog("request = objectStore.openCursor();");
80 request.onerror = unexpectedErrorCallback;
81 request.onsuccess = function (event) {
82 shouldBe("event.target.result", "null");
89 objectStore = evalAndLog("db.createObjectStore('foo');");
91 request = evalAndLog("request = objectStore.openCursor();");
92 request.onerror = unexpectedErrorCallback;
93 request.onsuccess = function (event) {
94 shouldBe("event.target.result", "null");
101 keys = evalAndLog("keys = [1, -1, 0, 10, 2000, 'q', 'z', 'two', 'b', 'a'];");
102 sortedKeys = evalAndLog("sortedKeys = [-1, 0, 1, 10, 2000, 'a', 'b', 'q', 'two', 'z'];");
104 keyIndex = evalAndLog("keyIndex = 0;");
107 request = evalAndLog("request = objectStore.add('foo', keys[i]);");
108 request.onerror = unexpectedErrorCallback;
109 request.onsuccess = function(event) {
110 if (++keyIndex == keys.length) {
117 function testGroup6()
121 request = evalAndLog("request = objectStore.openCursor();");
122 request.onerror = unexpectedErrorCallback;
123 request.onsuccess = function (event) {
124 cursor = evalAndLog("cursor = event.target.result;");
126 shouldBe("cursor.key", "sortedKeys[keyIndex]");
127 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
128 shouldBe("cursor.value", "'foo'");
130 evalAndLog("cursor.continue();");
131 evalAndExpectException("cursor.continue();", "IDBDatabaseException.NOT_ALLOWED_ERR");
133 shouldBe("cursor.key", "sortedKeys[keyIndex]");
134 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
135 shouldBe("cursor.value", "'foo'");
137 evalAndLog("keyIndex++;");
140 shouldBe("keyIndex", "keys.length");
146 function testGroup7()
148 keyIndex = evalAndLog("keyIndex = 4;");
150 range = evalAndLog("range = IDBKeyRange.bound(2000, 'q');");
151 request = evalAndLog("request = objectStore.openCursor(range);");
152 request.onerror = unexpectedErrorCallback;
153 request.onsuccess = function (event) {
154 cursor = evalAndLog("cursor = event.target.result;");
156 shouldBe("cursor.key", "sortedKeys[keyIndex]");
157 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
158 shouldBe("cursor.value", "'foo'");
160 evalAndLog("cursor.continue();");
162 shouldBe("cursor.key", "sortedKeys[keyIndex]");
163 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
164 shouldBe("cursor.value", "'foo'");
166 evalAndLog("keyIndex++;");
169 shouldBe("keyIndex", "8");
175 function testGroup8()
179 request = evalAndLog("request = objectStore.openCursor();");
180 request.onerror = unexpectedErrorCallback;
181 request.onsuccess = function (event) {
182 cursor = evalAndLog("cursor = event.target.result;");
184 shouldBe("cursor.key", "sortedKeys[keyIndex]");
185 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
186 shouldBe("cursor.value", "'foo'");
189 evalAndLog("cursor.continue();");
192 evalAndLog("cursor.continue('b');");
195 shouldBe("cursor.key", "sortedKeys[keyIndex]");
196 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
197 shouldBe("cursor.value", "'foo'");
199 evalAndLog("keyIndex += keyIndex ? 1: 6;");
202 shouldBe("keyIndex", "keys.length");
208 function testGroup9()
210 keyIndex = evalAndLog("keyIndex = 0;");
212 request = evalAndLog("request = objectStore.openCursor();");
213 request.onerror = unexpectedErrorCallback;
214 request.onsuccess = function (event) {
215 cursor = evalAndLog("cursor = event.target.result;");
217 shouldBe("cursor.key", "sortedKeys[keyIndex]");
218 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
219 shouldBe("cursor.value", "'foo'");
222 evalAndLog("cursor.continue();");
225 evalAndLog("cursor.continue(10);");
228 shouldBe("cursor.key", "sortedKeys[keyIndex]");
229 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
230 shouldBe("cursor.value", "'foo'");
232 evalAndLog("keyIndex += keyIndex ? 1: 3;");
235 shouldBe("keyIndex", "keys.length");
241 function testGroup10()
243 keyIndex = evalAndLog("keyIndex = 0;");
245 request = evalAndLog("request = objectStore.openCursor();");
246 request.onerror = unexpectedErrorCallback;
247 request.onsuccess = function (event) {
248 cursor = evalAndLog("cursor = event.target.result;");
250 shouldBe("cursor.key", "sortedKeys[keyIndex]");
251 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
252 shouldBe("cursor.value", "'foo'");
255 evalAndLog("cursor.continue();");
258 evalAndLog("cursor.continue('c');");
261 shouldBe("cursor.key", "sortedKeys[keyIndex]");
262 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
263 shouldBe("cursor.value", "'foo'");
265 evalAndLog("keyIndex += keyIndex ? 1 : 7;");
268 shouldBe("keyIndex", "keys.length");
274 function testGroup11()
276 keyIndex = evalAndLog("keyIndex = 0;");
278 request = evalAndLog("request = objectStore.openCursor();");
279 request.onerror = unexpectedErrorCallback;
280 request.onsuccess = function (event) {
281 cursor = evalAndLog("cursor = event.target.result;");
283 shouldBe("cursor.key", "sortedKeys[keyIndex]");
284 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
285 shouldBe("cursor.value", "'foo'");
288 request = evalAndLog("request = cursor.update('bar');");
289 request.onerror = unexpectedErrorCallback;
290 request.onsuccess = function(event) {
291 evalAndLog("keyIndex++;");
292 evalAndLog("cursor.continue();");
296 evalAndLog("keyIndex++;");
297 evalAndLog("cursor.continue();");
301 shouldBe("keyIndex", "keys.length");
307 function testGroup12()
309 request = evalAndLog("request = objectStore.get(sortedKeys[4]);");
310 request.onerror = unexpectedErrorCallback;
311 request.onsuccess = testGroup12b;
314 function testGroup12b()
316 shouldBe("event.target.result", "'bar'");
318 request = evalAndLog("request = objectStore.put('foo', sortedKeys[4]);");
319 request.onerror = unexpectedErrorCallback;
320 request.onsuccess = testGroup13;
323 function testGroup13()
325 keyIndex = evalAndLog("keyIndex = 0;");
327 gotRemoveEvent = false;
330 request = evalAndLog("request = objectStore.openCursor(null, IDBCursor.NEXT);");
331 request.onerror = unexpectedErrorCallback;
332 request.onsuccess = function (event) {
333 cursor = evalAndLog("cursor = event.target.result;");
335 shouldBe("cursor.key", "sortedKeys[keyIndex]");
336 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
337 shouldBe("cursor.value", "'foo'");
340 request = evalAndLog("request = cursor.delete();");
341 request.onerror = unexpectedErrorCallback;
342 request.onsuccess = function(event) {
343 shouldBe("keyIndex", "5");
344 gotRemoveEvent = evalAndLog("gotRemoveEvent = true;");
348 evalAndLog("keyIndex++;");
349 evalAndLog("cursor.continue();");
352 shouldBe("keyIndex", "keys.length");
353 shouldBe("gotRemoveEvent", "true");
359 function testGroup14()
361 request = evalAndLog("request = objectStore.get(sortedKeys[4]);");
362 request.onerror = unexpectedErrorCallback;
363 request.onsuccess = testGroup14b;
366 function testGroup14b()
368 shouldBe("event.target.result", "undefined");
370 request = evalAndLog("request = objectStore.add('foo', sortedKeys[4]);");
371 request.onerror = unexpectedErrorCallback;
372 request.onsuccess = testGroup15;
375 function testGroup15()
377 keyIndex = sortedKeys.length - 1;
379 request = evalAndLog("request = objectStore.openCursor(null, IDBCursor.PREV);");
380 request.onerror = unexpectedErrorCallback;
381 request.onsuccess = function (event) {
382 cursor = evalAndLog("cursor = event.target.result;");
384 shouldBe("cursor.key", "sortedKeys[keyIndex]");
385 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
386 shouldBe("cursor.value", "'foo'");
388 evalAndLog("cursor.continue();");
390 shouldBe("cursor.key", "sortedKeys[keyIndex]");
391 shouldBe("cursor.primaryKey", "sortedKeys[keyIndex]");
392 shouldBe("cursor.value", "'foo'");
394 evalAndLog("keyIndex--;");
397 shouldBe("keyIndex", "-1");