Test IndexedDB's cursor skips deleted entries.

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('store', {keyPath: 'id'})
objectStore.createIndex('nameIndex', 'name')

resetObjectStore():

basicCursorTest()
trans = db.transaction(['store'], 'readwrite')

testCursor():
trans.objectStore('store').openCursor(IDBKeyRange.lowerBound(0))
0: Alpha
1: Bravo
request = trans.objectStore('store').delete(0)
2: Charlie
request = trans.objectStore('store').delete(25)
3: Delta
request = trans.objectStore('store').delete(5)
request = trans.objectStore('store').delete(6)
request = trans.objectStore('store').delete(7)
4: Echo
8: India
9: Juliet
10: Kilo
request = trans.objectStore('store').delete(10)
11: Lima
12: Mike
request = trans.objectStore('store').delete(13)
14: Oscar
15: Papa
request = trans.objectStore('store').delete(14)
16: Quebec
17: Romeo
18: Sierra
19: Tango
20: Uniform
request = trans.objectStore('store').delete(17)
request = trans.objectStore('store').delete(18)
21: Victor
22: Whiskey
23: X-ray
24: Yankee


resetObjectStore():

reverseCursorTest():

testCursor():
trans.objectStore('store').openCursor(IDBKeyRange.lowerBound(0), 'prev')
25: Zulu
24: Yankee
request = trans.objectStore('store').delete(25)
23: X-ray
request = trans.objectStore('store').delete(0)
22: Whiskey
request = trans.objectStore('store').delete(20)
request = trans.objectStore('store').delete(19)
request = trans.objectStore('store').delete(18)
21: Victor
17: Romeo
16: Quebec
15: Papa
request = trans.objectStore('store').delete(15)
14: Oscar
13: November
request = trans.objectStore('store').delete(12)
11: Lima
10: Kilo
request = trans.objectStore('store').delete(11)
9: Juliet
8: India
7: Hotel
6: Golf
5: Foxtrot
request = trans.objectStore('store').delete(7)
request = trans.objectStore('store').delete(8)
4: Echo
3: Delta
2: Charlie
1: Bravo


resetObjectStore():

indexCursorTest():

testCursor():
trans.objectStore('store').index('nameIndex').openCursor(IDBKeyRange.lowerBound('Alpha'))
0: Alpha
1: Bravo
request = trans.objectStore('store').delete(0)
2: Charlie
request = trans.objectStore('store').delete(25)
3: Delta
request = trans.objectStore('store').delete(5)
request = trans.objectStore('store').delete(6)
request = trans.objectStore('store').delete(7)
4: Echo
8: India
9: Juliet
10: Kilo
request = trans.objectStore('store').delete(10)
11: Lima
12: Mike
request = trans.objectStore('store').delete(13)
14: Oscar
15: Papa
request = trans.objectStore('store').delete(14)
16: Quebec
17: Romeo
18: Sierra
19: Tango
20: Uniform
request = trans.objectStore('store').delete(17)
request = trans.objectStore('store').delete(18)
21: Victor
22: Whiskey
23: X-ray
24: Yankee

transactionComplete():
PASS successfullyParsed is true

TEST COMPLETE

