chromium/third_party/blink/web_tests/storage/indexeddb/exceptions-expected.txt

Test that expected exceptions are thrown per IndexedDB spec.

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

dbname = "exceptions.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
store = db.createObjectStore('store')
index = store.createIndex('index', 'id')
store.put({id: 'a'}, 1)
store.put({id: 'b'}, 2)
store.put({id: 'c'}, 3)
store.put({id: 'd'}, 4)
store.put({id: 'e'}, 5)
store.put({id: 'f'}, 6)
store.put({id: 'g'}, 7)
store.put({id: 'h'}, 8)
store.put({id: 'i'}, 9)
store.put({id: 'j'}, 10)
otherStore = db.createObjectStore('otherStore')
inlineKeyStore = db.createObjectStore('inlineKeyStore', {keyPath: 'id'})
request = inlineKeyStore.put({id: 0})
PASS request.readyState is "pending"


3.2.1 The IDBRequest Interface


IDBRequest.error
When the done flag is false, getting this property must throw a DOMException of type InvalidStateError.
Expecting exception from request.error
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to read the 'error' property from 'IDBRequest': The request has not finished.


IDBRequest.result
When the done flag is false, getting this property must throw a DOMException of type InvalidStateError.
Expecting exception from request.result
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to read the 'result' property from 'IDBRequest': The request has not finished.


3.2.3 Opening a database


