Test IndexedDB's openCursor.

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)
trans = event.target.transaction
PASS trans is non-null.
objectStore = db.createObjectStore('test')
objectStore.createIndex('testIndex', 'x')
objectStore.add({x: 1}, 'myKey1')
objectStore.add({x: 2}, 'myKey2')
objectStore.add({x: 3}, 'myKey3')
objectStore.add({x: 4}, 'myKey4')
openCursor1
trans = db.transaction(['test'], 'readwrite')
trans.objectStore('test').index('testIndex').openCursor(keyRange)
event.target.result.delete()
PASS event.target.result.key is counter++
event.target.result.continue()
event.target.result.delete()
PASS event.target.result.key is counter++
event.target.result.continue()
event.target.result.delete()
PASS event.target.result.key is counter++
event.target.result.continue()
event.target.result.delete()
PASS event.target.result.key is counter++
event.target.result.continue()
PASS counter is 5
trans.objectStore('test').index('testIndex').openCursor(keyRange)
PASS event.target.result is null
trans = db.transaction(['test'], 'readwrite')
objectStore = trans.objectStore('test')
objectStore.add({x: 1}, 'myKey1')
openCursor2
index = event.target.source.index('testIndex')
index.openCursor(keyRange)
PASS [object IDBCursorWithValue] is non-null.
event.target.result.delete()
index.get(1)
PASS event.target.result is undefined
PASS successfullyParsed is true

TEST COMPLETE

