Test IndexedDB behavior when iterating backwards with and without NO_DUPLICATE

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')
store.createIndex('index', 'sorted')

populating store...
trans = db.transaction('store', 'readwrite')
store = trans.objectStore('store');
store.put({sorted: 3, value: 111}, 1)
store.put({sorted: 2, value: 222}, 2)
store.put({sorted: 1, value: 333}, 3)
store.put({sorted: 10, value: 444}, 17)
store.put({sorted: 10, value: 555}, 16)
store.put({sorted: 10, value: 666}, 15)

testFarRangeCursor: upper bound is well out of range, results always the same, whether open or closed
storeReq = store.openCursor(IDBKeyRange.upperBound(7, false), 'prev')
PASS cursor.key is 3
PASS cursor.value.value is 333
DONE

storeReq = store.openCursor(IDBKeyRange.upperBound(7, true), 'prev')
PASS cursor.key is 3
PASS cursor.value.value is 333
DONE

storeReq = index.openCursor(IDBKeyRange.upperBound(7, false), 'prev')
PASS cursor.key is 3
PASS cursor.value.value is 111
PASS cursor.primaryKey is 1
DONE

storeReq = index.openCursor(IDBKeyRange.upperBound(7, true), 'prev')
PASS cursor.key is 3
PASS cursor.value.value is 111
PASS cursor.primaryKey is 1
DONE

storeReq = index.openKeyCursor(IDBKeyRange.upperBound(7, false), 'prev')
PASS cursor.key is 3
PASS cursor.primaryKey is 1
DONE

storeReq = index.openKeyCursor(IDBKeyRange.upperBound(7, true), 'prev')
PASS cursor.key is 3
PASS cursor.primaryKey is 1
DONE

storeReq = store.openCursor(IDBKeyRange.upperBound(3, false), 'prev')
PASS cursor.key is 3
PASS cursor.value.value is 333
DONE

storeReq = store.openCursor(IDBKeyRange.upperBound(3, true), 'prev')
PASS cursor.key is 2
PASS cursor.value.value is 222
DONE

storeReq = index.openCursor(IDBKeyRange.upperBound(3, false), 'prev')
PASS cursor.key is 3
PASS cursor.value.value is 111
PASS cursor.primaryKey is 1
DONE

storeReq = index.openCursor(IDBKeyRange.upperBound(3, true), 'prev')
PASS cursor.key is 2
PASS cursor.value.value is 222
PASS cursor.primaryKey is 2
DONE

storeReq = index.openKeyCursor(IDBKeyRange.upperBound(3, false), 'prev')
PASS cursor.key is 3
PASS cursor.primaryKey is 1
DONE

storeReq = index.openKeyCursor(IDBKeyRange.upperBound(3, true), 'prev')
PASS cursor.key is 2
PASS cursor.primaryKey is 2
DONE

testNoDuplicate: there are 3 values, but we should return always the first one
storeReq = store.openCursor(IDBKeyRange.upperBound(15, false), 'prevunique')
PASS cursor.key is 15
PASS cursor.value.value is 666
PASS cursor.primaryKey is 15
DONE

storeReq = index.openCursor(IDBKeyRange.upperBound(15, false), 'prevunique')
PASS cursor.key is 10
PASS cursor.value.value is 666
PASS cursor.primaryKey is 15
DONE

storeReq = index.openKeyCursor(IDBKeyRange.upperBound(15, false), 'prevunique')
PASS cursor.key is 10
PASS cursor.primaryKey is 15
DONE

PASS successfullyParsed is true

TEST COMPLETE

