553 lines
28 KiB
Plaintext
553 lines
28 KiB
Plaintext
Test that expected exceptions are thrown per IndexedDB spec.
|
|
|
|
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')
|
|
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')
|
|
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')
|
|
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: Argument 2 ('mode') to IDBDatabase.transaction must be one of: "readonly", "readwrite", "versionchange"
|
|
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')
|
|
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')
|
|
storeFromReadOnlyTransaction = ro_transaction.objectStore('store')
|
|
rw_transaction = db.transaction('store', 'readwrite')
|
|
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 store record in an 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 store record in an IDBObjectStore: The transaction is inactive or 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: The object can 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 is inactive or 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 is inactive or 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 store record in an IDBObjectStore: The transaction is inactive or 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 is inactive or 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 11
|
|
PASS ename is 'InvalidStateError'
|
|
Exception message: Failed to execute 'index' on 'IDBObjectStore': The transaction is 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 is inactive or 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: Argument 2 ('direction') to IDBObjectStore.openCursor must be one of: "next", "nextunique", "prev", "prevunique"
|
|
|
|
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 store record in an 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 store record in an IDBObjectStore: The transaction is inactive or 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: The object can 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').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').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').objectStore('store').index('index')
|
|
index = db.transaction('store', 'readwrite').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 is inactive or 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 is inactive or 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 is inactive or 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 is inactive or 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: Argument 2 ('direction') to IDBIndex.openCursor must be one of: "next", "nextunique", "prev", "prevunique"
|
|
|
|
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 is inactive or 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: Argument 2 ('direction') to IDBIndex.openKeyCursor must be one of: "next", "nextunique", "prev", "prevunique"
|
|
|
|
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 is inactive or 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 is inactive or 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 is inactive or 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: The object can 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 is inactive or finished.
|
|
readOnlyTransaction = db.transaction('store', 'readonly')
|
|
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 is inactive or finished.
|
|
If the requested object store is not in this transaction's scope.
|
|
Expecting exception from db.transaction('store').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
|
|
|