tizen beta release
[profile/ivi/webkit-efl.git] / LayoutTests / storage / indexeddb / cursor-update.html
1 <html>
2 <head>
3 <script src="../../fast/js/resources/js-test-pre.js"></script>
4 <script src="resources/shared.js"></script>
5 </head>
6 <body>
7 <p id="description"></p>
8 <div id="console"></div>
9 <script>
10
11 description("Test IndexedDB's cursor update.");
12 if (window.layoutTestController)
13     layoutTestController.waitUntilDone();
14
15 test();
16
17 function test()
18 {
19     request = evalAndLog("webkitIndexedDB.open('cursor-update')");
20     request.onsuccess = openSuccess;
21     request.onerror = unexpectedErrorCallback;
22 }
23
24 function openSuccess()
25 {
26     var db = evalAndLog("db = event.target.result");
27
28     request = evalAndLog("db.setVersion('new version')");
29     request.onsuccess = setVersionSuccess;
30     request.onerror = unexpectedErrorCallback;
31 }
32
33 function setVersionSuccess()
34 {
35     debug("setVersionSuccess():");
36     window.trans = evalAndLog("trans = event.target.result");
37     shouldBeTrue("trans !== null");
38     trans.onabort = unexpectedAbortCallback;
39     trans.oncomplete = openBasicCursor;
40
41     deleteAllObjectStores(db);
42
43     var objectStore = evalAndLog("objectStore = db.createObjectStore('basicStore')");
44     evalAndLog("objectStore.add('myValue1', 'myKey1').onerror = unexpectedErrorCallback");
45     evalAndLog("objectStore.add('myValue2', 'myKey2').onerror = unexpectedErrorCallback");
46     evalAndLog("objectStore.add('myValue3', 'myKey3').onerror = unexpectedErrorCallback");
47     evalAndLog("objectStore.add('myValue4', 'myKey4').onerror = unexpectedErrorCallback");
48
49     var objectStore = evalAndLog("objectStore = db.createObjectStore('autoIncrementStore', {autoIncrement: true})");
50     evalAndLog("objectStore.add('foo1').onerror = unexpectedErrorCallback");
51     evalAndLog("objectStore.add('foo2').onerror = unexpectedErrorCallback");
52     evalAndLog("objectStore.add('foo3').onerror = unexpectedErrorCallback");
53     evalAndLog("objectStore.add('foo4').onerror = unexpectedErrorCallback");
54
55     var objectStore = evalAndLog("objectStore = db.createObjectStore('keyPathStore', {keyPath: 'id'})");
56     evalAndLog("objectStore.createIndex('numberIndex', 'number')");
57     evalAndLog("objectStore.add({number: 1, id: 1}).onerror = unexpectedErrorCallback");
58     evalAndLog("objectStore.add({number: 2, id: 2}).onerror = unexpectedErrorCallback");
59     evalAndLog("objectStore.add({number: 3, id: 3}).onerror = unexpectedErrorCallback");
60     evalAndLog("objectStore.add({number: 4, id: 4}).onerror = unexpectedErrorCallback");
61 }
62
63 function openBasicCursor()
64 {
65     debug("openBasicCursor()");
66     evalAndLog("trans = db.transaction(['basicStore', 'autoIncrementStore', 'keyPathStore'], webkitIDBTransaction.READ_WRITE)");
67     trans.onabort = unexpectedAbortCallback;
68     trans.oncomplete = transactionComplete;
69
70     keyRange = webkitIDBKeyRange.lowerBound("myKey1");
71     window.objectStore = evalAndLog("trans.objectStore('basicStore')");
72     request = evalAndLog("objectStore.openCursor(keyRange)");
73     request.onsuccess = basicUpdateCursor;
74     request.onerror = unexpectedErrorCallback;
75     counter = 1;
76 }
77
78 function basicUpdateCursor()
79 {
80     debug("basicUpdateCursor()");
81     shouldBe("event.target.source", "objectStore");
82     if (event.target.result == null) {
83         shouldBe("counter", "5");
84         counter = 1;
85
86         request = evalAndLog("trans.objectStore('basicStore').openCursor(keyRange)");
87         request.onsuccess = basicCheckCursor;
88         request.onerror = unexpectedErrorCallback;
89         return;
90     }
91
92     request = evalAndLog("event.target.result.update('myUpdatedValue' + counter++)");
93     request.onsuccess = function() { evalAndLog("event.target.source.continue()"); }
94     request.onerror = unexpectedErrorCallback;
95 }
96
97 function basicCheckCursor()
98 {
99     debug("basicCheckCursor()");
100     if (event.target.result == null) {
101         shouldBe("counter", "5");
102         counter = 1;
103
104         keyRange = webkitIDBKeyRange.lowerBound(1);
105         request = evalAndLog("trans.objectStore('autoIncrementStore').openCursor(keyRange)");
106         request.onsuccess = autoIncrementUpdateCursor;
107         request.onerror = unexpectedErrorCallback;
108         return;
109     }
110
111     shouldBeEqualToString("event.target.result.key", "myKey" + counter);
112     shouldBeEqualToString("event.target.result.value", "myUpdatedValue" + counter++);
113     evalAndLog("event.target.result.continue()");
114 }
115
116 function autoIncrementUpdateCursor()
117 {
118     debug("autoIncrementUpdateCursor()");
119     if (event.target.result == null) {
120         shouldBe("counter", "5");
121         counter = 1;
122
123         request = evalAndLog("trans.objectStore('autoIncrementStore').openCursor(keyRange)");
124         request.onsuccess = autoIncrementCheckCursor;
125         request.onerror = unexpectedErrorCallback;
126         return;
127     }
128
129     request = evalAndLog("event.target.result.update('myUpdatedFoo' + counter++)");
130     request.onsuccess = function() { evalAndLog("event.target.source.continue()"); }
131     request.onerror = unexpectedErrorCallback;
132 }
133
134 function autoIncrementCheckCursor()
135 {
136     debug("autoIncrementCheckCursor()");
137     if (event.target.result == null) {
138         shouldBe("counter", "5");
139         counter = 1;
140
141         keyRange = webkitIDBKeyRange.lowerBound(1);
142         request = evalAndLog("trans.objectStore('keyPathStore').openCursor(keyRange)");
143         request.onsuccess = keyPathUpdateCursor;
144         request.onerror = unexpectedErrorCallback;
145         return;
146     }
147
148     shouldBe("event.target.result.key", "counter");
149     shouldBeEqualToString("event.target.result.value", "myUpdatedFoo" + counter++);
150     evalAndLog("event.target.result.continue()");
151 }
152
153 function keyPathUpdateCursor()
154 {
155     debug("keyPathUpdateCursor()");
156     if (event.target.result == null) {
157         shouldBe("counter", "5");
158         counter = 1;
159
160         request = evalAndLog("trans.objectStore('keyPathStore').openCursor(keyRange)");
161         request.onsuccess = keyPathCheckCursor;
162         request.onerror = unexpectedErrorCallback;
163         return;
164     }
165
166     request = evalAndLog("event.target.result.update({id: 100 + counter, number: 100 + counter})");
167     request.onsuccess = unexpectedSuccessCallback;
168     request.onerror = function() {
169         shouldBe("event.target.errorCode", "webkitIDBDatabaseException.DATA_ERR");
170
171         evalAndLog("event.preventDefault()");
172
173         request = evalAndLog("event.target.source.update({id: counter, number: 100 + counter++})");
174         request.onsuccess = function() { evalAndLog("event.target.source.continue()") };
175         request.onerror = unexpectedErrorCallback;
176     }
177 }
178
179 function keyPathCheckCursor()
180 {
181     debug("keyPathCheckCursor()");
182     if (event.target.result == null) {
183         shouldBe("counter", "5");
184         counter = 1;
185
186         keyRange = webkitIDBKeyRange.lowerBound(101);
187         request = evalAndLog("trans.objectStore('keyPathStore').index('numberIndex').openKeyCursor(keyRange)");
188         request.onsuccess = keyCursor;
189         request.onerror = unexpectedErrorCallback;
190         return;
191     }
192
193     shouldBe("event.target.result.key", "counter");
194     shouldBe("event.target.result.value.id", "counter");
195     shouldBe("event.target.result.value.number", (counter + 100).toString());
196     counter++;
197     evalAndLog("event.target.result.continue()");
198 }
199
200 function keyCursor()
201 {
202     debug("keyCursor()");
203     if (event.target.result == null) {
204         shouldBe("counter", "5");
205         return;
206     }
207
208     shouldBe("event.target.result.key", "counter + 100");
209     shouldBe("event.target.result.primaryKey", "counter");
210
211     try {
212         debug("event.target.result.update({id: counter, number: counter + 200})");
213         event.target.result.update({id: counter, number: counter + 200});
214         testFailed("Expected exception.");
215     } catch (e) {
216         code = e.code;
217         shouldBe("code", "webkitIDBDatabaseException.NOT_ALLOWED_ERR");
218     }
219
220     counter++;
221     event.target.result.continue();
222 }
223
224 function transactionComplete()
225 {
226     debug("transactionComplete()");
227     done();
228 }
229
230
231 </script>
232 </body>
233 </html>