Test IDBTransaction.error cases.

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('storeName')
store.add('value', 'key')

trans = db.transaction('storeName')

IDBTransaction.error should be null if transaction is not finished:
PASS trans.error is null

transaction() should throw if one of the DOMStringList items cannot be converted to a String:
PASS db.transaction(['storeName', nonConvertibleToString]) threw exception Exception in toString().

If IDBTransaction.abort() is explicitly called, IDBTransaction.error should be null:
trans.abort()
PASS trans.error is null

If the transaction is aborted due to a request error that is not prevented, IDBTransaction.error should match:
trans = db.transaction('storeName', 'readwrite')
request = trans.objectStore('storeName').add('value2', 'key')
PASS request.error.name is 'ConstraintError'
request_error = request.error
Transaction received abort event.
PASS trans.error is non-null.
PASS trans.error is request_error

If the transaction is aborted due to an exception thrown from event callback, IDBTransaction.error should be AbortError:
trans = db.transaction('storeName', 'readwrite')
request = trans.objectStore('storeName').add('value2', 'key')
PASS request.error.name is 'ConstraintError'
Throwing exception...
Transaction received abort event.
PASS trans.error is non-null.
PASS trans.error.name is 'AbortError'

If the transaction is aborted due to an error during commit, IDBTransaction.error should reflect that error:
trans = db.transaction('storeName', 'readwrite')
request = trans.objectStore('storeName').add({id: 1}, 'record1')
request = trans.objectStore('storeName').add({id: 1}, 'record2')
request = indexedDB.open(dbname, 2)
trans = request.transaction
This should fail due to the unique constraint:
indexName = 'Also test utf8: 漢'
trans.objectStore('storeName').createIndex(indexName, 'id', {unique: true})
Transaction received abort event.
PASS trans.error is non-null.
PASS trans.error.name is 'ConstraintError'
Note: This fails because of http://wkb.ug/37327

PASS successfullyParsed is true

TEST COMPLETE

