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: The object can 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