72ad36a29d9b18598f828b688832ba709b8c03ac
[WebKit-https.git] / LayoutTests / storage / indexeddb / modern / resources / aborted-put.js
1 description("This test creates some object stores, putting some values in them, committing the transaction. \
2 In a new transaction, it then overwrites those values, but then aborts the transaction. \
3 Finally it verifies everything is set up from the first transaction, and nothing from the aborted one committed.");
4
5 if (window.testRunner) {
6     testRunner.waitUntilDone();
7     testRunner.dumpAsText();
8 }
9
10 var request = window.indexedDB.open("AbortedPutTestDatabase");
11
12 function done()
13 {
14     finishJSTest();
15 }
16
17 request.onupgradeneeded = function(event)
18 {
19     debug("ALERT: " + "First upgrade needed: Old version - " + event.oldVersion + " New version - " + event.newVersion);
20     
21     var tx = request.transaction;
22     var db = event.target.result;
23
24     debug("ALERT: " + tx + " - " + tx.mode);
25     debug("ALERT: " + db);
26
27     var os1 = db.createObjectStore("TestObjectStore1");
28     var os2 = db.createObjectStore("TestObjectStore2");
29
30     var putRequest = os1.put("bar", "foo");
31     
32     putRequest.onsuccess = function(event) {
33         debug("ALERT: " + "put succeeded - key was '" + putRequest.result + "'");
34         
35         var getRequest1 = os1.get("foo");
36         getRequest1.onsuccess = function(event) {
37             debug("ALERT: " + "get 'foo' succeeded - value was '" + getRequest1.result + "'");
38         }
39
40         getRequest1.onerror = function(event) {
41             debug("ALERT: " + "get 'foo' unexpectedly failed - " + event);
42             done();
43         }
44         
45         var getRequest2 = os2.get("far");
46         getRequest2.onsuccess = function(event) {
47             debug("ALERT: " + "get 'far' succeeded - value was '" + getRequest2.result + "'");
48         }
49
50         getRequest2.onerror = function(event) {
51             debug("ALERT: " + "get 'far' unexpectedly failed - " + event);
52             done();
53         }
54     }
55
56     putRequest.onerror = function(event) {
57         debug("ALERT: " + "put unexpectedly failed - " + event);
58         done();
59     }
60     
61     tx.onabort = function(event) {
62         debug("ALERT: " + "First version change transaction unexpected abort");
63         done();
64     }
65
66     tx.oncomplete = function(event) {
67         debug("ALERT: " + "First version change transaction completed");
68         db.close();
69         continueTest1();
70     }
71
72     tx.onerror = function(event) {
73         debug("ALERT: " + "First version change transaction unexpected error - " + event);
74         done();
75     }
76 }
77
78 function continueTest1()
79 {
80     var request = window.indexedDB.open("AbortedPutTestDatabase", 2);
81
82     request.onupgradeneeded = function(event) {
83         debug("ALERT: " + "Second upgrade needed: Old version - " + event.oldVersion + " New version - " + event.newVersion);
84     
85         var tx = request.transaction;
86         var db = event.target.result;
87
88         debug("ALERT: " + tx + " - " + tx.mode);
89         debug("ALERT: " + db);
90
91         var os1 = tx.objectStore("TestObjectStore1");
92         var os2 = tx.objectStore("TestObjectStore2");
93         var putRequest1 = os1.put("baz", "foo");
94         var putRequest2 = os2.put("boo", "far");
95     
96         putRequest1.onerror = function(e) {
97             debug("ALERT: " + "Unexpected error overwriting bar with baz - " + e);
98             done();
99         }
100
101         putRequest2.onerror = function(e) {
102             debug("ALERT: " + "Writing into second object store unexpectedly failed - " + e);
103             done();
104         }
105         
106         putRequest2.onsuccess = function(e) {
107             var getRequest1 = os1.get("foo");
108             var getRequest2 = os2.get("far");
109             
110             getRequest1.onsuccess = function(event) {
111                 debug("ALERT: " + "get1 'foo' succeeded - value was '" + getRequest1.result + "'");
112             }
113
114             getRequest1.onerror = function(event) {
115                 debug("ALERT: " + "get1 unexpectedly failed - " + event);
116                 done();
117             }
118
119             getRequest2.onsuccess = function(event) {
120                 debug("ALERT: " + "get2 'far' succeeded - value was '" + getRequest2.result + "'");
121                 tx.abort();
122             }
123
124             getRequest2.onerror = function(event) {
125                 debug("ALERT: " + "get2 unexpectedly failed - " + event);
126                 done();
127             }
128         }
129         
130         tx.onabort = function(event) {
131             debug("ALERT: " + "Second version change transaction abort");
132             db.close();
133             continueTest2();
134         }
135
136         tx.oncomplete = function(event) {
137             debug("ALERT: " + "Second version change transaction unexpected complete");
138             done();
139         }
140
141         tx.onerror = function(event) {
142             debug("ALERT: " + "Second version change transaction error - " + event);
143         }
144     }
145 }
146
147 function continueTest2()
148 {
149     var request = window.indexedDB.open("AbortedPutTestDatabase", 2);
150
151     request.onupgradeneeded = function(event) {
152         debug("ALERT: " + "Third upgrade needed: Old version - " + event.oldVersion + " New version - " + event.newVersion);
153     
154         var tx = request.transaction;
155         var db = event.target.result;
156
157         debug("ALERT: " + tx + " - " + tx.mode);
158         debug("ALERT: " + db);
159
160         var os1 = tx.objectStore("TestObjectStore1");
161         var os2 = tx.objectStore("TestObjectStore2");
162         var getRequest1 = os1.get("foo");
163         var getRequest2 = os2.get("far");
164     
165         getRequest1.onsuccess = function(event) {
166             debug("ALERT: " + "get1 'foo' succeeded - value was '" + getRequest1.result + "'");
167         }
168
169         getRequest1.onerror = function(event) {
170             debug("ALERT: " + "get1 'foo' unexpectedly failed - " + event);
171             done();
172         }
173
174         getRequest2.onsuccess = function(event) {
175             debug("ALERT: " + "get2 'far' succeeded - value was '" + getRequest2.result + "'");
176         }
177
178         getRequest2.onerror = function(event) {
179             debug("ALERT: " + "get2 'far' unexpectedly failed - " + event);
180             done();
181         }
182         
183         tx.onabort = function(event) {
184             debug("ALERT: " + "Third version change transaction unexpected abort");
185             done();
186         }
187
188         tx.oncomplete = function(event) {
189             debug("ALERT: " + "Third version change transaction complete");
190             done();
191         }
192
193         tx.onerror = function(event) {
194             debug("ALERT: " + "Third version change transaction unexpected error - " + event);
195             done();
196         }
197     }
198 }