dom/indexedDB/test/error_events_abort_transactions_iframe.html

changeset 2
7e26c7da4463
equal deleted inserted replaced
-1:000000000000 0:431db317744a
1 <!--
2 Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/
4 -->
5 <html>
6 <head>
7 <title>Indexed Database Property Test</title>
8
9 <script type="text/javascript;version=1.7">
10
11 let testGenerator = testSteps();
12
13 function ok(val, message) {
14 val = val ? "true" : "false";
15 window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
16 "');", "*");
17 }
18
19 function is(a, b, message) {
20 ok(a == b, message);
21 }
22
23 function grabEventAndContinueHandler(event) {
24 testGenerator.send(event);
25 }
26
27 function errorHandler(event) {
28 ok(false, "indexedDB error, code " + event.target.errorCcode);
29 finishTest();
30 }
31
32 function unexpectedSuccessHandler(event) {
33 ok(false, "got success when it was not expected!");
34 finishTest();
35 }
36
37 function finishTest() {
38 // Let window.onerror have a chance to fire
39 setTimeout(function() {
40 setTimeout(function() {
41 testGenerator.close();
42 window.parent.postMessage("SimpleTest.finish();", "*");
43 }, 0);
44 }, 0);
45 }
46
47 window.onerror = function(message, filename, lineno) {
48 is(message, "ConstraintError", "Expect a constraint error");
49 };
50
51 function testSteps() {
52 let request = indexedDB.open(window.location.pathname, 1);
53 request.onsuccess = unexpectedSuccessHandler;
54 request.onerror = grabEventAndContinueHandler;
55 request.onupgradeneeded = grabEventAndContinueHandler;
56 let event = yield undefined;
57
58 let db = event.target.result;
59
60 is(db.version, 1, "Correct version");
61 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
62
63 let trans = event.target.transaction;
64
65 trans.oncomplete = unexpectedSuccessHandler;
66 trans.onabort = grabEventAndContinueHandler;
67
68 let objectStore = db.createObjectStore("foo");
69
70 is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
71 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
72
73 let originalRequest = request;
74 request = objectStore.add({}, 1);
75 request.onsuccess = grabEventAndContinueHandler;
76 request.onerror = errorHandler;
77 event = yield undefined;
78
79 request = objectStore.add({}, 1);
80 request.onsuccess = unexpectedSuccessHandler;
81 request.onerror = function(event) {
82 // Don't do anything! We want this error.
83 }
84 event = yield undefined;
85
86 is(event.type, "abort", "Got a transaction abort event");
87 is(db.version, 0, "Correct version");
88 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
89 is(trans.error.name, "ConstraintError", "Right error");
90 ok(trans.error === request.error, "Object identity holds");
91 is(originalRequest.transaction, trans, "request.transaction should still be set");
92
93 event = yield undefined;
94 is(event.type, "error", "Got request error event");
95 is(event.target, originalRequest, "error event has right target");
96 is(event.target.error.name, "ConstraintError", "Right error");
97 is(originalRequest.transaction, null, "request.transaction should now be null");
98
99 let request = indexedDB.open(window.location.pathname, 1);
100 request.onerror = errorHandler;
101 request.onupgradeneeded = grabEventAndContinueHandler;
102 let event = yield undefined;
103
104 let db = event.target.result;
105
106 event.target.transaction.oncomplete = grabEventAndContinueHandler;
107 event.target.transaction.onabort = unexpectedSuccessHandler;
108
109 is(db.version, "1", "Correct version");
110 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
111
112 let objectStore = db.createObjectStore("foo");
113
114 is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
115 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
116
117 objectStore.createIndex("baz", "key.path");
118 objectStore.createIndex("dontDeleteMe", "");
119
120 is(objectStore.indexNames.length, 2, "Correct indexNames length");
121 ok(objectStore.indexNames.contains("baz"), "Has correct index");
122 ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index");
123
124 let objectStoreForDeletion = db.createObjectStore("bar");
125
126 is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
127 ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
128
129 objectStoreForDeletion.createIndex("foo", "key.path");
130
131 is(objectStoreForDeletion.indexNames.length, 1, "Correct indexNames length");
132 ok(objectStoreForDeletion.indexNames.contains("foo"), "Has correct index");
133
134 request = objectStore.add({}, 1);
135 request.onsuccess = grabEventAndContinueHandler;
136 request.onerror = errorHandler;
137 event = yield undefined;
138
139 request = objectStore.add({}, 1);
140 request.onsuccess = unexpectedSuccessHandler;
141 request.onerror = function(event) {
142 // Expected, but prevent the abort.
143 event.preventDefault();
144 }
145 event = yield undefined;
146
147 is(event.type, "complete", "Got a transaction complete event");
148
149 is(db.version, "1", "Correct version");
150 is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
151 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
152 ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
153
154 db.close();
155
156 let request = indexedDB.open(window.location.pathname, 2);
157 request.onerror = errorHandler;
158 request.onupgradeneeded = grabEventAndContinueHandler;
159 let event = yield undefined;
160
161 let db = event.target.result;
162
163 let trans = event.target.transaction;
164 trans.oncomplete = unexpectedSuccessHandler;
165
166 is(db.version, "2", "Correct version");
167 is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
168 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
169 ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
170
171 let createdObjectStore = db.createObjectStore("newlyCreated");
172 let objectStore = trans.objectStore("foo");
173 let deletedObjectStore = trans.objectStore("bar");
174 deletedObjectStore.deleteIndex("foo");
175 db.deleteObjectStore("bar");
176
177 createdObjectStore.createIndex("newIndex", "key.path");
178 objectStore.createIndex("newIndex", "key.path");
179 objectStore.deleteIndex("baz");
180
181 is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
182 ok(db.objectStoreNames.contains("newlyCreated"), "Has correct objectStore");
183 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
184
185 is(createdObjectStore.indexNames.length, 1, "Correct indexNames length");
186 ok(createdObjectStore.indexNames.contains("newIndex"), "Has correct index");
187
188 is(objectStore.indexNames.length, 2, "Correct indexNames length");
189 ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index");
190 ok(objectStore.indexNames.contains("newIndex"), "Has correct index");
191
192 objectStore.add({}, 1);
193 trans.onabort = grabEventAndContinueHandler;
194
195 event = yield undefined;
196
197 // Test that the world has been restored.
198 is(db.version, "1", "Correct version");
199 is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
200 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
201 ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
202
203 is(objectStore.indexNames.length, 2, "Correct indexNames length");
204 ok(objectStore.indexNames.contains("dontDeleteMe"), "Has correct index");
205 ok(objectStore.indexNames.contains("baz"), "Has correct index");
206
207 is(createdObjectStore.indexNames.length, 0, "Correct indexNames length");
208
209 is(deletedObjectStore.indexNames.length, 1, "Correct indexNames length");
210 ok(deletedObjectStore.indexNames.contains("foo"), "Has correct index");
211
212 request.onerror = grabEventAndContinueHandler;
213
214 event = yield undefined;
215
216 finishTest();
217 yield undefined;
218 }
219 </script>
220
221 </head>
222
223 <body onload="testGenerator.next();"></body>
224
225 </html>

mercurial