tizen beta release
[profile/ivi/webkit-efl.git] / LayoutTests / storage / indexeddb / two-version-changes.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 behavior when the same connection calls setVersion twice");
12 if (window.layoutTestController)
13     layoutTestController.waitUntilDone();
14
15
16 function test() {
17     indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
18     IDBTransaction = evalAndLog("IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.mozIDBTransaction;");
19
20     shouldBeFalse("indexedDB == null");
21     shouldBeFalse("IDBTransaction == null");
22     openDBConnection();
23 }
24
25 function openDBConnection()
26 {
27     evalAndLog("window.state = 'starting'");
28     var request = evalAndLog("indexedDB.open('two-versions-one-connection')");
29     request.onsuccess = openSuccess;
30     request.onerror = unexpectedErrorCallback;
31 }
32
33 function openSuccess()
34 {
35     window.db = evalAndLog("db = event.target.result");
36     evalAndLog("window.state = 0");
37
38     var versionChangeRequest1 = evalAndLog("db.setVersion('version 1')");
39     versionChangeRequest1.onerror = unexpectedErrorCallback;
40     versionChangeRequest1.onsuccess = inSetVersion1;
41
42     // and concurrently...
43
44     var versionChangeRequest2 = evalAndLog("db.setVersion('version 2')");
45     versionChangeRequest2.onerror = unexpectedErrorCallback;
46     versionChangeRequest2.onsuccess = inSetVersion2;
47 }
48
49 function inSetVersion1()
50 {
51     debug("setVersion() #1 callback");
52     evalAndLog("window.store1 = db.createObjectStore('test-store1')");
53     shouldBe("++window.state", "1");
54     var req = evalAndLog("window.store1.put('aaa', 111)");
55     req.onerror = unexpectedErrorCallback;
56     req.onsuccess = function (e) {
57         shouldBe("++window.state", "2");
58         halfwayDone();
59     };
60 }
61
62 function inSetVersion2()
63 {
64     debug("setVersion() #2 callback");
65     shouldBe("++window.state", "4");
66     evalAndLog("window.store2 = db.createObjectStore('test-store2')");
67
68     var req = evalAndLog("window.store2.put('bbb', 222)");
69     req.onerror = unexpectedErrorCallback;
70     req.onsuccess = function (e) {
71         shouldBe("++window.state", "5");
72         halfwayDone();
73     };
74 }
75
76 var counter = 0;
77 function halfwayDone() 
78 {
79     counter += 1;
80     if (counter < 2) {
81         shouldBe("++window.state", "3");
82         debug("halfway there..." );
83     } else {
84         shouldBe("++window.state", "6");
85         checkResults();
86     }
87 }
88
89 function checkResults() {
90     shouldBeEqualToString("window.db.version", "version 2");
91     trans = evalAndLog("window.trans = db.transaction(['test-store1', 'test-store2'])");
92     store = evalAndLog("window.store = window.trans.objectStore('test-store1')");
93     req = evalAndLog("window.req = window.store.get(111)");
94     req.onerror = unexpectedErrorCallback;
95     req.onsuccess = function (e) {
96         shouldBeEqualToString("event.target.result", "aaa");
97
98         store = evalAndLog("window.store = window.trans.objectStore('test-store2')");
99         req = evalAndLog("window.req = window.store.get(222)");
100         req.onerror = unexpectedErrorCallback;
101         req.onsuccess = function (e) {
102             shouldBeEqualToString("event.target.result", "bbb");
103             done();    
104         };
105     };
106 }
107
108
109 test();
110
111 </script>
112 </body>
113 </html>