• 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-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    var objectStore = evalAndLog("objectStore = db.createObjectStore('test')");
46    evalAndLog("objectStore.add('myValue1', 'myKey1')");
47    evalAndLog("objectStore.add('myValue2', 'myKey2')");
48    evalAndLog("objectStore.add('myValue3', 'myKey3')");
49    evalAndLog("objectStore.add('myValue4', 'myKey4')");
50}
51
52function openCursor()
53{
54    debug("openCursor1");
55    evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
56    keyRange = webkitIDBKeyRange.lowerBound("myKey1");
57    request = evalAndLog("trans.objectStore('test').openCursor({range: keyRange})");
58    request.onsuccess = cursorSuccess;
59    request.onerror = unexpectedErrorCallback;
60    counter = 1;
61}
62
63function cursorSuccess()
64{
65    if (event.target.result == null) {
66        shouldBe("counter", "5");
67        request = evalAndLog("trans.objectStore('test').openCursor(keyRange)");
68        request.onsuccess = cursorEmpty;
69        request.onerror = unexpectedErrorCallback;
70        return;
71    }
72    evalAndLog("event.target.result.delete()");
73    shouldBeEqualToString("event.target.result.value", "myValue" + counter++);
74    evalAndLog("event.target.result.continue()");
75}
76
77function cursorEmpty()
78{
79    shouldBeNull("event.target.result");
80    trans.oncomplete = addObject;
81}
82
83function addObject()
84{
85    evalAndLog("trans = db.transaction(['test'], webkitIDBTransaction.READ_WRITE)");
86    objectStore = evalAndLog("objectStore = trans.objectStore('test')");
87    request = evalAndLog("objectStore.add('myValue1', 'myKey1')");
88    request.onsuccess = openCursor2;
89    request.onerror = unexpectedErrorCallback;
90}
91
92function openCursor2()
93{
94    debug("openCursor2");
95    request = evalAndLog("objectStore.openCursor(keyRange)");
96    request.onsuccess = deleteObject;
97    request.onerror = unexpectedErrorCallback;
98}
99
100function deleteObject()
101{
102    shouldBeNonNull(event.target.result);
103    evalAndLog("event.target.result.delete()");
104    request = evalAndLog("objectStore.get('myKey1')");
105    request.onsuccess = verifyObjectDeleted;
106    request.onerror = unexpectedErrorCallback;
107}
108
109function verifyObjectDeleted()
110{
111    shouldBe("event.target.result", "undefined");
112    done();
113}
114
115var successfullyParsed = true;
116
117</script>
118</body>
119</html>
120