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