| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test IndexedDB persistence"); |
| |
| indexedDBTest(prepareDatabase, unexpectedSuccessCallback); |
| function prepareDatabase() |
| { |
| request = event.target; |
| var db = request.result; |
| var trans = request.transaction; |
| trans.abort(); |
| request.onerror = function() { |
| db.close(); |
| first(); |
| }; |
| } |
| |
| function first() |
| { |
| openAndChangeVersion(1, function (connection) { |
| db = connection; |
| shouldBe("db.version", "1"); |
| shouldBe("db.objectStoreNames.length", "0"); |
| evalAndLog("db.createObjectStore('store1')"); |
| shouldBe("db.objectStoreNames.length", "1"); |
| }, second); |
| } |
| |
| function second() |
| { |
| openAndChangeVersion(2, function (connection) { |
| db = connection; |
| shouldBe("db.version", "2"); |
| shouldBe("db.objectStoreNames.length", "1"); |
| shouldBeTrue("db.objectStoreNames.contains('store1')"); |
| evalAndLog("db.createObjectStore('store2')"); |
| shouldBe("db.objectStoreNames.length", "2"); |
| shouldBeTrue("db.objectStoreNames.contains('store1')"); |
| shouldBeTrue("db.objectStoreNames.contains('store2')"); |
| }, third); |
| } |
| |
| function third() |
| { |
| openAndChangeVersion(3, function (connection) { |
| db = connection; |
| shouldBe("db.version", "3"); |
| shouldBe("db.objectStoreNames.length", "2"); |
| shouldBeTrue("db.objectStoreNames.contains('store1')"); |
| shouldBeTrue("db.objectStoreNames.contains('store2')"); |
| evalAndLog("db.deleteObjectStore('store1')"); |
| shouldBe("db.objectStoreNames.length", "1"); |
| shouldBeFalse("db.objectStoreNames.contains('store1')"); |
| shouldBeTrue("db.objectStoreNames.contains('store2')"); |
| }, fourth); |
| } |
| |
| function fourth() |
| { |
| openAndChangeVersion(4, function (connection) { |
| db = connection; |
| shouldBe("db.version", "4"); |
| shouldBe("db.objectStoreNames.length", "1"); |
| shouldBeFalse("db.objectStoreNames.contains('store1')"); |
| shouldBeTrue("db.objectStoreNames.contains('store2')"); |
| evalAndLog("db.deleteObjectStore('store2')"); |
| shouldBe("db.objectStoreNames.length", "0"); |
| shouldBeFalse("db.objectStoreNames.contains('store1')"); |
| shouldBeFalse("db.objectStoreNames.contains('store2')"); |
| }, fifth); |
| } |
| |
| function fifth() |
| { |
| openAndChangeVersion(5, function (connection) { |
| db = connection; |
| shouldBe("db.version", "5"); |
| shouldBe("db.objectStoreNames.length", "0"); |
| shouldBeFalse("db.objectStoreNames.contains('store1')"); |
| shouldBeFalse("db.objectStoreNames.contains('store2')"); |
| }, finishJSTest); |
| } |
| |
| |
| function openAndChangeVersion(version, callback, next) |
| { |
| debug(""); |
| evalAndLog("request = indexedDB.open(dbname, " + version + ")"); |
| request.onblocked = unexpectedBlockedCallback; |
| request.onerror = unexpectedErrorCallback; |
| request.onupgradeneeded = function () { |
| evalAndLog("db = request.result"); |
| shouldBeNonNull("db"); |
| callback(db); |
| }; |
| request.onsuccess = function() { |
| evalAndLog("db.close()"); |
| next(); |
| } |
| } |