| 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 |
| |