| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test IndexedDB database metadata mutation/snapshotting"); |
| |
| indexedDBTest(prepareDatabase, snapshotConnection1); |
| function prepareDatabase() |
| { |
| connection1 = event.target.result; |
| evalAndLog("connection1store1 = connection1.createObjectStore('store1')"); |
| evalAndLog("connection1store1.createIndex('index1', 'path')"); |
| |
| shouldBe("connection1.version", "1"); |
| shouldBe("connection1.objectStoreNames.length", "1"); |
| shouldBe("connection1store1.indexNames.length", "1"); |
| } |
| |
| function snapshotConnection1() |
| { |
| debug("Connection's properties should be snapshotted on close"); |
| evalAndLog("connection1.close()"); |
| secondOpen(); |
| } |
| |
| function secondOpen() |
| { |
| debug(""); |
| debug("secondOpen():"); |
| evalAndLog("request = indexedDB.open(dbname, 2)"); |
| request.onerror = unexpectedErrorCallback; |
| request.onblocked = unexpectedBlockedCallback; |
| request.onupgradeneeded = function() { |
| evalAndLog("connection2 = request.result"); |
| evalAndLog("trans = request.transaction"); |
| evalAndLog("connection2.createObjectStore('store2')"); |
| evalAndLog("connection2store1 = trans.objectStore('store1')"); |
| evalAndLog("connection2store1.createIndex('index2', 'path')"); |
| |
| shouldBe("connection2.version", "2"); |
| shouldBe("connection2.objectStoreNames.length", "2"); |
| shouldBe("connection2store1.indexNames.length", "2"); |
| }; |
| request.onsuccess = function() { |
| debug("Connection's properties should be snapshotted on close"); |
| evalAndLog("connection2.close()"); |
| thirdOpen(); |
| }; |
| } |
| |
| function thirdOpen() |
| { |
| debug(""); |
| debug("thirdOpen():"); |
| evalAndLog("request = indexedDB.open(dbname, 3)"); |
| request.onsuccess = unexpectedSuccessCallback; |
| request.onupgradeneeded = function() { |
| evalAndLog("connection3 = request.result"); |
| evalAndLog("trans = request.transaction"); |
| evalAndLog("connection3.createObjectStore('store3')"); |
| evalAndLog("connection3store1 = trans.objectStore('store1')"); |
| evalAndLog("connection3store1.createIndex('index3', 'path')"); |
| |
| shouldBe("connection3.version", "3"); |
| shouldBe("connection3.objectStoreNames.length", "3"); |
| shouldBe("connection3store1.indexNames.length", "3"); |
| |
| trans.oncomplete = unexpectedCompleteCallback; |
| debug("Connection's properties should be reverted on abort"); |
| evalAndLog("trans.abort()"); |
| }; |
| request.onerror = function() { |
| debug("Connection's properties should be snapshotted on close"); |
| evalAndLog("connection3.close()"); |
| fourthOpen(); |
| } |
| } |
| |
| function fourthOpen() |
| { |
| debug(""); |
| debug("fourthOpen():"); |
| evalAndLog("request = indexedDB.open(dbname, 4)"); |
| request.onerror = unexpectedErrorCallback; |
| request.onupgradeneeded = function() { |
| evalAndLog("connection4 = request.result"); |
| evalAndLog("trans = request.transaction"); |
| evalAndLog("connection4.createObjectStore('store4')"); |
| evalAndLog("connection4store1 = trans.objectStore('store1')"); |
| evalAndLog("connection4store1.createIndex('index4', 'path')"); |
| |
| shouldBe("connection4.version", "4"); |
| shouldBe("connection4.objectStoreNames.length", "3"); |
| shouldBe("connection4store1.indexNames.length", "3"); |
| }; |
| request.onsuccess = function() { |
| debug("Connection's properties should be snapshotted on close"); |
| evalAndLog("connection4.close()"); |
| checkState(); |
| }; |
| } |
| |
| function checkState() |
| { |
| debug(""); |
| debug("checkState():"); |
| |
| shouldBe("connection1.version", "1"); |
| shouldBe("connection1.objectStoreNames.length", "1"); |
| shouldBe("connection1store1.indexNames.length", "1"); |
| debug(""); |
| |
| shouldBe("connection2.version", "2"); |
| shouldBe("connection2.objectStoreNames.length", "2"); |
| shouldBe("connection2store1.indexNames.length", "2"); |
| debug(""); |
| |
| shouldBe("connection3.version", "2"); |
| shouldBe("connection3.objectStoreNames.length", "2"); |
| shouldBe("connection3store1.indexNames.length", "2"); |
| debug(""); |
| |
| shouldBe("connection4.version", "4"); |
| shouldBe("connection4.objectStoreNames.length", "3"); |
| shouldBe("connection4store1.indexNames.length", "3"); |
| debug(""); |
| |
| finishJSTest(); |
| } |