Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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>
9 <script type="text/javascript;version=1.7">
11 let testGenerator = testSteps();
13 function ok(val, message) {
14 val = val ? "true" : "false";
15 window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
16 "');", "*");
17 }
19 function is(a, b, message) {
20 ok(a == b, message);
21 }
23 function grabEventAndContinueHandler(event) {
24 testGenerator.send(event);
25 }
27 function errorHandler(event) {
28 ok(false, "indexedDB error, code " + event.target.errorCcode);
29 finishTest();
30 }
32 function unexpectedSuccessHandler(event) {
33 ok(false, "got success when it was not expected!");
34 finishTest();
35 }
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 }
47 window.onerror = function(message, filename, lineno) {
48 is(message, "ConstraintError", "Expect a constraint error");
49 };
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;
58 let db = event.target.result;
60 is(db.version, 1, "Correct version");
61 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
63 let trans = event.target.transaction;
65 trans.oncomplete = unexpectedSuccessHandler;
66 trans.onabort = grabEventAndContinueHandler;
68 let objectStore = db.createObjectStore("foo");
70 is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
71 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
73 let originalRequest = request;
74 request = objectStore.add({}, 1);
75 request.onsuccess = grabEventAndContinueHandler;
76 request.onerror = errorHandler;
77 event = yield undefined;
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;
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");
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");
99 let request = indexedDB.open(window.location.pathname, 1);
100 request.onerror = errorHandler;
101 request.onupgradeneeded = grabEventAndContinueHandler;
102 let event = yield undefined;
104 let db = event.target.result;
106 event.target.transaction.oncomplete = grabEventAndContinueHandler;
107 event.target.transaction.onabort = unexpectedSuccessHandler;
109 is(db.version, "1", "Correct version");
110 is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");
112 let objectStore = db.createObjectStore("foo");
114 is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
115 ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");
117 objectStore.createIndex("baz", "key.path");
118 objectStore.createIndex("dontDeleteMe", "");
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");
124 let objectStoreForDeletion = db.createObjectStore("bar");
126 is(db.objectStoreNames.length, 2, "Correct objectStoreNames length");
127 ok(db.objectStoreNames.contains("bar"), "Has correct objectStore");
129 objectStoreForDeletion.createIndex("foo", "key.path");
131 is(objectStoreForDeletion.indexNames.length, 1, "Correct indexNames length");
132 ok(objectStoreForDeletion.indexNames.contains("foo"), "Has correct index");
134 request = objectStore.add({}, 1);
135 request.onsuccess = grabEventAndContinueHandler;
136 request.onerror = errorHandler;
137 event = yield undefined;
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;
147 is(event.type, "complete", "Got a transaction complete event");
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");
154 db.close();
156 let request = indexedDB.open(window.location.pathname, 2);
157 request.onerror = errorHandler;
158 request.onupgradeneeded = grabEventAndContinueHandler;
159 let event = yield undefined;
161 let db = event.target.result;
163 let trans = event.target.transaction;
164 trans.oncomplete = unexpectedSuccessHandler;
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");
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");
177 createdObjectStore.createIndex("newIndex", "key.path");
178 objectStore.createIndex("newIndex", "key.path");
179 objectStore.deleteIndex("baz");
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");
185 is(createdObjectStore.indexNames.length, 1, "Correct indexNames length");
186 ok(createdObjectStore.indexNames.contains("newIndex"), "Has correct index");
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");
192 objectStore.add({}, 1);
193 trans.onabort = grabEventAndContinueHandler;
195 event = yield undefined;
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");
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");
207 is(createdObjectStore.indexNames.length, 0, "Correct indexNames length");
209 is(deletedObjectStore.indexNames.length, 1, "Correct indexNames length");
210 ok(deletedObjectStore.indexNames.contains("foo"), "Has correct index");
212 request.onerror = grabEventAndContinueHandler;
214 event = yield undefined;
216 finishTest();
217 yield undefined;
218 }
219 </script>
221 </head>
223 <body onload="testGenerator.next();"></body>
225 </html>