Test the basics of IndexedDB's IDBObjectStore.

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)

prepareDatabase():
store = db.createObjectStore('storeName', null)
storeNames = db.objectStoreNames
PASS 'name' in store is true
PASS 'keyPath' in store is true
PASS 'indexNames' in store is true
PASS 'transaction' in store is true
PASS 'autoIncrement' in store is true
PASS 'put' in store is true
PASS typeof store.put is "function"
PASS 'add' in store is true
PASS typeof store.add is "function"
PASS 'delete' in store is true
PASS typeof store.delete is "function"
PASS 'get' in store is true
PASS typeof store.get is "function"
PASS 'clear' in store is true
PASS typeof store.clear is "function"
PASS 'openCursor' in store is true
PASS typeof store.openCursor is "function"
PASS 'createIndex' in store is true
PASS typeof store.createIndex is "function"
PASS 'index' in store is true
PASS typeof store.index is "function"
PASS 'deleteIndex' in store is true
PASS typeof store.deleteIndex is "function"
PASS 'count' in store is true
PASS typeof store.count is "function"
PASS store.name is "storeName"
PASS store.keyPath is null
PASS store.autoIncrement is false
PASS storeNames.contains('storeName') is true
PASS storeNames.length is 1
PASS db.createObjectStore('storeWithKeyPath', {keyPath: 'path'}).keyPath is "path"
PASS db.createObjectStore('storeWithKeyGenerator', {autoIncrement: true}).autoIncrement is true
Ask for an index that doesn't exist:
Expecting exception from store.index('asdf')
PASS Exception was thrown.
PASS code is DOMException.NOT_FOUND_ERR
PASS ename is 'NotFoundError'
Exception message: Failed to execute 'index' on 'IDBObjectStore': The specified index was not found.
createIndex():
index = store.createIndex('indexName', 'x', {unique: true})
PASS index is non-null.
PASS store.indexNames.contains('indexName') is true
index = store.index('indexName')
PASS index is non-null.
Ask for an index that doesn't exist:
Expecting exception from store.index('asdf')
PASS Exception was thrown.
PASS code is DOMException.NOT_FOUND_ERR
PASS ename is 'NotFoundError'
Exception message: Failed to execute 'index' on 'IDBObjectStore': The specified index was not found.
indexedDB.open(dbname, 2)
db.close()
PASS db.version is 2
setVersionTrans = event.target.transaction
PASS setVersionTrans is non-null.
store = setVersionTrans.objectStore('storeName')
index = store.createIndex('indexFail', 'x')
PASS db.version is 1
PASS store.transaction is setVersionTrans
PASS store.indexNames is ['indexName']
PASS store.indexNames.length is 1
PASS store.indexNames.contains('') is false
PASS store.indexNames.contains('indexFail') is false
PASS store.indexNames.contains('indexName') is true
PASS store.indexNames[0] is "indexName"
PASS store.indexNames[1] is undefined.
PASS store.indexNames[100] is undefined.
PASS store.indexNames.item(1) is null
PASS store.indexNames.item(100) is null

openAgain():
indexedDB.open(dbname)

addData():
db = event.target.result
transaction = db.transaction(['storeName'], 'readwrite')
store = transaction.objectStore('storeName')
Try to insert data with a Date key:
store.add({x: 'foo'}, testDate)
Try to insert a value not handled by structured clone:
Expecting exception from store.add({x: 'bar', y: self}, 'bar')
PASS Exception was thrown.
PASS code is DOMException.DATA_CLONE_ERR
Exception message: Failed to store record in an IDBObjectStore: An object could not be cloned.
Try to insert data where key path yields a Date key:
store.add({x: testDateB, y: 'value'}, 'key')
addSuccess():
PASS event.target.result is "key"
event.target.source.add({x: 'foo'}, 'zzz')
addAgainFailure():
PASS event.target.error.name is 'ConstraintError'
event.preventDefault()
db.transaction(['storeName'], 'readwrite')
store = transaction.objectStore('storeName')
store.add({x: 'somevalue'}, 'somekey')
Expecting exception from store.add({x: 'othervalue'}, null)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
db.transaction(['storeName'], 'readwrite')
store = transaction.objectStore('storeName')
Ensure invalid key pointed at by index keyPath is ignored
store.add({x: null}, 'validkey')
db.transaction(['storeName'], 'readwrite')
store = transaction.objectStore('storeName')
store.get('key')
getSuccess():
PASS event.target.result.y is "value"
store = event.target.source
store.get(testDate)
getSuccessDateKey():
PASS event.target.result.x is "foo"
store.delete('key')
removeSuccess():
PASS event.target.result is undefined
store.delete('key')
removeSuccessButNotThere():
PASS event.target.result is undefined
store = event.target.source
Passing an invalid key into store.get().
Expecting exception from store.get({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'get' on 'IDBObjectStore': The parameter is not a valid key.
Passing an invalid key into store.delete().
Expecting exception from store.delete({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to execute 'delete' on 'IDBObjectStore': The parameter is not a valid key.
Passing an invalid key into store.add().
Expecting exception from store.add(null, {})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
Passing an invalid key into store.put().
Expecting exception from store.put(null, {})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.

testPreConditions():
indexedDB.open(dbname, 3)

upgradeNeeded():
storeWithInLineKeys = db.createObjectStore('storeWithInLineKeys', {keyPath: 'key'})
storeWithOutOfLineKeys = db.createObjectStore('storeWithOutIOfLineKeys')
storeWithIndex = db.createObjectStore('storeWithIndex')
index = storeWithIndex.createIndex('indexName', 'indexKey')

IDBObjectStore.put()
The object store uses in-line keys and the key parameter was provided.
Expecting exception from storeWithInLineKeys.put({key: 1}, 'key')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The object store uses in-line keys and the key parameter was provided.
The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
Expecting exception from storeWithOutOfLineKeys.put({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
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.
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.
Expecting exception from storeWithInLineKeys.put({key: null})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
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.
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.
Expecting exception from storeWithInLineKeys.put({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: Evaluating the object store's key path did not yield a value.
The key parameter was provided but does not contain a valid key.
Expecting exception from storeWithOutOfLineKeys.put({}, null)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.

IDBObjectStore.add()
The object store uses in-line keys and the key parameter was provided.
Expecting exception from storeWithInLineKeys.add({key: 1}, 'key')
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The object store uses in-line keys and the key parameter was provided.
The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
Expecting exception from storeWithOutOfLineKeys.add({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
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.
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.
Expecting exception from storeWithInLineKeys.add({key: null})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
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.
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.
Expecting exception from storeWithInLineKeys.add({})
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: Evaluating the object store's key path did not yield a value.
The key parameter was provided but does not contain a valid key.
Expecting exception from storeWithOutOfLineKeys.add({}, null)
PASS Exception was thrown.
PASS code is 0
PASS ename is 'DataError'
Exception message: Failed to store record in an IDBObjectStore: The parameter is not a valid key.
PASS successfullyParsed is true

TEST COMPLETE