IDBFactory.cmp()
One of the supplied keys was not a valid key.
Expecting exception from indexedDB.cmp(null, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'cmp' on 'IDBFactory': The parameter is not a valid key.
db.close()


3.2.4 Database
indexedDB.open(dbname, 2)


IDBDatabase.createObjectStore()
If an objectStore with the same name already exists, the implementation must throw a DOMException of type ConstraintError.
Expecting exception from db.createObjectStore('store')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ConstraintError'
Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': An object store with the specified name already exists.
If keyPath is not a valid key path then a DOMException of type SyntaxError must be thrown.
Expecting exception from db.createObjectStore('fail', {keyPath: '-invalid-'})
PASS Exception was thrown.
PASS code is DOMException.SYNTAX_ERR
PASS ename is 'SyntaxError'
Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
If the optionalParameters parameter is specified, and autoIncrement is set to true, and the keyPath parameter is specified to the empty string, or specified to an Array, this function must throw a InvalidAccessError exception.
Expecting exception from db.createObjectStore('fail', {autoIncrement: true, keyPath: ''})
PASS Exception was thrown.
PASS code is DOMException.INVALID_ACCESS_ERR
PASS ename is 'InvalidAccessError'
Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.
Expecting exception from db.createObjectStore('fail', {autoIncrement: true, keyPath: ['a']})
PASS Exception was thrown.
PASS code is DOMException.INVALID_ACCESS_ERR
PASS ename is 'InvalidAccessError'
Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.


IDBDatabase.deleteObjectStore()
There is no object store with the given name, compared in a case-sensitive manner, in the connected database.
Expecting exception from db.deleteObjectStore('no-such-store')
PASS Exception was thrown.
PASS code is DOMException.NOT_FOUND_ERR
PASS ename is 'NotFoundError'
Exception message: Failed to execute 'deleteObjectStore' on 'IDBDatabase': The specified object store was not found.


IDBDatabase.transaction()
If this method is called on IDBDatabase object for which a "versionchange" transaction is still running, a InvalidStateError exception must be thrown.
Expecting exception from db.transaction('store', 'readonly', {durability: 'relaxed'})
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.
One of the names provided in the storeNames argument doesn't exist in this database.
Expecting exception from db.transaction('no-such-store', 'readonly', {durability: 'relaxed'})
PASS Exception was thrown.
PASS code is DOMException.NOT_FOUND_ERR
PASS ename is 'NotFoundError'
Exception message: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.
The value for the mode parameter is invalid.
Expecting TypeError exception from db.transaction('store', 'invalid-mode')
PASS Exception was thrown.
PASS db.transaction('store', 'invalid-mode') threw TypeError: Failed to execute 'transaction' on 'IDBDatabase': The provided value 'invalid-mode' is not a valid enum value of type IDBTransactionMode.
The 'versionchange' value for the mode parameter can only be set internally during upgradeneeded.
Expecting TypeError exception from db.transaction('store', 'versionchange')
PASS Exception was thrown.
PASS db.transaction('store', 'versionchange') threw TypeError: Failed to execute 'transaction' on 'IDBDatabase': The mode provided ('versionchange') is not one of 'readonly' or 'readwrite'.
The function was called with an empty list of store names
Expecting exception from db.transaction([])
PASS Exception was thrown.
PASS code is DOMException.INVALID_ACCESS_ERR
PASS ename is 'InvalidAccessError'
Exception message: Failed to execute 'transaction' on 'IDBDatabase': The storeNames parameter was empty.


One more IDBDatabase.createObjectStore() test:
If this function is called from outside a "versionchange" transaction callback ... the implementation must throw a DOMException of type InvalidStateError.
Expecting exception from db.createObjectStore('fail')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction.


One more IDBDatabase.deleteObjectStore() test:
If this function is called from outside a "versionchange" transaction callback ... the implementation must throw a DOMException of type InvalidStateError.
Expecting exception from db.deleteObjectStore('fail')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'deleteObjectStore' on 'IDBDatabase': The database is not running a version change transaction.


Prepare an object store and index from an inactive transaction for later use.
finishedTransaction = inactiveTransaction = db.transaction('store', 'readonly', {durability: 'relaxed'})
storeFromInactiveTransaction = inactiveTransaction.objectStore('store')
indexFromInactiveTransaction = storeFromInactiveTransaction.index('index')
request = storeFromInactiveTransaction.openCursor()
cursorFromInactiveTransaction = request.result


3.2.5 Object Store
ro_transaction = db.transaction('store', 'readonly', {durability: 'relaxed'})
storeFromReadOnlyTransaction = ro_transaction.objectStore('store')
rw_transaction = db.transaction('store', 'readwrite', {durability: 'relaxed'})
store = rw_transaction.objectStore('store')


IDBObjectStore.add()
This method throws a DOMException of type ReadOnlyError if the transaction which this IDBObjectStore belongs to is has its mode set to "readonly".
Expecting exception from storeFromReadOnlyTransaction.add(0, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'add' on 'IDBObjectStore': The transaction is read-only.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.add(0, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'add' on 'IDBObjectStore': The transaction has finished.
The data being stored could not be cloned by the internal structured cloning algorithm.
Expecting exception from store.add(self, 0)
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: Failed to execute 'add' on 'IDBObjectStore': #<Window> could not be cloned.


IDBObjectStore.clear()
This method throws a DOMException of type ReadOnlyError if the transaction which this IDBObjectStore belongs to is has its mode set to "readonly".
Expecting exception from storeFromReadOnlyTransaction.clear()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'clear' on 'IDBObjectStore': The transaction is read-only.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.clear()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'clear' on 'IDBObjectStore': The transaction has finished.


IDBObjectStore.count()
If the optional key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from store.count({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'count' on 'IDBObjectStore': The parameter is not a valid key.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.count()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBObjectStore': The transaction has finished.


IDBObjectStore.delete()
This method throws a DOMException of type ReadOnlyError if the transaction which this IDBObjectStore belongs to is has its mode set to "readonly".
Expecting exception from storeFromReadOnlyTransaction.delete(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'delete' on 'IDBObjectStore': The transaction is read-only.
If the key parameter is not a valid key or a key range this method throws a DOMException of type DataError.
Expecting exception from store.delete({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'delete' on 'IDBObjectStore': The parameter is not a valid key.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.add(0, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'add' on 'IDBObjectStore': The transaction has finished.


IDBObjectStore.get()
If the key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from store.get({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'get' on 'IDBObjectStore': The parameter is not a valid key.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.get(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'get' on 'IDBObjectStore': The transaction has finished.


IDBObjectStore.getAll()
If the key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from store.getAll({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'getAll' on 'IDBObjectStore': The parameter is not a valid key.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.getAll(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'getAll' on 'IDBObjectStore': The transaction has finished.


IDBObjectStore.getAllKeys()
If the key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from store.getAllKeys({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'getAllKeys' on 'IDBObjectStore': The parameter is not a valid key.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.getAllKeys(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'getAllKeys' on 'IDBObjectStore': The transaction has finished.


IDBObjectStore.index()
There is no index with the given name, compared in a case-sensitive manner, in the connected database.
Expecting exception from store.index('no-such-index')
PASS Exception was thrown.
PASS code is DOMException.NOT_FOUND_ERR
PASS ename is 'NotFoundError'
Exception message: Failed to execute 'index' on 'IDBObjectStore': The specified index was not found.
Occurs if a request is made on a source object that has been deleted or removed, or if the transaction the object store belongs to has finished.
Expecting exception from storeFromInactiveTransaction.index('index')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'index' on 'IDBObjectStore': The transaction has finished.


IDBObjectStore.openCursor()
If the range parameter is specified but is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from store.openCursor({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The parameter is not a valid key.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.openCursor()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The transaction has finished.
The value for the direction parameter is invalid.
Expecting TypeError exception from store.openCursor(0, 'invalid-direction')
PASS Exception was thrown.
PASS store.openCursor(0, 'invalid-direction') threw TypeError: Failed to execute 'openCursor' on 'IDBObjectStore': The provided value 'invalid-direction' is not a valid enum value of type IDBCursorDirection.


IDBObjectStore.openKeyCursor()
If the range parameter is specified but is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from store.openKeyCursor({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The parameter is not a valid key.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.openKeyCursor()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The transaction has finished.
The value for the direction parameter is invalid.
Expecting TypeError exception from store.openKeyCursor(0, 'invalid-direction')
PASS Exception was thrown.
PASS store.openKeyCursor(0, 'invalid-direction') threw TypeError: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The provided value 'invalid-direction' is not a valid enum value of type IDBCursorDirection.


IDBObjectStore.put()
This method throws a DOMException of type ReadOnlyError if the transaction which this IDBObjectStore belongs to is has its mode set to "readonly".
Expecting exception from storeFromReadOnlyTransaction.put(0, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'put' on 'IDBObjectStore': The transaction is read-only.
The transaction this IDBObjectStore belongs to is not active.
Expecting exception from storeFromInactiveTransaction.put(0, 0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'put' on 'IDBObjectStore': The transaction has finished.
The data being stored could not be cloned by the internal structured cloning algorithm.
Expecting exception from store.put(self, 0)
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: Failed to execute 'put' on 'IDBObjectStore': #<Window> could not be cloned.
db.close()
ro_transaction.oncomplete = transactionComplete
rw_transaction.oncomplete = transactionComplete


transactionComplete():
First transaction completed


transactionComplete():
request = indexedDB.open(dbname, 3)
request.onupgradeneeded = onUpgradeNeeded3


IDBObjectStore.createIndex()
If an index with the same name already exists, the implementation must throw a DOMException of type ConstraintError. 
Expecting exception from store.createIndex('index', 'keyPath')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ConstraintError'
Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': An index with the specified name already exists.
If keyPath is not a valid key path then a DOMException of type SyntaxError must be thrown.
Expecting exception from store.createIndex('fail', '-invalid-')
PASS Exception was thrown.
PASS code is DOMException.SYNTAX_ERR
PASS ename is 'SyntaxError'
Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
If keyPath is an Array and the multiEntry property in the optionalParameters is true, then a DOMException of type InvalidAccessError must be thrown.
Expecting exception from store.createIndex('fail', ['a'], {multiEntry: true})
PASS Exception was thrown.
PASS code is DOMException.INVALID_ACCESS_ERR
PASS ename is 'InvalidAccessError'
Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument was an array and the multiEntry option is true.


IDBObjectStore.deleteIndex()
There is no index with the given name, compared in a case-sensitive manner, in the connected database.
Expecting exception from store.deleteIndex('no-such-index')
PASS Exception was thrown.
PASS code is DOMException.NOT_FOUND_ERR
PASS ename is 'NotFoundError'
Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The specified index was not found.


One more IDBObjectStore.createIndex() test:
If this function is called from outside a "versionchange" transaction callback ... the implementation must throw a DOMException of type InvalidStateError.
Expecting exception from db.transaction('store', 'readonly', {durability: 'relaxed'}).objectStore('store').createIndex('fail', 'keyPath')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The database is not running a version change transaction.


One more IDBObjectStore.deleteIndex() test:
If this function is called from outside a "versionchange" transaction callback ... the implementation must throw a DOMException of type InvalidStateError.
Expecting exception from db.transaction('store', 'readonly', {durability: 'relaxed'}).objectStore('store').deleteIndex('fail', 'keyPath')
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The database is not running a version change transaction.


3.2.6 Index
indexFromReadOnlyTransaction = db.transaction('store', 'readonly', {durability: 'relaxed'}).objectStore('store').index('index')
index = db.transaction('store', 'readwrite', {durability: 'relaxed'}).objectStore('store').index('index')


IDBIndex.count()
If the optional key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from index.count({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'count' on 'IDBIndex': The parameter is not a valid key.
The transaction this IDBIndex belongs to is not active.
Expecting exception from indexFromInactiveTransaction.count()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'count' on 'IDBIndex': The transaction has finished.


IDBIndex.get()
If the key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from index.get({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'get' on 'IDBIndex': The parameter is not a valid key.
The transaction this IDBIndex belongs to is not active.
Expecting exception from indexFromInactiveTransaction.get(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'get' on 'IDBIndex': The transaction has finished.


IDBIndex.getAll()
If the key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from index.getAll({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'getAll' on 'IDBIndex': The parameter is not a valid key.
The transaction this IDBIndex belongs to is not active.
Expecting exception from indexFromInactiveTransaction.getAll(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'getAll' on 'IDBIndex': The transaction has finished.


IDBIndex.getKey()
If the key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from index.getKey({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'getKey' on 'IDBIndex': The parameter is not a valid key.
The transaction this IDBIndex belongs to is not active.
Expecting exception from indexFromInactiveTransaction.getKey(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'getKey' on 'IDBIndex': The transaction has finished.


IDBIndex.getAllKeys()
If the key parameter is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from index.getAllKeys({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'getAllKeys' on 'IDBIndex': The parameter is not a valid key.
The transaction this IDBIndex belongs to is not active.
Expecting exception from indexFromInactiveTransaction.getAllKeys(0)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'getAllKeys' on 'IDBIndex': The transaction has finished.


IDBIndex.openCursor()
If the range parameter is specified but is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from index.openCursor({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'openCursor' on 'IDBIndex': The parameter is not a valid key.
The transaction this IDBIndex belongs to is not active.
Expecting exception from indexFromInactiveTransaction.openCursor()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openCursor' on 'IDBIndex': The transaction has finished.
The value for the direction parameter is invalid.
Expecting TypeError exception from index.openCursor(0, 'invalid-direction')
PASS Exception was thrown.
PASS index.openCursor(0, 'invalid-direction') threw TypeError: Failed to execute 'openCursor' on 'IDBIndex': The provided value 'invalid-direction' is not a valid enum value of type IDBCursorDirection.


IDBIndex.openKeyCursor()
If the range parameter is specified but is not a valid key or a key range, this method throws a DOMException of type DataError.
Expecting exception from index.openKeyCursor({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The parameter is not a valid key.
The transaction this IDBIndex belongs to is not active.
Expecting exception from indexFromInactiveTransaction.openKeyCursor()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The transaction has finished.
The value for the direction parameter is invalid.
Expecting TypeError exception from index.openKeyCursor(0, 'invalid-direction')
PASS Exception was thrown.
PASS index.openKeyCursor(0, 'invalid-direction') threw TypeError: Failed to execute 'openKeyCursor' on 'IDBIndex': The provided value 'invalid-direction' is not a valid enum value of type IDBCursorDirection.


3.2.7 Cursor
transaction = db.transaction(['store', 'inlineKeyStore'], 'readwrite')
request = transaction.objectStore('store').openCursor()
cursor = request.result
request = transaction.objectStore('store').index('index').openKeyCursor()
keyCursor = request.result
request = transaction.objectStore('store').openCursor(IDBKeyRange.lowerBound(-Infinity), 'prev')
reverseCursor = request.result
request = transaction.objectStore('inlineKeyStore').openCursor()
inlineCursor = request.result


IDBCursor.advance()
Calling this method more than once before new cursor data has been loaded is not allowed and results in a DOMException of type InvalidStateError being thrown.
If the value for count is 0 (zero) or a negative number, this method must throw a JavaScript TypeError exception.
Expecting TypeError exception from cursor.advance(0)
PASS Exception was thrown.
PASS cursor.advance(0) threw TypeError: Failed to execute 'advance' on 'IDBCursor': A count argument with value 0 (zero) was supplied, must be greater than 0.
cursor.advance(1)
Expecting exception from cursor.advance(1)
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'advance' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
The transaction this IDBCursor belongs to is not active.
Expecting exception from cursorFromInactiveTransaction.advance(1)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'advance' on 'IDBCursor': The transaction has finished.


IDBCursor.continue()
The parameter is not a valid key.
Expecting exception from cursor.continue({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is not a valid key.
The parameter is less than or equal to this cursor's position and this cursor's direction is "next" or "nextunique".
Expecting exception from cursor.continue(-Infinity)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is less than or equal to this cursor's position.
The parameter is greater than or equal to this cursor's position and this cursor's direction is "prev" or "prevunique".
Expecting exception from reverseCursor.continue(100)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is greater than or equal to this cursor's position.
Calling this method more than once before new cursor data has been loaded is not allowed and results in a DOMException of type InvalidStateError being thrown.
cursor.continue()
Expecting exception from cursor.continue()
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
The transaction this IDBCursor belongs to is not active.
Expecting exception from cursorFromInactiveTransaction.continue()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'continue' on 'IDBCursor': The transaction has finished.


IDBCursor.delete()
If this cursor's got value flag is false, or if this cursor was created using openKeyCursor a DOMException of type InvalidStateError is thrown.
Expecting exception from keyCursor.delete()
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor is a key cursor.
The transaction this IDBCursor belongs to is not active.
Expecting exception from cursorFromInactiveTransaction.delete()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'delete' on 'IDBCursor': The transaction has finished.


IDBCursor.update()
If this cursor's got value flag is false or if this cursor was created using openKeyCursor. This method throws a DOMException of type InvalidStateError.
Expecting exception from keyCursor.update({})
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
If the effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key, this method throws a DOMException of type DataError.
Expecting exception from inlineCursor.update({id: 1})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
If the structured clone algorithm throws an exception, that exception is rethrown.
Expecting exception from cursor.update(self)
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: Failed to execute 'update' on 'IDBCursor': #<Window> could not be cloned.
The transaction this IDBCursor belongs to is not active.
Expecting exception from cursorFromInactiveTransaction.update({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'TransactionInactiveError'
Exception message: Failed to execute 'update' on 'IDBCursor': The transaction has finished.
readOnlyTransaction = db.transaction('store', 'readonly', {durability: 'relaxed'})
request = readOnlyTransaction.objectStore('store').openCursor()
cursorFromReadOnlyTransaction = request.result


One more IDBCursor.delete() test:
This method throws a DOMException of type ReadOnlyError if the transaction which this IDBCursor belongs to has its mode set to "readonly".
Expecting exception from cursorFromReadOnlyTransaction.delete()
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'delete' on 'IDBCursor': The record may not be deleted inside a read-only transaction.


One more IDBCursor.update() test:
This method throws a DOMException of type ReadOnlyError if the transaction which this IDBCursor belongs to has its mode set to "readonly".
Expecting exception from cursorFromReadOnlyTransaction.update({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'ReadOnlyError'
Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.


3.2.8 Transaction


IDBTransaction.abort()
If this transaction is finished, throw a DOMException of type InvalidStateError. 
Expecting exception from finishedTransaction.abort()
PASS Exception was thrown.
PASS code is DOMException.INVALID_STATE_ERR
PASS ename is 'InvalidStateError'
Exception message: Failed to execute 'abort' on 'IDBTransaction': The transaction has finished.
If the requested object store is not in this transaction's scope.
Expecting exception from db.transaction('store', 'readonly', {durability: 'relaxed'}).objectStore('otherStore')
PASS Exception was thrown.
PASS code is DOMException.NOT_FOUND_ERR
PASS ename is 'NotFoundError'
Exception message: Failed to execute 'objectStore' on 'IDBTransaction': The specified object store was not found.
PASS successfullyParsed is true

TEST COMPLETE