tizen beta release
[framework/web/webkit-efl.git] / LayoutTests / storage / indexeddb / version-change-abort.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 <script src="resources/shared.js"></script>
6 </head>
7 <body>
8 <p id="description"></p>
9 <div id="console"></div>
10 <script>
11
12 description("Ensure that aborted VERSION_CHANGE transactions are completely rolled back");
13 if (window.layoutTestController)
14     layoutTestController.waitUntilDone();
15
16
17 function test() {
18     evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
19     evalAndLog("IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;");
20     shouldBeFalse("indexedDB == null");
21     shouldBeFalse("IDBTransaction == null");
22     debug("");
23     openDBConnection();
24 }
25
26 function openDBConnection()
27 {
28     request = evalAndLog("indexedDB.open('version-change-abort')");
29     request.onsuccess = openSuccess;
30     request.onerror = unexpectedErrorCallback;
31 }
32
33 function openSuccess()
34 {
35     window.db = evalAndLog("db = event.target.result");
36     debug("");
37
38     evalAndLog("vcreq = db.setVersion('version 1')");
39     vcreq.onsuccess = inSetVersion1;
40     vcreq.onerror = unexpectedErrorCallback;
41 }
42
43 function inSetVersion1()
44 {
45     debug("setVersion1() callback");
46     shouldBeTrue("vcreq.result instanceof IDBTransaction");
47     trans = vcreq.result;
48     trans.onabort = unexpectedAbortCallback;
49     trans.onerror = unexpectedErrorCallback;
50     trans.oncomplete = setVersion1Complete;
51
52     evalAndLog("store = db.createObjectStore('store1')");
53 }
54
55 function setVersion1Complete()
56 {
57     debug("setVersion1 complete");
58     shouldBeEqualToString("db.version", "version 1");
59     debug("");
60
61     evalAndLog("vcreq = db.setVersion('version 2')");
62     vcreq.onsuccess = inSetVersion2;
63     vcreq.onerror = unexpectedErrorCallback;
64 }
65
66 function inSetVersion2()
67 {
68     debug("setVersion2() callback");
69     shouldBeEqualToString("db.version", "version 2");
70     shouldBeTrue("vcreq.result instanceof IDBTransaction");
71     trans = vcreq.result;
72     trans.onabort = setVersion2Abort;
73     trans.onerror = unexpectedErrorCallback;
74     trans.oncomplete = unexpectedCompleteCallback;
75
76     evalAndLog("store = db.deleteObjectStore('store1')");
77     evalAndLog("store = db.createObjectStore('store2')");
78
79     // Ensure the test harness error handler is not invoked.
80     window.originalWindowOnError = window.onerror;
81     window.onerror = null;
82
83     debug("raising exception");
84     throw new Error("This should *NOT* be caught!");
85 }
86
87 function setVersion2Abort()
88 {
89     debug("");
90     debug("setVersion2Abort() callback");
91
92     // Restore test harness error handler.
93     window.onerror = window.originalWindowOnError;
94
95     shouldBeEqualToString("db.version", "version 1");
96     shouldBeTrue("db.objectStoreNames.contains('store1')");
97     shouldBeFalse("db.objectStoreNames.contains('store2')");
98
99     done();
100 }
101
102 test();
103
104 </script>
105 </body>
106 </html>