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