jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 1 | <html>
|
| 2 | <head>
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 3 | <script src="../../fast/js/resources/js-test-pre.js"></script>
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 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 IndexedDB transaction basics.");
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 12 |
|
| 13 | function test()
|
| 14 | {
|
| 15 | shouldBeTrue("'webkitIndexedDB' in window");
|
| 16 | shouldBeFalse("webkitIndexedDB == null");
|
| 17 |
|
hans@chromium.org | 14574ca | 2011-02-23 18:34:53 +0000 | [diff] [blame] | 18 | request = evalAndLog("webkitIndexedDB.open('transaction-basics')");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 19 | request.onsuccess = openSuccess;
|
| 20 | request.onerror = unexpectedErrorCallback;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 21 | }
|
| 22 |
|
| 23 | function openSuccess()
|
| 24 | {
|
| 25 | debug("openSuccess():");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 26 | window.db = evalAndLog("db = event.target.result");
|
| 27 | request = evalAndLog("request = db.setVersion('version 1')");
|
| 28 | request.onsuccess = cleanDatabase;
|
| 29 | request.onerror = unexpectedErrorCallback;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 30 | }
|
| 31 |
|
| 32 | function cleanDatabase()
|
| 33 | {
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 34 | deleteAllObjectStores(db, checkMetadataEmpty);
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 35 | event.target.result.oncomplete = testSetVersionAbort1;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 36 | }
|
| 37 |
|
| 38 | function testSetVersionAbort1()
|
| 39 | {
|
| 40 | checkMetadataEmpty();
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 41 | request = evalAndLog("request = startSetVersion('version fail')");
|
| 42 | request.onsuccess = addRemoveIDBObjects;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 43 | }
|
| 44 |
|
| 45 | function addRemoveIDBObjects()
|
| 46 | {
|
| 47 | debug("addRemoveIDBObjects():");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 48 | var trans = evalAndLog("trans = event.target.result");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 49 | shouldBeTrue("trans !== null");
|
jorlow@chromium.org | 0bffcbf | 2011-02-09 02:14:11 +0000 | [diff] [blame] | 50 | trans.addEventListener('abort', testSetVersionAbort2, true);
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 51 | trans.oncomplete = unexpectedCompleteCallback;
|
| 52 |
|
| 53 | var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
|
| 54 | var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
|
| 55 |
|
andreip@google.com | 7e71883 | 2010-11-26 16:58:57 +0000 | [diff] [blame] | 56 | evalAndLog("db.deleteObjectStore('storeFail')");
|
| 57 | evalAndLog("store.deleteIndex('indexFail')");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 58 |
|
| 59 | trans.abort();
|
| 60 | }
|
| 61 |
|
| 62 | function testSetVersionAbort2()
|
| 63 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 64 | debug("");
|
| 65 | debug("testSetVersionAbort2():");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 66 | checkMetadataEmpty();
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 67 | request = evalAndLog("request = startSetVersion('version fail')");
|
| 68 | request.onsuccess = addRemoveAddIDBObjects;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 69 | }
|
| 70 |
|
| 71 | function addRemoveAddIDBObjects()
|
| 72 | {
|
| 73 | debug("addRemoveAddIDBObjects():");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 74 | var trans = evalAndLog("trans = event.target.result");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 75 | shouldBeTrue("trans !== null");
|
jorlow@chromium.org | 0bffcbf | 2011-02-09 02:14:11 +0000 | [diff] [blame] | 76 | trans.addEventListener('abort', testSetVersionAbort3, false);
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 77 | trans.oncomplete = unexpectedCompleteCallback;
|
| 78 |
|
| 79 | var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
|
| 80 | var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
|
| 81 |
|
andreip@google.com | 7e71883 | 2010-11-26 16:58:57 +0000 | [diff] [blame] | 82 | evalAndLog("db.deleteObjectStore('storeFail')");
|
| 83 | evalAndLog("store.deleteIndex('indexFail')");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 84 |
|
| 85 | var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
|
| 86 | var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
|
| 87 |
|
| 88 | trans.abort();
|
| 89 | }
|
| 90 |
|
| 91 | function testSetVersionAbort3()
|
| 92 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 93 | debug("");
|
| 94 | debug("testSetVersionAbort3():");
|
jorlow@chromium.org | 6357cfc | 2011-03-01 20:37:25 +0000 | [diff] [blame] | 95 | shouldBeFalse("event.cancelable");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 96 | checkMetadataEmpty();
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 97 | request = evalAndLog("request = startSetVersion('version fail')");
|
| 98 | request.onsuccess = addIDBObjects;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 99 | }
|
| 100 |
|
| 101 | function addIDBObjects()
|
| 102 | {
|
| 103 | debug("addIDBObjects():");
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 104 | shouldBeFalse("event.cancelable");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 105 | var trans = evalAndLog("trans = event.target.result");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 106 | shouldBeTrue("trans !== null");
|
| 107 | trans.onabort = testSetVersionAbort4;
|
| 108 | trans.oncomplete = unexpectedCompleteCallback;
|
| 109 |
|
| 110 | var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
|
| 111 | var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
|
| 112 |
|
| 113 | trans.abort();
|
| 114 | }
|
| 115 |
|
| 116 | function testSetVersionAbort4()
|
| 117 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 118 | debug("");
|
| 119 | debug("testSetVersionAbort4():");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 120 | checkMetadataEmpty();
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 121 | request = evalAndLog("request = startSetVersion('version fail')");
|
| 122 | request.onsuccess = addIDBObjectsAndCommit;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 123 | }
|
| 124 |
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 125 | function addIDBObjectsAndCommit()
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 126 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 127 | debug("addIDBObjectsAndCommit():");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 128 | var trans = evalAndLog("trans = event.target.result");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 129 | shouldBeTrue("trans !== null");
|
| 130 | trans.onabort = unexpectedAbortCallback;
|
| 131 |
|
| 132 | var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
|
| 133 | var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
|
| 134 |
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 135 | trans.oncomplete = testSetVersionAbort5;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 136 | }
|
| 137 |
|
| 138 | function testSetVersionAbort5()
|
| 139 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 140 | debug("");
|
| 141 | debug("testSetVersionAbort5():");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 142 | checkMetadataExistingObjectStore();
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 143 | request = evalAndLog("request = startSetVersion('version fail')");
|
| 144 | request.onsuccess = removeIDBObjects;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 145 | }
|
| 146 |
|
| 147 | function removeIDBObjects()
|
| 148 | {
|
| 149 | debug("removeIDBObjects():");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 150 | var trans = evalAndLog("trans = event.target.result");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 151 | shouldBeTrue("trans !== null");
|
| 152 | trans.onabort = testSetVersionAbort6;
|
| 153 | trans.oncomplete = unexpectedCompleteCallback;
|
| 154 |
|
| 155 | var store = evalAndLog("store = trans.objectStore('storeFail')");
|
andreip@google.com | 7e71883 | 2010-11-26 16:58:57 +0000 | [diff] [blame] | 156 | evalAndLog("store.deleteIndex('indexFail')");
|
| 157 | evalAndLog("db.deleteObjectStore('storeFail')");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 158 |
|
| 159 | trans.abort();
|
| 160 | }
|
| 161 |
|
| 162 | function testSetVersionAbort6()
|
| 163 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 164 | debug("");
|
| 165 | debug("testSetVersionAbort6():");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 166 | checkMetadataExistingObjectStore();
|
| 167 | setNewVersion();
|
| 168 | }
|
| 169 |
|
| 170 | function startSetVersion(versionName)
|
| 171 | {
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 172 | request = db.setVersion(versionName);
|
| 173 | request.onerror = unexpectedErrorCallback;
|
| 174 | return request;
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 175 | }
|
| 176 |
|
| 177 | function checkMetadataEmpty()
|
| 178 | {
|
hans@chromium.org | dccbdc6 | 2010-11-26 11:03:59 +0000 | [diff] [blame] | 179 | shouldBe("window.db.objectStoreNames", "[]");
|
| 180 | shouldBe("window.db.objectStoreNames.length", "0");
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 181 | shouldBe("window.db.objectStoreNames.contains('storeFail')", "false");
|
andreip@google.com | 1b2e471 | 2010-10-06 22:52:22 +0000 | [diff] [blame] | 182 | }
|
| 183 |
|
| 184 | function checkMetadataExistingObjectStore()
|
| 185 | {
|
hans@chromium.org | dccbdc6 | 2010-11-26 11:03:59 +0000 | [diff] [blame] | 186 | shouldBe("db.objectStoreNames", "['storeFail']");
|
| 187 | shouldBe("db.objectStoreNames.length", "1");
|
| 188 | shouldBe("db.objectStoreNames.contains('storeFail')", "true");
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 189 | }
|
| 190 |
|
| 191 | function setNewVersion()
|
| 192 | {
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 193 | request = evalAndLog("db.setVersion('new version')");
|
| 194 | request.onsuccess = setVersionSuccess;
|
| 195 | request.onerror = unexpectedErrorCallback;
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 196 | }
|
| 197 |
|
| 198 | function setVersionSuccess()
|
| 199 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 200 | debug("");
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 201 | debug("setVersionSuccess():");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 202 | window.trans = evalAndLog("trans = event.target.result");
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 203 | shouldBeTrue("trans !== null");
|
| 204 | trans.onabort = unexpectedAbortCallback;
|
jorlow@chromium.org | 0bffcbf | 2011-02-09 02:14:11 +0000 | [diff] [blame] | 205 | trans.addEventListener('complete', completeCallback, false);
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 206 | window.completeEventFired = false;
|
| 207 |
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 208 | deleteAllObjectStores(db);
|
andreip@google.com | 85ba10d | 2010-10-05 17:10:39 +0000 | [diff] [blame] | 209 |
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 210 | evalAndLog("db.createObjectStore('storeName', null)");
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 211 | }
|
| 212 |
|
| 213 | function completeCallback()
|
| 214 | {
|
jorlow@chromium.org | 6357cfc | 2011-03-01 20:37:25 +0000 | [diff] [blame] | 215 | shouldBeFalse("event.cancelable");
|
jorlow@chromium.org | addb46f | 2011-02-15 01:18:57 +0000 | [diff] [blame] | 216 | testPassed("complete event fired");
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 217 | transaction = evalAndLog("db.transaction(['storeName'])");
|
| 218 | transaction.onabort = abortCallback;
|
| 219 | var store = evalAndLog("store = transaction.objectStore('storeName')");
|
| 220 | shouldBeEqualToString("store.name", "storeName");
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 221 | }
|
| 222 |
|
| 223 | function abortCallback()
|
| 224 | {
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 225 | testPassed("abort event fired");
|
commit-queue@webkit.org | 99c3522 | 2011-12-16 04:23:15 +0000 | [diff] [blame] | 226 | testDOMStringList();
|
| 227 | }
|
| 228 |
|
| 229 | function testDOMStringList()
|
| 230 | {
|
| 231 | debug("");
|
| 232 | debug("Verifying DOMStringList works as argument for IDBDatabase.transaction()");
|
| 233 | debug("db.objectStoreNames is " + db.objectStoreNames);
|
| 234 | debug("... which contains: " + JSON.stringify(Array.prototype.slice.call(db.objectStoreNames)));
|
| 235 | evalAndLog("transaction = db.transaction(db.objectStoreNames)");
|
| 236 | testPassed("no exception thrown");
|
| 237 | for (var i = 0; i < db.objectStoreNames.length; ++i) {
|
| 238 | shouldBeTrue("transaction.objectStore(" + JSON.stringify(db.objectStoreNames[i]) + ") != null");
|
| 239 | }
|
| 240 | testPassed("all stores present in transaction");
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 241 | finishJSTest();
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 242 | }
|
| 243 |
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 244 | var jsTestIsAsync = true;
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 245 | test();
|
| 246 |
|
| 247 | </script>
|
dgrogan@chromium.org | a050843 | 2011-11-30 09:07:29 +0000 | [diff] [blame] | 248 | <script src="../../fast/js/resources/js-test-post.js"></script>
|
jorlow@chromium.org | d189d2c | 2011-01-12 10:40:39 +0000 | [diff] [blame] | 249 | </body>
|
| 250 | </html>
|