[Worker] Test the basics of IndexedDB's webkitIDBIndex.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


Starting worker: resources/index-basics.js
[Worker] indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
[Worker] 
[Worker] indexedDB.deleteDatabase(dbname)
[Worker] indexedDB.open(dbname)
[Worker] 
[Worker] prepareDatabase():
[Worker] db.createObjectStore('storeName', null)
[Worker] store.createIndex('indexName', 'x')
[Worker] store.createIndex('indexName2', 'y', {unique: false})
[Worker] store.createIndex('zIndex', 'z', {unique: true})
PASS [Worker] store.createIndex('index4', 'path', undefined) did not throw exception.
PASS [Worker] indexObject2.unique is false
PASS [Worker] indexObject3.unique is true
[Worker] Expecting TypeError exception from store.createIndex('failureIndex', 'zzz', true)
PASS [Worker] Exception was thrown.
PASS [Worker] store.createIndex('failureIndex', 'zzz', true) threw TypeError: Type error
[Worker] Expecting TypeError exception from store.createIndex('failureIndex', 'zzz', 'string')
PASS [Worker] Exception was thrown.
PASS [Worker] store.createIndex('failureIndex', 'zzz', 'string') threw TypeError: Type error
PASS [Worker] 'name' in indexObject is true
PASS [Worker] indexObject.name is "indexName"
PASS [Worker] 'objectStore' in indexObject is true
PASS [Worker] indexObject.objectStore.name is "storeName"
PASS [Worker] 'keyPath' in indexObject is true
PASS [Worker] indexObject.keyPath is "x"
PASS [Worker] 'unique' in indexObject is true
PASS [Worker] 'multiEntry' in indexObject is true
PASS [Worker] indexObject.unique is false
PASS [Worker] indexObject.multiEntry is false
PASS [Worker] 'openKeyCursor' in indexObject is true
PASS [Worker] typeof indexObject.openKeyCursor is "function"
PASS [Worker] 'openCursor' in indexObject is true
PASS [Worker] typeof indexObject.openCursor is "function"
PASS [Worker] 'getKey' in indexObject is true
PASS [Worker] typeof indexObject.getKey is "function"
PASS [Worker] 'get' in indexObject is true
PASS [Worker] typeof indexObject.get is "function"
PASS [Worker] 'count' in indexObject is true
PASS [Worker] typeof indexObject.count is "function"
[Worker] store.add({x: 'value', y: 'zzz', z: 2.72}, 'key')
[Worker] event.target.source.add({x: 'value2', y: 'zzz2', z: 2.71, foobar: 12}, 'key2')
[Worker] store.createIndex('indexWhileAddIsInFlight', 'x')
[Worker] store.createIndex('indexWithWeirdKeyPath', 'foobar')
[Worker] Add data which doesn't have a key in the z index.
[Worker] event.target.source.add({x: 'value3', y: '456'}, 'key3')
[Worker] Add data which has invalid key for y index, no key for the z index.
[Worker] event.target.source.add({x: 'value4', y: null}, 'key4')
[Worker] indexObject.getKey('value')
PASS [Worker] event.target.result is "key"
[Worker] indexObject2.getKey('zzz')
PASS [Worker] event.target.result is "key"
[Worker] indexObject3.get(2.71)
PASS [Worker] event.target.result.x is "value2"
[Worker] indexObject.get('value')
PASS [Worker] event.target.result.x is "value"
PASS [Worker] event.target.result.y is "zzz"
[Worker] indexObject.getKey('does not exist')
PASS [Worker] event.target.result is undefined
[Worker] indexObject.get('does not exist')
PASS [Worker] event.target.result is undefined
[Worker] indexObject4.getKey('value2')
PASS [Worker] event.target.result is "key2"
[Worker] 
[Worker] Verify that specifying an invalid direction raises an exception:
[Worker] Expecting TypeError exception from indexObject.openKeyCursor(0, 'invalid-direction')
PASS [Worker] Exception was thrown.
PASS [Worker] indexObject.openKeyCursor(0, 'invalid-direction') threw TypeError: Argument 2 ('direction') to IDBIndex.openKeyCursor must be one of: "next", "nextunique", "prev", "prevunique"
[Worker] 
[Worker] indexObject.openKeyCursor()
PASS [Worker] event.target.source is indexObject
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value"
PASS [Worker] event.target.result.primaryKey is "key"
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value2"
PASS [Worker] event.target.result.primaryKey is "key2"
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value3"
PASS [Worker] event.target.result.primaryKey is "key3"
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value4"
PASS [Worker] event.target.result.primaryKey is "key4"
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is null
[Worker] 
[Worker] Verify that specifying an invalid direction raises an exception:
[Worker] Expecting TypeError exception from indexObject.openCursor(0, 'invalid-direction')
PASS [Worker] Exception was thrown.
PASS [Worker] indexObject.openCursor(0, 'invalid-direction') threw TypeError: Argument 2 ('direction') to IDBIndex.openCursor must be one of: "next", "nextunique", "prev", "prevunique"
[Worker] 
[Worker] indexObject.openCursor()
PASS [Worker] event.target.source is indexObject
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value"
PASS [Worker] event.target.result.value.x is "value"
PASS [Worker] event.target.result.value.y is "zzz"
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value2"
PASS [Worker] event.target.result.value.x is "value2"
PASS [Worker] event.target.result.value.y is "zzz2"
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value3"
PASS [Worker] event.target.result.value.x is "value3"
PASS [Worker] event.target.result.value.y is "456"
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is non-null.
PASS [Worker] event.target.result.key is "value4"
PASS [Worker] event.target.result.value.x is "value4"
PASS [Worker] event.target.result.value.y is null
[Worker] event.target.result.continue()
PASS [Worker] event.target.result is null
[Worker] request = indexObject.count()
PASS [Worker] event.target.result is 4
[Worker] request = indexObject2.count()
PASS [Worker] event.target.result is 3
[Worker] request = indexObject3.count()
PASS [Worker] event.target.result is 2
[Worker] Passing an invalid key into indexObject.get({}).
[Worker] Expecting exception from indexObject.get({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to execute 'get' on 'IDBIndex': The parameter is not a valid key.
[Worker] Passing an invalid key into indexObject.getKey({}).
[Worker] Expecting exception from indexObject.getKey({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to execute 'getKey' on 'IDBIndex': The parameter is not a valid key.
PASS successfullyParsed is true

TEST COMPLETE

