tizen beta release
[profile/ivi/webkit-efl.git] / LayoutTests / storage / indexeddb / duplicates.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("Verify that you can put the same data in 2 different databases without uniqueness constraints firing.");
12 if (window.layoutTestController) 
13     layoutTestController.waitUntilDone();
14
15 testCount = 0;
16 function test()
17 {
18     if (testCount++ == 0)
19         request = evalAndLog("webkitIndexedDB.open('duplicates-1')");
20     else
21         request = evalAndLog("webkitIndexedDB.open('duplicates-2')");
22     request.onsuccess = setVersion;
23     request.onerror = unexpectedErrorCallback;
24 }
25
26 function setVersion()
27 {
28     db = evalAndLog("db = event.target.result");
29
30     request = evalAndLog("db.setVersion('new version')");
31     request.onsuccess = deleteExisting;
32     request.onerror = unexpectedErrorCallback;
33 }
34
35 function deleteExisting()
36 {
37     debug("setVersionSuccess():");
38     window.trans = evalAndLog("trans = event.target.result");
39     shouldBeTrue("trans !== null");
40     trans.onabort = unexpectedAbortCallback;
41
42     deleteAllObjectStores(db);
43
44     window.store = evalAndLog("db.createObjectStore('storeName', null)");
45     window.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
46     addData();
47 }
48
49 function addData()
50 {
51     request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
52     request.onsuccess = addMore;
53     request.onerror = unexpectedErrorCallback;
54 }
55
56 function addMore()
57 {
58     request = evalAndLog("event.target.source.add({x: 'value2', y: 'zzz2'}, 'key2')");
59     request.onsuccess = getData;
60     request.onerror = unexpectedErrorCallback;
61 }
62
63 function getData()
64 {
65     request = evalAndLog("indexObject.getKey('value')");
66     request.onsuccess = getObjectData;
67     request.onerror = unexpectedErrorCallback;
68 }
69
70 function getObjectData()
71 {
72     shouldBeEqualToString("event.target.result", "key");
73
74     request = evalAndLog("indexObject.get('value')");
75     request.onsuccess = getDataFail;
76     request.onerror = unexpectedErrorCallback;
77 }
78
79 function getDataFail()
80 {
81     shouldBeEqualToString("event.target.result.x", "value");
82     shouldBeEqualToString("event.target.result.y", "zzz");
83
84     request = evalAndLog("indexObject.getKey('does not exist')");
85     request.onsuccess = unexpectedSuccessCallback;
86     request.onerror = getObjectDataFail;
87 }
88
89 function getObjectDataFail()
90 {
91     shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
92
93     evalAndLog("event.preventDefault()");
94
95     request = evalAndLog("indexObject.get('does not exist')");
96     request.onsuccess = unexpectedSuccessCallback;
97     request.onerror = openKeyCursor;
98 }
99
100 function openKeyCursor()
101 {
102     shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
103
104     evalAndLog("event.preventDefault()");
105
106     window.request = evalAndLog("indexObject.openKeyCursor()");
107     request.onsuccess = cursor1Continue;
108     request.onerror = unexpectedErrorCallback;
109 }
110
111 function cursor1Continue()
112 {
113     shouldBeFalse("event.target.result === null");
114     shouldBeEqualToString("event.target.result.key", "value");
115     shouldBeEqualToString("event.target.result.primaryKey", "key");
116
117     // We re-use the last request object.
118     evalAndLog("event.target.result.continue()");
119     window.request.onsuccess = cursor1Continue2;
120 }
121
122 function cursor1Continue2()
123 {
124     shouldBeFalse("event.target.result === null");
125     shouldBeEqualToString("event.target.result.key", "value2");
126     shouldBeEqualToString("event.target.result.primaryKey", "key2");
127
128     // We re-use the last request object.
129     evalAndLog("event.target.result.continue()");
130     window.request.onsuccess = openObjectCursor;
131 }
132
133 function openObjectCursor()
134 {
135     shouldBeTrue("event.target.result === null");
136
137     window.request = evalAndLog("indexObject.openCursor()");
138     request.onsuccess = cursor2Continue;
139     request.onerror = unexpectedErrorCallback;
140 }
141
142 function cursor2Continue()
143 {
144     shouldBeFalse("event.target.result === null");
145     shouldBeEqualToString("event.target.result.key", "value");
146     shouldBeEqualToString("event.target.result.value.x", "value");
147     shouldBeEqualToString("event.target.result.value.y", "zzz");
148
149     // We re-use the last request object.
150     evalAndLog("event.target.result.continue()");
151     window.request.onsuccess = cursor2Continue2;
152 }
153
154 function cursor2Continue2()
155 {
156     shouldBeFalse("event.target.result === null");
157     shouldBeEqualToString("event.target.result.key", "value2");
158     shouldBeEqualToString("event.target.result.value.x", "value2");    
159     shouldBeEqualToString("event.target.result.value.y", "zzz2");
160
161     // We re-use the last request object.
162     evalAndLog("event.target.result.continue()");
163     window.request.onsuccess = last;
164 }
165
166 function last()
167 {
168     shouldBeTrue("event.target.result === null");
169
170     if (testCount == 1)
171         test();
172     else
173         done();
174 }
175
176 test();
177
178
179 </script>
180 </body>
181 </html>