3 <script src="../../fast/js/resources/js-test-pre.js"></script>
4 <script src="resources/shared.js"></script>
7 <p id="description"></p>
8 <div id="console"></div>
11 description("Test IndexedDB's openCursor.");
12 if (window.layoutTestController)
13 layoutTestController.waitUntilDone();
19 request = evalAndLog("webkitIndexedDB.open('cursor-index-delete')");
20 request.onsuccess = openSuccess;
21 request.onerror = unexpectedErrorCallback;
24 function openSuccess()
26 var db = evalAndLog("db = event.target.result");
28 request = evalAndLog("db.setVersion('new version')");
29 request.onsuccess = setVersionSuccess;
30 request.onerror = unexpectedErrorCallback;
33 function setVersionSuccess()
35 debug("setVersionSuccess():");
36 window.trans = evalAndLog("trans = event.target.result");
37 shouldBeTrue("trans !== null");
38 trans.onabort = unexpectedAbortCallback;
39 trans.oncomplete = openCursor;
41 deleteAllObjectStores(db);
43 objectStore = evalAndLog("objectStore = db.createObjectStore('test')");
44 evalAndLog("objectStore.createIndex('testIndex', 'x')");
46 evalAndLog("objectStore.add({x: 1}, 'myKey1')");
47 evalAndLog("objectStore.add({x: 2}, 'myKey2')");
48 evalAndLog("objectStore.add({x: 3}, 'myKey3')");
49 evalAndLog("objectStore.add({x: 4}, 'myKey4')");
55 evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
56 keyRange = webkitIDBKeyRange.lowerBound(1);
57 request = evalAndLog("trans.objectStore('test').index('testIndex').openCursor(keyRange)");
58 request.onsuccess = cursorSuccess;
59 request.onerror = unexpectedErrorCallback;
63 function cursorSuccess()
65 if (event.target.result == null) {
66 shouldBe("counter", "5");
67 request = evalAndLog("trans.objectStore('test').index('testIndex').openCursor(keyRange)");
68 request.onsuccess = cursorEmpty;
69 request.onerror = unexpectedErrorCallback;
72 var deleteRequest = evalAndLog("event.target.result.delete()");
73 deleteRequest.onerror = unexpectedErrorCallback;
74 shouldBe("event.target.result.key", "counter++");
75 evalAndLog("event.target.result.continue()");
78 function cursorEmpty()
80 shouldBeNull("event.target.result");
81 trans.oncomplete = addObject;
86 evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
87 objectStore = evalAndLog("objectStore = trans.objectStore('test')");
88 request = evalAndLog("objectStore.add({x: 1}, 'myKey1')");
89 request.onsuccess = openCursor2;
90 request.onerror = unexpectedErrorCallback;
93 function openCursor2()
96 evalAndLog("index = event.target.source.index('testIndex')");
97 request = evalAndLog("index.openCursor(keyRange)");
98 request.onsuccess = deleteObject;
99 request.onerror = unexpectedErrorCallback;
102 function deleteObject()
104 shouldBeNonNull(event.target.result);
105 evalAndLog("event.target.result.delete()");
106 request = evalAndLog("index.get(1)");
107 request.onsuccess = unexpectedSuccessCallback;
108 request.onerror = verifyObjectDeleted;
111 function verifyObjectDeleted()
113 evalAndLog("event.preventDefault()");