Test consistency of IndexedDB's cursor objects.

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.
objectStore = db.createObjectStore('basicStore')
objectStore.add('someValue1', 'someKey1').onerror = unexpectedErrorCallback
objectStore.add('someValue2', 'someKey2').onerror = unexpectedErrorCallback
objectStore.add('someValue3', 'someKey3').onerror = unexpectedErrorCallback
objectStore.add('someValue4', 'someKey4').onerror = unexpectedErrorCallback
openBasicCursor()
trans = db.transaction(['basicStore'], 'readwrite')
trans.objectStore('basicStore')
objectStore.openCursor(keyRange)

checkCursor()
storedCursor = event.target.result
PASS storedCursor is event.target.result
PASS storedCursor.key is "someKey1"
PASS event.target.result.key is "someKey1"
PASS storedCursor.value is "someValue1"
PASS event.target.result.value is "someValue1"
event.target.result.continue()

checkCursor()
PASS storedCursor is event.target.result
PASS storedCursor.key is "someKey2"
PASS event.target.result.key is "someKey2"
PASS storedCursor.value is "someValue2"
PASS event.target.result.value is "someValue2"
event.target.result.continue()

checkCursor()
PASS storedCursor is event.target.result
PASS storedCursor.key is "someKey3"
PASS event.target.result.key is "someKey3"
PASS storedCursor.value is "someValue3"
PASS event.target.result.value is "someValue3"
event.target.result.continue()

checkCursor()
PASS storedCursor is event.target.result
PASS storedCursor.key is "someKey4"
PASS event.target.result.key is "someKey4"
PASS storedCursor.value is "someValue4"
PASS event.target.result.value is "someValue4"
event.target.result.continue()

checkCursor()
PASS counter is 5
transactionComplete()
PASS successfullyParsed is true

TEST COMPLETE

