Test the basics of IndexedDB's IDBIndex.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
dbname = "index-basics.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
prepareDatabase():
db.createObjectStore('storeName', null)
store.createIndex('indexName', 'x')
store.createIndex('indexName2', 'y', {unique: false})
store.createIndex('zIndex', 'z', {unique: true})
PASS store.createIndex('index4', 'path', undefined) did not throw exception.
PASS indexObject2.unique is false
PASS indexObject3.unique is true
Expecting TypeError exception from store.createIndex('failureIndex', 'zzz', true)
PASS Exception was thrown.
PASS store.createIndex('failureIndex', 'zzz', true) threw TypeError: Failed to execute 'createIndex' on 'IDBObjectStore': The provided value is not of type 'IDBIndexParameters'.
Expecting TypeError exception from store.createIndex('failureIndex', 'zzz', 'string')
PASS Exception was thrown.
PASS store.createIndex('failureIndex', 'zzz', 'string') threw TypeError: Failed to execute 'createIndex' on 'IDBObjectStore': The provided value is not of type 'IDBIndexParameters'.
PASS 'name' in indexObject is true
PASS indexObject.name is "indexName"
PASS 'objectStore' in indexObject is true
PASS indexObject.objectStore.name is "storeName"
PASS 'keyPath' in indexObject is true
PASS indexObject.keyPath is "x"
PASS 'unique' in indexObject is true
PASS 'multiEntry' in indexObject is true
PASS indexObject.unique is false
PASS indexObject.multiEntry is false
PASS 'openKeyCursor' in indexObject is true
PASS typeof indexObject.openKeyCursor is "function"
PASS 'openCursor' in indexObject is true
PASS typeof indexObject.openCursor is "function"
PASS 'getKey' in indexObject is true
PASS typeof indexObject.getKey is "function"
PASS 'get' in indexObject is true
PASS typeof indexObject.get is "function"
PASS 'count' in indexObject is true
PASS typeof indexObject.count is "function"
store.add({x: 'value', y: 'zzz', z: 2.72}, 'key')
event.target.source.add({x: 'value2', y: 'zzz2', z: 2.71, foobar: 12}, 'key2')
store.createIndex('indexWhileAddIsInFlight', 'x')
store.createIndex('indexWithWeirdKeyPath', 'foobar')
Add data which doesn't have a key in the z index.
event.target.source.add({x: 'value3', y: '456'}, 'key3')
Add data which has invalid key for y index, no key for the z index.
event.target.source.add({x: 'value4', y: null}, 'key4')
indexObject.getKey('value')
PASS event.target.result is "key"
indexObject2.getKey('zzz')
PASS event.target.result is "key"
indexObject3.get(2.71)
PASS event.target.result.x is "value2"
indexObject.get('value')
PASS event.target.result.x is "value"
PASS event.target.result.y is "zzz"
indexObject.getKey('does not exist')
PASS event.target.result is undefined
indexObject.get('does not exist')
PASS event.target.result is undefined
indexObject4.getKey('value2')
PASS event.target.result is "key2"
Verify that specifying an invalid direction raises an exception:
Expecting TypeError exception from indexObject.openKeyCursor(0, 'invalid-direction')
PASS Exception was thrown.
PASS indexObject.openKeyCursor(0, 'invalid-direction') threw TypeError: Failed to execute 'openKeyCursor' on 'IDBIndex': The provided value 'invalid-direction' is not a valid enum value of type IDBCursorDirection.
indexObject.openKeyCursor()
PASS event.target.source is indexObject
PASS event.target.result is non-null.
PASS event.target.result.key is "value"
PASS event.target.result.primaryKey is "key"
event.target.result.continue()
PASS event.target.result is non-null.
PASS event.target.result.key is "value2"
PASS event.target.result.primaryKey is "key2"
event.target.result.continue()
PASS event.target.result is non-null.
PASS event.target.result.key is "value3"
PASS event.target.result.primaryKey is "key3"
event.target.result.continue()
PASS event.target.result is non-null.
PASS event.target.result.key is "value4"
PASS event.target.result.primaryKey is "key4"
event.target.result.continue()
PASS event.target.result is null
Verify that specifying an invalid direction raises an exception:
Expecting TypeError exception from indexObject.openCursor(0, 'invalid-direction')
PASS Exception was thrown.
PASS indexObject.openCursor(0, 'invalid-direction') threw TypeError: Failed to execute 'openCursor' on 'IDBIndex': The provided value 'invalid-direction' is not a valid enum value of type IDBCursorDirection.
indexObject.openCursor()
PASS event.target.source is indexObject
PASS event.target.result is non-null.
PASS event.target.result.key is "value"
PASS event.target.result.value.x is "value"
PASS event.target.result.value.y is "zzz"
event.target.result.continue()
PASS event.target.result is non-null.
PASS event.target.result.key is "value2"
PASS event.target.result.value.x is "value2"
PASS event.target.result.value.y is "zzz2"
event.target.result.continue()
PASS event.target.result is non-null.
PASS event.target.result.key is "value3"
PASS event.target.result.value.x is "value3"
PASS event.target.result.value.y is "456"
event.target.result.continue()
PASS event.target.result is non-null.
PASS event.target.result.key is "value4"
PASS event.target.result.value.x is "value4"
PASS event.target.result.value.y is null
event.target.result.continue()
PASS event.target.result is null
request = indexObject.count()
PASS event.target.result is 4
request = indexObject2.count()
PASS event.target.result is 3
request = indexObject3.count()
PASS event.target.result is 2
Passing an invalid key into indexObject.get({}).
Expecting exception from indexObject.get({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'get' on 'IDBIndex': The parameter is not a valid key.
Passing an invalid key into indexObject.getKey({}).
Expecting exception from indexObject.getKey({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'getKey' on 'IDBIndex': The parameter is not a valid key.
PASS successfullyParsed is true
TEST COMPLETE