241 lines
10 KiB
Plaintext
241 lines
10 KiB
Plaintext
Test IndexedDB's cursor update.
|
|
|
|
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)
|
|
setVersionSuccess():
|
|
trans = event.target.transaction
|
|
PASS trans is non-null.
|
|
Deleted all object stores.
|
|
objectStore = db.createObjectStore('basicStore')
|
|
objectStore.add('myValue1', 'myKey1').onerror = unexpectedErrorCallback
|
|
objectStore.add('myValue2', 'myKey2').onerror = unexpectedErrorCallback
|
|
objectStore.add('myValue3', 'myKey3').onerror = unexpectedErrorCallback
|
|
objectStore.add('myValue4', 'myKey4').onerror = unexpectedErrorCallback
|
|
objectStore = db.createObjectStore('autoIncrementStore', {autoIncrement: true})
|
|
objectStore.add('foo1').onerror = unexpectedErrorCallback
|
|
objectStore.add('foo2').onerror = unexpectedErrorCallback
|
|
objectStore.add('foo3').onerror = unexpectedErrorCallback
|
|
objectStore.add('foo4').onerror = unexpectedErrorCallback
|
|
objectStore = db.createObjectStore('keyPathStore', {keyPath: 'id'})
|
|
objectStore.createIndex('numberIndex', 'number')
|
|
objectStore.add({number: 1, id: 1}).onerror = unexpectedErrorCallback
|
|
objectStore.add({number: 2, id: 2}).onerror = unexpectedErrorCallback
|
|
objectStore.add({number: 3, id: 3}).onerror = unexpectedErrorCallback
|
|
objectStore.add({number: 4, id: 4}).onerror = unexpectedErrorCallback
|
|
openBasicCursor()
|
|
trans = db.transaction(['basicStore', 'autoIncrementStore', 'keyPathStore'], 'readwrite')
|
|
trans.objectStore('basicStore')
|
|
objectStore.openCursor(keyRange)
|
|
basicUpdateCursor()
|
|
PASS event.target.source is objectStore
|
|
event.target.result.update('myUpdatedValue' + counter++)
|
|
event.target.source.continue()
|
|
basicUpdateCursor()
|
|
PASS event.target.source is objectStore
|
|
event.target.result.update('myUpdatedValue' + counter++)
|
|
event.target.source.continue()
|
|
basicUpdateCursor()
|
|
PASS event.target.source is objectStore
|
|
event.target.result.update('myUpdatedValue' + counter++)
|
|
event.target.source.continue()
|
|
basicUpdateCursor()
|
|
PASS event.target.source is objectStore
|
|
event.target.result.update('myUpdatedValue' + counter++)
|
|
event.target.source.continue()
|
|
basicUpdateCursor()
|
|
PASS event.target.source is objectStore
|
|
PASS counter is 5
|
|
trans.objectStore('basicStore').openCursor(keyRange)
|
|
basicCheckCursor()
|
|
PASS event.target.result.key is "myKey1"
|
|
PASS event.target.result.value is "myUpdatedValue1"
|
|
event.target.result.continue()
|
|
basicCheckCursor()
|
|
PASS event.target.result.key is "myKey2"
|
|
PASS event.target.result.value is "myUpdatedValue2"
|
|
event.target.result.continue()
|
|
basicCheckCursor()
|
|
PASS event.target.result.key is "myKey3"
|
|
PASS event.target.result.value is "myUpdatedValue3"
|
|
event.target.result.continue()
|
|
basicCheckCursor()
|
|
PASS event.target.result.key is "myKey4"
|
|
PASS event.target.result.value is "myUpdatedValue4"
|
|
event.target.result.continue()
|
|
basicCheckCursor()
|
|
PASS counter is 5
|
|
trans.objectStore('autoIncrementStore').openCursor(keyRange)
|
|
autoIncrementUpdateCursor()
|
|
event.target.result.update('myUpdatedFoo' + counter++)
|
|
event.target.source.continue()
|
|
autoIncrementUpdateCursor()
|
|
event.target.result.update('myUpdatedFoo' + counter++)
|
|
event.target.source.continue()
|
|
autoIncrementUpdateCursor()
|
|
event.target.result.update('myUpdatedFoo' + counter++)
|
|
event.target.source.continue()
|
|
autoIncrementUpdateCursor()
|
|
event.target.result.update('myUpdatedFoo' + counter++)
|
|
event.target.source.continue()
|
|
autoIncrementUpdateCursor()
|
|
PASS counter is 5
|
|
trans.objectStore('autoIncrementStore').openCursor(keyRange)
|
|
autoIncrementCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value is "myUpdatedFoo1"
|
|
event.target.result.continue()
|
|
autoIncrementCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value is "myUpdatedFoo2"
|
|
event.target.result.continue()
|
|
autoIncrementCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value is "myUpdatedFoo3"
|
|
event.target.result.continue()
|
|
autoIncrementCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value is "myUpdatedFoo4"
|
|
event.target.result.continue()
|
|
autoIncrementCheckCursor()
|
|
PASS counter is 5
|
|
trans.objectStore('keyPathStore').openCursor(keyRange)
|
|
keyPathUpdateCursor()
|
|
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
|
|
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.
|
|
event.target.result.update({id: counter, number: 100 + counter++})
|
|
event.target.source.continue()
|
|
keyPathUpdateCursor()
|
|
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
|
|
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.
|
|
event.target.result.update({id: counter, number: 100 + counter++})
|
|
event.target.source.continue()
|
|
keyPathUpdateCursor()
|
|
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
|
|
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.
|
|
event.target.result.update({id: counter, number: 100 + counter++})
|
|
event.target.source.continue()
|
|
keyPathUpdateCursor()
|
|
Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
|
|
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.
|
|
event.target.result.update({id: counter, number: 100 + counter++})
|
|
event.target.source.continue()
|
|
keyPathUpdateCursor()
|
|
PASS counter is 5
|
|
trans.objectStore('keyPathStore').openCursor(keyRange)
|
|
keyPathCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value.id is counter
|
|
PASS event.target.result.value.number is 101
|
|
event.target.result.continue()
|
|
keyPathCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value.id is counter
|
|
PASS event.target.result.value.number is 102
|
|
event.target.result.continue()
|
|
keyPathCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value.id is counter
|
|
PASS event.target.result.value.number is 103
|
|
event.target.result.continue()
|
|
keyPathCheckCursor()
|
|
PASS event.target.result.key is counter
|
|
PASS event.target.result.value.id is counter
|
|
PASS event.target.result.value.number is 104
|
|
event.target.result.continue()
|
|
keyPathCheckCursor()
|
|
PASS counter is 5
|
|
trans.objectStore('keyPathStore').index('numberIndex').openKeyCursor(keyRange)
|
|
keyCursor()
|
|
PASS event.target.result.key is counter + 100
|
|
PASS event.target.result.primaryKey is counter
|
|
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
|
|
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.
|
|
event.target.result.continue();
|
|
keyCursor()
|
|
PASS event.target.result.key is counter + 100
|
|
PASS event.target.result.primaryKey is counter
|
|
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
|
|
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.
|
|
event.target.result.continue();
|
|
keyCursor()
|
|
PASS event.target.result.key is counter + 100
|
|
PASS event.target.result.primaryKey is counter
|
|
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
|
|
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.
|
|
event.target.result.continue();
|
|
keyCursor()
|
|
PASS event.target.result.key is counter + 100
|
|
PASS event.target.result.primaryKey is counter
|
|
Expecting exception from event.target.result.update({id: counter, number: counter + 200})
|
|
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.
|
|
event.target.result.continue();
|
|
keyCursor()
|
|
PASS counter is 5
|
|
openBasicCursor()
|
|
trans = db.transaction('basicStore')
|
|
trans.objectStore('basicStore')
|
|
objectStore.openCursor(keyRange)
|
|
attemptUpdate()
|
|
Expecting exception from cursor.update('myUpdatedValue')
|
|
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.
|
|
cursor.continue()
|
|
attemptUpdate()
|
|
Expecting exception from cursor.update('myUpdatedValue')
|
|
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.
|
|
cursor.continue()
|
|
attemptUpdate()
|
|
Expecting exception from cursor.update('myUpdatedValue')
|
|
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.
|
|
cursor.continue()
|
|
attemptUpdate()
|
|
Expecting exception from cursor.update('myUpdatedValue')
|
|
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.
|
|
cursor.continue()
|
|
attemptUpdate()
|
|
transactionComplete()
|
|
PASS successfullyParsed is true
|
|
|
|
TEST COMPLETE
|
|
|