OSDN Git Service

Merge Webkit at r70949: Initial merge by git.
[android-x86/external-webkit.git] / LayoutTests / storage / indexeddb / duplicates.html
1 <html>
2 <head>
3 <link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 <script src="../../fast/js/resources/js-test-post-function.js"></script>
6 <script src="resources/shared.js"></script>
7 </head>
8 <body>
9 <p id="description"></p>
10 <div id="console"></div>
11 <script>
12
13 description("Verify that you can put the same data in 2 different databases without uniqueness constraints firing.");
14 if (window.layoutTestController) 
15     layoutTestController.waitUntilDone();
16
17 testCount = 0;
18 function test()
19 {
20     if (testCount++ == 0)
21         result = evalAndLog("webkitIndexedDB.open('name', 'description')");
22     else
23         result = evalAndLog("webkitIndexedDB.open('name2', 'description2')");
24     verifyResult(result);
25     result.onsuccess = setVersion;
26     result.onerror = unexpectedErrorCallback;
27 }
28
29 function setVersion()
30 {
31     verifySuccessEvent(event);
32     db = evalAndLog("db = event.result");
33
34     result = evalAndLog("db.setVersion('new version')");
35     verifyResult(result);
36     result.onsuccess = deleteExisting;
37     result.onerror = unexpectedErrorCallback;
38 }
39
40 function deleteExisting()
41 {
42     debug("setVersionSuccess():");
43     verifySuccessEvent(event);
44     window.trans = evalAndLog("trans = event.result");
45     shouldBeTrue("trans !== null");
46     trans.onabort = unexpectedAbortCallback;
47
48     deleteAllObjectStores(db, createIndex);
49 }
50
51 function createIndex()
52 {
53     window.store = evalAndLog("db.createObjectStore('storeName', null)");
54     window.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
55     addData();
56 }
57
58 function addData()
59 {
60     result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
61     verifyResult(result);
62     result.onsuccess = addMore;
63     result.onerror = unexpectedErrorCallback;
64 }
65
66 function addMore()
67 {
68     verifySuccessEvent(event);
69
70     result = evalAndLog("event.source.add({x: 'value2', y: 'zzz2'}, 'key2')");
71     verifyResult(result);
72     result.onsuccess = getData;
73     result.onerror = unexpectedErrorCallback;
74 }
75
76 function getData()
77 {
78     verifySuccessEvent(event);
79
80     result = evalAndLog("indexObject.getKey('value')");
81     verifyResult(result);
82     result.onsuccess = getObjectData;
83     result.onerror = unexpectedErrorCallback;
84 }
85
86 function getObjectData()
87 {
88     verifySuccessEvent(event);
89     shouldBeEqualToString("event.result", "key");
90
91     result = evalAndLog("indexObject.get('value')");
92     verifyResult(result);
93     result.onsuccess = getDataFail;
94     result.onerror = unexpectedErrorCallback;
95 }
96
97 function getDataFail()
98 {
99     verifySuccessEvent(event);
100     shouldBeEqualToString("event.result.x", "value");
101     shouldBeEqualToString("event.result.y", "zzz");
102
103     result = evalAndLog("indexObject.getKey('does not exist')");
104     verifyResult(result);
105     result.onsuccess = unexpectedSuccessCallback;
106     result.onerror = getObjectDataFail;
107 }
108
109 function getObjectDataFail()
110 {
111     verifyErrorEvent(event);
112     shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
113
114     result = evalAndLog("indexObject.get('does not exist')");
115     verifyResult(result);
116     result.onsuccess = unexpectedSuccessCallback;
117     result.onerror = openKeyCursor;
118 }
119
120 function openKeyCursor()
121 {
122     verifyErrorEvent(event);
123     shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
124
125     window.result = evalAndLog("indexObject.openKeyCursor()");
126     verifyResult(result);
127     result.onsuccess = cursor1Continue;
128     result.onerror = unexpectedErrorCallback;
129 }
130
131 function cursor1Continue()
132 {
133     verifySuccessEvent(event);
134     shouldBeFalse("event.result === null");
135     shouldBeEqualToString("event.result.key", "value");
136     shouldBeEqualToString("event.result.value", "key");
137
138     // We re-use the last result object.
139     evalAndLog("event.result.continue()");
140     verifyResult(window.result);
141     window.result.onsuccess = cursor1Continue2;
142 }
143
144 function cursor1Continue2()
145 {
146     verifySuccessEvent(event);
147     shouldBeFalse("event.result === null");
148     shouldBeEqualToString("event.result.key", "value2");
149     shouldBeEqualToString("event.result.value", "key2");
150
151     // We re-use the last result object.
152     evalAndLog("event.result.continue()");
153     verifyResult(window.result);
154     window.result.onsuccess = openObjectCursor;
155 }
156
157 function openObjectCursor()
158 {
159     verifySuccessEvent(event);
160     shouldBeTrue("event.result === null");
161
162     window.result = evalAndLog("indexObject.openCursor()");
163     verifyResult(result);
164     result.onsuccess = cursor2Continue;
165     result.onerror = unexpectedErrorCallback;
166 }
167
168 function cursor2Continue()
169 {
170     verifySuccessEvent(event);
171     shouldBeFalse("event.result === null");
172     shouldBeEqualToString("event.result.key", "value");
173     shouldBeEqualToString("event.result.value.x", "value");
174     shouldBeEqualToString("event.result.value.y", "zzz");
175
176     // We re-use the last result object.
177     evalAndLog("event.result.continue()");
178     verifyResult(window.result);
179     window.result.onsuccess = cursor2Continue2;
180 }
181
182 function cursor2Continue2()
183 {
184     verifySuccessEvent(event);
185     shouldBeFalse("event.result === null");
186     shouldBeEqualToString("event.result.key", "value2");
187     shouldBeEqualToString("event.result.value.x", "value2");    
188     shouldBeEqualToString("event.result.value.y", "zzz2");
189
190     // We re-use the last result object.
191     evalAndLog("event.result.continue()");
192     verifyResult(window.result);
193     window.result.onsuccess = last;
194 }
195
196 function last()
197 {
198     verifySuccessEvent(event);
199     shouldBeTrue("event.result === null");
200
201     if (testCount == 1)
202         test();
203     else
204         done();
205 }
206
207 test();
208
209 var successfullyParsed = true;
210
211 </script>
212 </body>
213 </html>