Test the basics of IndexedDB's IDBDatabase.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;

indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
Test that you can't open a transaction while in a versionchange transaction
Expecting exception from db.transaction("doesntExist")
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'transaction' on 'IDBDatabase': A version change transaction is running.
PASS db.version is 1
PASS db.name is "database-basics.html"
PASS db.objectStoreNames is []
PASS db.objectStoreNames.length is 0
PASS db.objectStoreNames.contains('') is false
PASS db.objectStoreNames[0] is undefined.
PASS db.objectStoreNames.item(0) is null
db.createObjectStore("test123")
PASS db.objectStoreNames is ['test123']
PASS db.objectStoreNames.length is 1
PASS db.objectStoreNames.contains('') is false
PASS db.objectStoreNames.contains('test456') is false
PASS db.objectStoreNames.contains('test123') is true
PASS db.objectStoreNames.contains() threw exception TypeError: Not enough arguments.
db.close()
request = indexedDB.open(dbname, 2)
db = event.target.result
PASS db.version is 2
PASS db.name is "database-basics.html"
PASS db.objectStoreNames is ['test123']
PASS db.objectStoreNames.length is 1
PASS db.objectStoreNames.contains('') is false
PASS db.objectStoreNames.contains('test456') is false
PASS db.objectStoreNames.contains('test123') is true
PASS db.objectStoreNames.contains() threw exception TypeError: Not enough arguments.
db.createObjectStore("test456")
setVersionTrans = event.target.transaction
PASS setVersionTrans is non-null.
setVersionTrans.abort()
PASS db.version is 1
PASS db.objectStoreNames is ['test123']
PASS db.objectStoreNames.length is 1
PASS db.objectStoreNames.contains('') is false
PASS db.objectStoreNames.contains('test456') is false
PASS db.objectStoreNames.contains('test123') is true
PASS db.objectStoreNames.contains() threw exception TypeError: Not enough arguments.
db.close()
Now that the connection is closed, transaction creation should fail
Expecting exception from db.transaction('test123')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
Call twice, make sure it's harmless
db.close()
PASS successfullyParsed is true

TEST COMPLETE

