Test closing a database connection in IndexedDB.

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)
store = db.createObjectStore('store')
request = store.put('x', 'y')
PASS Put success
running first transaction
currentTransaction = db.transaction(['store'], 'readwrite')
objectStore.put('a', 'b')
db.close()
Expecting exception from db.transaction(['store'], 'readwrite')
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.

verify that we can reopen the db after calling close
indexedDB.open(dbname)
second_db = event.target.result
currentTransaction = second_db.transaction(['store'], 'readwrite')
request = store.put('1', '2')
PASS final put success
PASS successfullyParsed is true

TEST COMPLETE

