Test IndexedDB transaction internal active flag.

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')
store.createIndex('index', 'keypath')

runTransaction():
transaction = db.transaction('store', 'readwrite')

Verify that transactions are created with |active| flag set:
store = transaction.objectStore('store')
index = store.index('index')
PASS store.add(0, 0) did not throw exception.
PASS store.put(0, 0) did not throw exception.
PASS store.get(0) did not throw exception.
PASS store.get(IDBKeyRange.only(0)) did not throw exception.
PASS store.delete(0) did not throw exception.
PASS store.delete(IDBKeyRange.only(0)) did not throw exception.
PASS store.count() did not throw exception.
PASS store.count(0) did not throw exception.
PASS store.count(IDBKeyRange.only(0)) did not throw exception.
PASS store.clear() did not throw exception.
PASS store.openCursor() did not throw exception.
PASS store.openCursor(0) did not throw exception.
PASS store.openCursor(0, 'next') did not throw exception.
PASS store.openCursor(IDBKeyRange.only(0)) did not throw exception.
PASS store.openCursor(IDBKeyRange.only(0), 'next') did not throw exception.
PASS index.get(0) did not throw exception.
PASS index.get(IDBKeyRange.only(0)) did not throw exception.
PASS index.getKey(0) did not throw exception.
PASS index.getKey(IDBKeyRange.only(0)) did not throw exception.
PASS index.count() did not throw exception.
PASS index.count(0) did not throw exception.
PASS index.count(IDBKeyRange.only(0)) did not throw exception.
PASS index.openCursor() did not throw exception.
PASS index.openCursor(0) did not throw exception.
PASS index.openCursor(0, 'next') did not throw exception.
PASS index.openCursor(IDBKeyRange.only(0)) did not throw exception.
PASS index.openCursor(IDBKeyRange.only(0), 'next') did not throw exception.
PASS index.openKeyCursor() did not throw exception.
PASS index.openKeyCursor(0) did not throw exception.
PASS index.openKeyCursor(0, 'next') did not throw exception.
PASS index.openKeyCursor(IDBKeyRange.only(0)) did not throw exception.
PASS index.openKeyCursor(IDBKeyRange.only(0), 'next') did not throw exception.

Transaction shouldn't be active inside a non-IDB-event callback
setTimeout(testTimeout, 0)

testTimeout():
store = transaction.objectStore('store')
index = store.index('index')
Expecting exception from store.add(0, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to store record in an IDBObjectStore: The transaction is inactive or finished.
Expecting exception from store.put(0, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to store record in an IDBObjectStore: The transaction is inactive or finished.
Expecting exception from store.get(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'get' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.get(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: A request was placed against a transaction which is currently not active, or which is finished.
Expecting exception from store.delete(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'delete' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.delete(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'delete' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.count()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.count(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.count(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.clear()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'clear' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.openCursor()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.openCursor(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.openCursor(0, 'next')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.openCursor(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from store.openCursor(IDBKeyRange.only(0), 'next')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The transaction is inactive or finished.
Expecting exception from index.get(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'get' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.get(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'get' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.getKey(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'getKey' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.getKey(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'getKey' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.count()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.count(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.count(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openCursor()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openCursor(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openCursor(0, 'next')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openCursor(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openCursor(IDBKeyRange.only(0), 'next')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openKeyCursor()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openKeyCursor(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openKeyCursor(0, 'next')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openKeyCursor(IDBKeyRange.only(0))
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The transaction is inactive or finished.
Expecting exception from index.openKeyCursor(IDBKeyRange.only(0), 'next')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The transaction is inactive or finished.

testEventCallback():
Transaction should be active inside a non-IDB-event callback
store = transaction.objectStore('store')
index = store.index('index')
PASS store.add(0, 0) did not throw exception.
PASS store.put(0, 0) did not throw exception.
PASS store.get(0) did not throw exception.
PASS store.get(IDBKeyRange.only(0)) did not throw exception.
PASS store.delete(0) did not throw exception.
PASS store.delete(IDBKeyRange.only(0)) did not throw exception.
PASS store.count() did not throw exception.
PASS store.count(0) did not throw exception.
PASS store.count(IDBKeyRange.only(0)) did not throw exception.
PASS store.clear() did not throw exception.
PASS store.openCursor() did not throw exception.
PASS store.openCursor(0) did not throw exception.
PASS store.openCursor(0, 'next') did not throw exception.
PASS store.openCursor(IDBKeyRange.only(0)) did not throw exception.
PASS store.openCursor(IDBKeyRange.only(0), 'next') did not throw exception.
PASS index.get(0) did not throw exception.
PASS index.get(IDBKeyRange.only(0)) did not throw exception.
PASS index.getKey(0) did not throw exception.
PASS index.getKey(IDBKeyRange.only(0)) did not throw exception.
PASS index.count() did not throw exception.
PASS index.count(0) did not throw exception.
PASS index.count(IDBKeyRange.only(0)) did not throw exception.
PASS index.openCursor() did not throw exception.
PASS index.openCursor(0) did not throw exception.
PASS index.openCursor(0, 'next') did not throw exception.
PASS index.openCursor(IDBKeyRange.only(0)) did not throw exception.
PASS index.openCursor(IDBKeyRange.only(0), 'next') did not throw exception.
PASS index.openKeyCursor() did not throw exception.
PASS index.openKeyCursor(0) did not throw exception.
PASS index.openKeyCursor(0, 'next') did not throw exception.
PASS index.openKeyCursor(IDBKeyRange.only(0)) did not throw exception.
PASS index.openKeyCursor(IDBKeyRange.only(0), 'next') did not throw exception.

transactionComplete():
Expecting exception from store = transaction.objectStore('store')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'objectStore' on 'IDBTransaction': The transaction finished.
PASS successfullyParsed is true

TEST COMPLETE

