[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] dbname = "objectstore-basics.js"
[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] 'openKeyCursor' in store is true
PASS [Worker] typeof store.openKeyCursor 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: Failed to execute 'add' on 'IDBObjectStore': #<DedicatedWorkerGlobalScope> could 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 execute 'add' on '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 execute 'add' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'add' on '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 execute 'add' on '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 execute 'add' on '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 execute 'add' on '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 execute 'add' on 'IDBObjectStore': The parameter is not a valid key.
PASS successfullyParsed is true
TEST COMPLETE