• 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 IDBCursor.continue() with a key parameter.");
14if (window.layoutTestController)
15    layoutTestController.waitUntilDone();
16
17var date = new Date();
18
19// In order of how it should be sorted by IndexedDB.
20window.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
41function openDatabase()
42{
43    result = evalAndLog("webkitIndexedDB.open('cursor-continue')");
44    result.onsuccess = setVersion;
45    result.onerror = unexpectedErrorCallback;
46}
47
48function 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
57function 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
71function 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
78function 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
87function 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
133function 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
142function 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
178openDatabase(); // The first step.
179var successfullyParsed = true;
180
181</script>
182</body>
183</html>
184