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

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


Starting worker: resources/objectstore-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] store = db.createObjectStore('storeName', null)
[Worker] storeNames = db.objectStoreNames
PASS [Worker] 'name' in store is true
PASS [Worker] 'keyPath' in store is true
PASS [Worker] 'indexNames' in store is true
PASS [Worker] 'transaction' in store is true
PASS [Worker] 'autoIncrement' in store is true
PASS [Worker] 'put' in store is true
PASS [Worker] typeof store.put is "function"
PASS [Worker] 'add' in store is true
PASS [Worker] typeof store.add is "function"
PASS [Worker] 'delete' in store is true
PASS [Worker] typeof store.delete is "function"
PASS [Worker] 'get' in store is true
PASS [Worker] typeof store.get is "function"
PASS [Worker] 'clear' in store is true
PASS [Worker] typeof store.clear is "function"
PASS [Worker] 'openCursor' in store is true
PASS [Worker] typeof store.openCursor is "function"
PASS [Worker] 'createIndex' in store is true
PASS [Worker] typeof store.createIndex is "function"
PASS [Worker] 'index' in store is true
PASS [Worker] typeof store.index is "function"
PASS [Worker] 'deleteIndex' in store is true
PASS [Worker] typeof store.deleteIndex is "function"
PASS [Worker] 'count' in store is true
PASS [Worker] typeof store.count is "function"
PASS [Worker] store.name is "storeName"
PASS [Worker] store.keyPath is null
PASS [Worker] store.autoIncrement is false
PASS [Worker] storeNames.contains('storeName') is true
PASS [Worker] storeNames.length is 1
PASS [Worker] db.createObjectStore('storeWithKeyPath', {keyPath: 'path'}).keyPath is "path"
PASS [Worker] db.createObjectStore('storeWithKeyGenerator', {autoIncrement: true}).autoIncrement is true
[Worker] Ask for an index that doesn't exist:
[Worker] Expecting exception from store.index('asdf')
PASS [Worker] Exception was thrown.
PASS [Worker] code is DOMException.NOT_FOUND_ERR
PASS [Worker] ename is 'NotFoundError'
[Worker] Exception message: Failed to execute 'index' on 'IDBObjectStore': The specified index was not found.
[Worker] createIndex():
[Worker] index = store.createIndex('indexName', 'x', {unique: true})
PASS [Worker] index is non-null.
PASS [Worker] store.indexNames.contains('indexName') is true
[Worker] index = store.index('indexName')
PASS [Worker] index is non-null.
[Worker] Ask for an index that doesn't exist:
[Worker] Expecting exception from store.index('asdf')
PASS [Worker] Exception was thrown.
PASS [Worker] code is DOMException.NOT_FOUND_ERR
PASS [Worker] ename is 'NotFoundError'
[Worker] Exception message: Failed to execute 'index' on 'IDBObjectStore': The specified index was not found.
[Worker] indexedDB.open(dbname, 2)
[Worker] db.close()
PASS [Worker] db.version is 2
[Worker] setVersionTrans = event.target.transaction
PASS [Worker] setVersionTrans is non-null.
[Worker] store = setVersionTrans.objectStore('storeName')
[Worker] index = store.createIndex('indexFail', 'x')
PASS [Worker] db.version is 1
PASS [Worker] store.transaction is setVersionTrans
PASS [Worker] store.indexNames is ['indexName']
PASS [Worker] store.indexNames.length is 1
PASS [Worker] store.indexNames.contains('') is false
PASS [Worker] store.indexNames.contains('indexFail') is false
PASS [Worker] store.indexNames.contains('indexName') is true
PASS [Worker] store.indexNames[0] is "indexName"
PASS [Worker] store.indexNames[1] is undefined.
PASS [Worker] store.indexNames[100] is undefined.
PASS [Worker] store.indexNames.item(1) is null
PASS [Worker] store.indexNames.item(100) is null
[Worker]
[Worker] openAgain():
[Worker] indexedDB.open(dbname)
[Worker]
[Worker] addData():
[Worker] db = event.target.result
[Worker] transaction = db.transaction(['storeName'], 'readwrite')
[Worker] store = transaction.objectStore('storeName')
[Worker] Try to insert data with a Date key:
[Worker] store.add({x: 'foo'}, testDate)
[Worker] Try to insert a value not handled by structured clone:
[Worker] Expecting exception from store.add({x: 'bar', y: self}, 'bar')
PASS [Worker] Exception was thrown.
PASS [Worker] code is DOMException.DATA_CLONE_ERR
[Worker] Exception message: The object can not be cloned.
[Worker] Try to insert data where key path yields a Date key:
[Worker] store.add({x: testDateB, y: 'value'}, 'key')
[Worker] addSuccess():
PASS [Worker] event.target.result is "key"
[Worker] event.target.source.add({x: 'foo'}, 'zzz')
[Worker] addAgainFailure():
PASS [Worker] event.target.error.name is 'ConstraintError'
[Worker] event.preventDefault()
[Worker] db.transaction(['storeName'], 'readwrite')
[Worker] store = transaction.objectStore('storeName')
[Worker] store.add({x: 'somevalue'}, 'somekey')
[Worker] Expecting exception from store.add({x: 'othervalue'}, null)
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
[Worker] db.transaction(['storeName'], 'readwrite')
[Worker] store = transaction.objectStore('storeName')
[Worker] Ensure invalid key pointed at by index keyPath is ignored
[Worker] store.add({x: null}, 'validkey')
[Worker] db.transaction(['storeName'], 'readwrite')
[Worker] store = transaction.objectStore('storeName')
[Worker] store.get('key')
[Worker] getSuccess():
PASS [Worker] event.target.result.y is "value"
[Worker] store = event.target.source
[Worker] store.get(testDate)
[Worker] getSuccessDateKey():
PASS [Worker] event.target.result.x is "foo"
[Worker] store.delete('key')
[Worker] removeSuccess():
PASS [Worker] event.target.result is undefined
[Worker] store.delete('key')
[Worker] removeSuccessButNotThere():
PASS [Worker] event.target.result is undefined
[Worker] store = event.target.source
[Worker] Passing an invalid key into store.get().
[Worker] Expecting exception from store.get({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to execute 'get' on 'IDBObjectStore': The parameter is not a valid key.
[Worker] Passing an invalid key into store.delete().
[Worker] Expecting exception from store.delete({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to execute 'delete' on 'IDBObjectStore': The parameter is not a valid key.
[Worker] Passing an invalid key into store.add().
[Worker] Expecting exception from store.add(null, {})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
[Worker] Passing an invalid key into store.put().
[Worker] Expecting exception from store.put(null, {})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
[Worker]
[Worker] testPreConditions():
[Worker] indexedDB.open(dbname, 3)
[Worker]
[Worker] upgradeNeeded():
[Worker] storeWithInLineKeys = db.createObjectStore('storeWithInLineKeys', {keyPath: 'key'})
[Worker] storeWithOutOfLineKeys = db.createObjectStore('storeWithOutIOfLineKeys')
[Worker] storeWithIndex = db.createObjectStore('storeWithIndex')
[Worker] index = storeWithIndex.createIndex('indexName', 'indexKey')
[Worker]
[Worker] IDBObjectStore.put()
[Worker] The object store uses in-line keys and the key parameter was provided.
[Worker] Expecting exception from storeWithInLineKeys.put({key: 1}, 'key')
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The object store uses in-line keys and the key parameter was provided.
[Worker] The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
[Worker] Expecting exception from storeWithOutOfLineKeys.put({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
[Worker] The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.
[Worker] Expecting exception from storeWithInLineKeys.put({key: null})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: Evaluating the object store's key path yielded a value that is not a valid key.
[Worker] The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.
[Worker] Expecting exception from storeWithInLineKeys.put({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: Evaluating the object store's key path did not yield a value.
[Worker] The key parameter was provided but does not contain a valid key.
[Worker] Expecting exception from storeWithOutOfLineKeys.put({}, null)
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
[Worker]
[Worker] IDBObjectStore.add()
[Worker] The object store uses in-line keys and the key parameter was provided.
[Worker] Expecting exception from storeWithInLineKeys.add({key: 1}, 'key')
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The object store uses in-line keys and the key parameter was provided.
[Worker] The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
[Worker] Expecting exception from storeWithOutOfLineKeys.add({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
[Worker] The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.
[Worker] Expecting exception from storeWithInLineKeys.add({key: null})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: Evaluating the object store's key path yielded a value that is not a valid key.
[Worker] The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.
[Worker] Expecting exception from storeWithInLineKeys.add({})
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: Evaluating the object store's key path did not yield a value.
[Worker] The key parameter was provided but does not contain a valid key.
[Worker] Expecting exception from storeWithOutOfLineKeys.add({}, null)
PASS [Worker] Exception was thrown.
PASS [Worker] code is 0
PASS [Worker] ename is 'DataError'
[Worker] Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
PASS successfullyParsed is true

TEST COMPLETE

