• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
4<script src="../../fast/js/resources/js-test-pre.js"></script>
5<script src="../../fast/js/resources/js-test-post-function.js"></script>
6<script src="resources/shared.js"></script>
7</head>
8<body>
9<p id="description"></p>
10<div id="console"></div>
11<script>
12
13description("Test IndexedDB's openCursor.");
14if (window.layoutTestController)
15    layoutTestController.waitUntilDone();
16
17test();
18
19function test()
20{
21    request = evalAndLog("webkitIndexedDB.open('cursor-index-delete')");
22    request.onsuccess = openSuccess;
23    request.onerror = unexpectedErrorCallback;
24}
25
26function openSuccess()
27{
28    var db = evalAndLog("db = event.target.result");
29
30    request = evalAndLog("db.setVersion('new version')");
31    request.onsuccess = setVersionSuccess;
32    request.onerror = unexpectedErrorCallback;
33}
34
35function setVersionSuccess()
36{
37    debug("setVersionSuccess():");
38    window.trans = evalAndLog("trans = event.target.result");
39    shouldBeTrue("trans !== null");
40    trans.onabort = unexpectedAbortCallback;
41    trans.oncomplete = openCursor;
42
43    deleteAllObjectStores(db);
44
45    objectStore = evalAndLog("objectStore = db.createObjectStore('test')");
46    evalAndLog("objectStore.createIndex('testIndex', 'x')");
47
48    evalAndLog("objectStore.add({x: 1}, 'myKey1')");
49    evalAndLog("objectStore.add({x: 2}, 'myKey2')");
50    evalAndLog("objectStore.add({x: 3}, 'myKey3')");
51    evalAndLog("objectStore.add({x: 4}, 'myKey4')");
52}
53
54function openCursor()
55{
56    debug("openCursor1");
57    evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
58    keyRange = webkitIDBKeyRange.lowerBound(1);
59    request = evalAndLog("trans.objectStore('test').index('testIndex').openCursor(keyRange)");
60    request.onsuccess = cursorSuccess;
61    request.onerror = unexpectedErrorCallback;
62    counter = 1;
63}
64
65function cursorSuccess()
66{
67    if (event.target.result == null) {
68        shouldBe("counter", "5");
69        request = evalAndLog("trans.objectStore('test').index('testIndex').openCursor(keyRange)");
70        request.onsuccess = cursorEmpty;
71        request.onerror = unexpectedErrorCallback;
72        return;
73    }
74    var deleteRequest = evalAndLog("event.target.result.delete()");
75    deleteRequest.onerror = unexpectedErrorCallback;
76    shouldBe("event.target.result.key", "counter++");
77    evalAndLog("event.target.result.continue()");
78}
79
80function cursorEmpty()
81{
82    shouldBeNull("event.target.result");
83    trans.oncomplete = addObject;
84}
85
86function addObject()
87{
88    evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
89    objectStore = evalAndLog("objectStore = trans.objectStore('test')");
90    request = evalAndLog("objectStore.add({x: 1}, 'myKey1')");
91    request.onsuccess = openCursor2;
92    request.onerror = unexpectedErrorCallback;
93}
94
95function openCursor2()
96{
97    debug("openCursor2");
98    evalAndLog("index = event.target.source.index('testIndex')");
99    request = evalAndLog("index.openCursor(keyRange)");
100    request.onsuccess = deleteObject;
101    request.onerror = unexpectedErrorCallback;
102}
103
104function deleteObject()
105{
106    shouldBeNonNull(event.target.result);
107    evalAndLog("event.target.result.delete()");
108    request = evalAndLog("index.get(1)");
109    request.onsuccess = unexpectedSuccessCallback;
110    request.onerror = verifyObjectDeleted;
111}
112
113function verifyObjectDeleted()
114{
115    evalAndLog("event.preventDefault()");
116    done();
117}
118
119var successfullyParsed = true;
120
121</script>
122</body>
123</html>
124