• 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 
13 description("Test IndexedDB's IDBCursor.continue() with a key parameter.");
14 if (window.layoutTestController)
15     layoutTestController.waitUntilDone();
16 
17 var date = new Date();
18 
19 // In order of how it should be sorted by IndexedDB.
20 window.testData = [
21     0,
22     1,
23     1,
24     3.14159,
25     3.14159,
26     10,
27     11,
28     12,
29     13,
30     date,
31     date,
32     new Date(date.valueOf() + 1000),
33     "A big string",
34     "A big string",
35     "A bit1",
36     "A bit2",
37     "A bit3",
38     "the BIGGEST string"
39 ];
40 
41 function openDatabase()
42 {
43     result = evalAndLog("webkitIndexedDB.open('cursor-continue')");
44     result.onsuccess = setVersion;
45     result.onerror = unexpectedErrorCallback;
46 }
47 
48 function setVersion()
49 {
50     window.db = evalAndLog("db = event.target.result");
51 
52     result = evalAndLog("db.setVersion('new version')");
53     result.onsuccess = deleteExisting;
54     result.onerror = unexpectedErrorCallback;
55 }
56 
57 function deleteExisting()
58 {
59     window.trans = evalAndLog("trans = event.target.result");
60     shouldBeTrue("trans !== null");
61     trans.onabort = unexpectedAbortCallback;
62 
63     deleteAllObjectStores(db);
64 
65     window.objectStore = evalAndLog("db.createObjectStore('someObjectStore')");
66     window.indexObject = evalAndLog("objectStore.createIndex('someIndex', 'x')");
67     window.nextToAdd = 0;
68     addData();
69 }
70 
71 function addData()
72 {
73     result = evalAndLog("objectStore.add({'x': testData[nextToAdd]}, nextToAdd)");
74     result.onsuccess = ++window.nextToAdd < testData.length ? addData : ascendingTest;
75     result.onerror = unexpectedErrorCallback;
76 }
77 
78 function ascendingTest()
79 {
80     debug("");
81     var request = evalAndLog("indexObject.openKeyCursor(null, webkitIDBCursor.NEXT)");
82     request.onsuccess = ascendingCallback;
83     request.onerror = unexpectedErrorCallback;
84     window.stage = 0;
85 }
86 
87 function ascendingCallback()
88 
89 {
90     if (window.stage == 0) {
91         shouldBe("event.target.result.primaryKey", "0");
92         evalAndLog("event.target.result.continue(3.14159)");
93     } else if (window.stage == 1) {
94         shouldBe("event.target.result.primaryKey", "3");
95         evalAndLog("event.target.result.continue(3.14159)");
96     } else if (window.stage == 2) {
97         shouldBe("event.target.result.primaryKey", "4");
98         evalAndLog("event.target.result.continue(3.14159)");
99     } else if (window.stage == 3) {
100         shouldBe("event.target.result.primaryKey", "5");
101         evalAndLog("event.target.result.continue(12)");
102     } else if (window.stage == 4) {
103         shouldBe("event.target.result.primaryKey", "7");
104         evalAndLog("event.target.result.continue(date)");
105     } else if (window.stage == 5) {
106         shouldBe("event.target.result.primaryKey", "9");
107         evalAndLog("event.target.result.continue(date)");
108     } else if (window.stage == 6) {
109         shouldBe("event.target.result.primaryKey", "10");
110         evalAndLog("event.target.result.continue(date)");
111     } else if (window.stage == 7) {
112         shouldBe("event.target.result.primaryKey", "11");
113         evalAndLog("event.target.result.continue('A bit1')");
114     } else if (window.stage == 8) {
115         shouldBe("event.target.result.primaryKey", "14");
116         evalAndLog("event.target.result.continue('A bit3')");
117     } else if (window.stage == 9) {
118         shouldBe("event.target.result.primaryKey", "16");
119         evalAndLog("event.target.result.continue('the BIGGEST string')");
120     } else if (window.stage == 10) {
121         shouldBe("event.target.result.primaryKey", "17");
122         evalAndLog("event.target.result.continue('the BIGGEST string')");
123     } else if (window.stage == 11) {
124         shouldBeNull("event.target.result");
125         descendingTest();
126         return;
127     } else {
128         testFailed("Illegal stage.");
129     }
130     window.stage++;
131 }
132 
133 function descendingTest()
134 {
135     debug("");
136     var request = evalAndLog("indexObject.openKeyCursor(null, webkitIDBCursor.PREV)");
137     request.onsuccess = descendingCallback;
138     request.onerror = unexpectedErrorCallback;
139     window.stage = 0;
140 }
141 
142 function descendingCallback()
143 {
144     if (window.stage == 0) {
145         shouldBe("event.target.result.primaryKey", "17");
146         evalAndLog("event.target.result.continue('A bit2')");
147     } else if (window.stage == 1) {
148         shouldBe("event.target.result.primaryKey", "15");
149         evalAndLog("event.target.result.continue('A bit2')");
150     } else if (window.stage == 2) {
151         shouldBe("event.target.result.primaryKey", "14");
152         evalAndLog("event.target.result.continue(date)");
153     } else if (window.stage == 3) {
154         shouldBe("event.target.result.primaryKey", "10");
155         evalAndLog("event.target.result.continue(date)");
156     } else if (window.stage == 4) {
157         shouldBe("event.target.result.primaryKey", "9");
158         evalAndLog("event.target.result.continue(1)");
159     } else if (window.stage == 5) {
160         shouldBe("event.target.result.primaryKey", "2");
161         evalAndLog("event.target.result.continue(1)");
162     } else if (window.stage == 6) {
163         shouldBe("event.target.result.primaryKey", "1");
164         evalAndLog("event.target.result.continue(1)");
165     } else if (window.stage == 7) {
166         shouldBe("event.target.result.primaryKey", "0");
167         evalAndLog("event.target.result.continue(1)");
168     } else if (window.stage == 8) {
169         shouldBeNull("event.target.result");
170         done();
171         return;
172     } else {
173         testFailed("Illegal stage.");
174     }
175     window.stage++;
176 }
177 
178 openDatabase(); // The first step.
179 var successfullyParsed = true;
180 
181 </script>
182 </body>
183 </html>
184