blob: 16fac6ac372793653fb541085482eec20e20bbd1 [file] [log] [blame]
Test the basics of IndexedDB's IDBObjectStore.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
dbname = "objectstore-basics.html"
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 'openKeyCursor' in store is true
PASS typeof store.openKeyCursor 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 execute 'add' on 'IDBObjectStore': #<Window> 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 execute 'add' on '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 execute 'add' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'put' on '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 execute 'add' on '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 execute 'add' on '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 execute 'add' on '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 execute 'add' on '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 execute 'add' on 'IDBObjectStore': The parameter is not a valid key.
PASS successfullyParsed is true
TEST COMPLETE