• 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 the basics of IndexedDB's webkitIDBIndex.");
14if (window.layoutTestController)
15    layoutTestController.waitUntilDone();
16
17function test()
18{
19    request = evalAndLog("webkitIndexedDB.open('index-basics')");
20    request.onsuccess = setVersion;
21    request.onerror = unexpectedErrorCallback;
22}
23
24function setVersion()
25{
26    db = evalAndLog("db = event.target.result");
27
28    request = evalAndLog("db.setVersion('new version')");
29    request.onsuccess = deleteExisting;
30    request.onerror = unexpectedErrorCallback;
31}
32
33function deleteExisting()
34{
35    debug("setVersionSuccess():");
36    window.trans = evalAndLog("trans = event.target.result");
37    shouldBeTrue("trans !== null");
38    trans.onabort = unexpectedAbortCallback;
39
40    deleteAllObjectStores(db);
41
42    window.store = evalAndLog("db.createObjectStore('storeName', null)");
43    window.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
44    window.indexObject2 = evalAndLog("store.createIndex('indexName2', 'y', false)");
45    window.indexObject3 = evalAndLog("store.createIndex('zIndex', 'z', true)");
46    addData();
47}
48
49function addData()
50{
51    shouldBeTrue("'name' in indexObject");
52    shouldBeEqualToString("indexObject.name", "indexName");
53    shouldBeTrue("'objectStore' in indexObject");
54    shouldBeEqualToString("indexObject.objectStore.name", "storeName");
55    shouldBeTrue("'keyPath' in indexObject");
56    shouldBeEqualToString("indexObject.keyPath", "x");
57    shouldBeTrue("'unique' in indexObject");
58    shouldBeFalse("indexObject.unique");
59    shouldBeTrue("'openKeyCursor' in indexObject");
60    shouldBeTrue("'openCursor' in indexObject");
61    shouldBeTrue("'getKey' in indexObject");
62    shouldBeTrue("'get' in indexObject");
63
64    request = evalAndLog("store.add({x: 'value', y: 'zzz', z: 2.72}, 'key')");
65    request.onsuccess = addMore;
66    request.onerror = unexpectedErrorCallback;
67}
68
69function addMore()
70{
71    request = evalAndLog("event.target.source.add({x: 'value2', y: 'zzz2', z: 2.71, foobar: 12}, 'key2')");
72    request.onsuccess = getData;
73    request.onerror = unexpectedErrorCallback;
74    window.indexObject4 = evalAndLog("store.createIndex('indexWhileAddIsInFlight', 'x')");
75    window.indexObject5 = evalAndLog("store.createIndex('indexWithWeirdKeyPath', 'foobar')");
76}
77
78function getData()
79{
80    request = evalAndLog("indexObject.getKey('value')");
81    request.onsuccess = getObjectData;
82    request.onerror = unexpectedErrorCallback;
83}
84
85function getObjectData()
86{
87    shouldBeEqualToString("event.target.result", "key");
88
89    request = evalAndLog("indexObject2.getKey('zzz')");
90    request.onsuccess = getObjectData2;
91    request.onerror = unexpectedErrorCallback;
92}
93
94function getObjectData2()
95{
96    shouldBeEqualToString("event.target.result", "key");
97
98    request = evalAndLog("indexObject3.get(2.71)");
99    request.onsuccess = getObjectData3;
100    request.onerror = unexpectedErrorCallback;
101}
102
103function getObjectData3()
104{
105    shouldBeEqualToString("event.target.result.x", "value2");
106
107    request = evalAndLog("indexObject.get('value')");
108    request.onsuccess = getDataFail;
109    request.onerror = unexpectedErrorCallback;
110}
111
112function getDataFail()
113{
114    shouldBeEqualToString("event.target.result.x", "value");
115    shouldBeEqualToString("event.target.result.y", "zzz");
116
117    request = evalAndLog("indexObject.getKey('does not exist')");
118    request.onsuccess = unexpectedSuccessCallback;
119    request.onerror = getObjectDataFail;
120}
121
122function getObjectDataFail()
123{
124    shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
125
126    evalAndLog("event.preventDefault()");
127
128    request = evalAndLog("indexObject.get('does not exist')");
129    request.onsuccess = unexpectedSuccessCallback;
130    request.onerror = getObjectData4;
131}
132
133function getObjectData4()
134{
135    shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
136    evalAndLog("event.preventDefault()");
137
138    request = evalAndLog("indexObject4.getKey('value2')");
139    request.onsuccess = openKeyCursor;
140    request.onerror =  unexpectedErrorCallback;
141}
142
143function openKeyCursor()
144{
145    shouldBeEqualToString("event.target.result", "key2");
146
147    window.request = evalAndLog("indexObject.openKeyCursor()");
148    request.onsuccess = cursor1Continue;
149    request.onerror = unexpectedErrorCallback;
150}
151
152function cursor1Continue()
153{
154    shouldBe("event.target.source", "indexObject");
155    shouldBeFalse("event.target.result === null");
156    shouldBeEqualToString("event.target.result.key", "value");
157    shouldBeEqualToString("event.target.result.primaryKey", "key");
158
159    // We re-use the last request object.
160    evalAndLog("event.target.result.continue()");
161    window.request.onsuccess = cursor1Continue2;
162}
163
164function cursor1Continue2()
165{
166    shouldBeFalse("event.target.result === null");
167    shouldBeEqualToString("event.target.result.key", "value2");
168    shouldBeEqualToString("event.target.result.primaryKey", "key2");
169
170    // We re-use the last request object.
171    evalAndLog("event.target.result.continue()");
172    window.request.onsuccess = openObjectCursor;
173}
174
175function openObjectCursor()
176{
177    shouldBeTrue("event.target.result === null");
178
179    window.request = evalAndLog("indexObject.openCursor()");
180    request.onsuccess = cursor2Continue;
181    request.onerror = unexpectedErrorCallback;
182}
183
184function cursor2Continue()
185{
186    shouldBe("event.target.source", "indexObject");
187    shouldBeFalse("event.target.result === null");
188    shouldBeEqualToString("event.target.result.key", "value");
189    shouldBeEqualToString("event.target.result.value.x", "value");
190    shouldBeEqualToString("event.target.result.value.y", "zzz");
191
192    // We re-use the last request object.
193    evalAndLog("event.target.result.continue()");
194    window.request.onsuccess = cursor2Continue2;
195}
196
197function cursor2Continue2()
198{
199    shouldBeFalse("event.target.result === null");
200    shouldBeEqualToString("event.target.result.key", "value2");
201    shouldBeEqualToString("event.target.result.value.x", "value2");
202    shouldBeEqualToString("event.target.result.value.y", "zzz2");
203
204    // We re-use the last request object.
205    evalAndLog("event.target.result.continue()");
206    window.request.onsuccess = last;
207}
208
209function last()
210{
211    shouldBeTrue("event.target.result === null");
212
213    try {
214        debug("Passing an invalid key into indexObject.get().");
215        indexObject.get([]);
216        testFailed("No exception thrown");
217    } catch (e) {
218        testPassed("Caught exception: " + e.toString());
219    }
220
221    try {
222        debug("Passing an invalid key into indexObject.getKey().");
223        indexObject.getKey([]);
224        testFailed("No exception thrown");
225    } catch (e) {
226        testPassed("Caught exception: " + e.toString());
227    }
228    done();
229}
230
231test();
232
233var successfullyParsed = true;
234
235</script>
236</body>
237</html>
238