| if (this.importScripts) { |
| importScripts('../../../resources/js-test.js'); |
| importScripts('shared.js'); |
| } |
| |
| description("Test the basics of IndexedDB's IDBDatabase."); |
| |
| indexedDBTest(prepareDatabase, testSetVersionAbort); |
| function prepareDatabase() |
| { |
| db = event.target.result; |
| debug("Test that you can't open a transaction while in a versionchange transaction"); |
| evalAndExpectException('db.transaction("doesntExist")', |
| "DOMException.INVALID_STATE_ERR", "'InvalidStateError'"); |
| |
| shouldBe("db.version", "1"); |
| shouldBeEqualToString("db.name", dbname); |
| shouldBe("db.objectStoreNames", "[]"); |
| shouldBe("db.objectStoreNames.length", "0"); |
| shouldBe("db.objectStoreNames.contains('')", "false"); |
| shouldBeUndefined("db.objectStoreNames[0]"); |
| shouldBeNull("db.objectStoreNames.item(0)"); |
| |
| objectStore = evalAndLog('db.createObjectStore("test123")'); |
| checkObjectStore(); |
| } |
| |
| function checkObjectStore() |
| { |
| shouldBe("db.objectStoreNames", "['test123']"); |
| shouldBe("db.objectStoreNames.length", "1"); |
| shouldBe("db.objectStoreNames.contains('')", "false"); |
| shouldBe("db.objectStoreNames.contains('test456')", "false"); |
| shouldBe("db.objectStoreNames.contains('test123')", "true"); |
| shouldThrow("db.objectStoreNames.contains()"); |
| } |
| |
| |
| function testSetVersionAbort() |
| { |
| evalAndLog("db.close()"); |
| evalAndLog("request = indexedDB.open(dbname, 2)"); |
| request.onupgradeneeded = createAnotherObjectStore; |
| request.onblocked = unexpectedBlockedCallback; |
| request.onsuccess = unexpectedSuccessCallback; |
| } |
| |
| function createAnotherObjectStore() |
| { |
| evalAndLog("db = event.target.result"); |
| shouldBe("db.version", "2"); |
| shouldBeEqualToString("db.name", dbname); |
| checkObjectStore(); |
| |
| objectStore = evalAndLog('db.createObjectStore("test456")'); |
| var setVersionTrans = evalAndLog("setVersionTrans = event.target.transaction"); |
| shouldBeNonNull("setVersionTrans"); |
| setVersionTrans.oncomplete = unexpectedCompleteCallback; |
| setVersionTrans.onabort = checkMetadata; |
| evalAndLog("setVersionTrans.abort()"); |
| } |
| |
| function checkMetadata() |
| { |
| shouldBe("db.version", "1"); |
| checkObjectStore(); |
| testClose(); |
| } |
| |
| function testClose() |
| { |
| evalAndLog("db.close()"); |
| debug("Now that the connection is closed, transaction creation should fail"); |
| evalAndExpectException("db.transaction('test123')", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'"); |
| debug("Call twice, make sure it's harmless"); |
| evalAndLog("db.close()"); |
| finishJSTest(); |
| } |