| Test IndexedDB's key generator behavior. |
| |
| 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; |
| |
| |
| Verify that each object store has an independent key generator. |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| store1 = db.createObjectStore('store1', { autoIncrement: true }) |
| store1.put('a') |
| request = store.get(1) |
| store2 = db.createObjectStore('store2', { autoIncrement: true }) |
| store2.put('a') |
| request = store.get(1) |
| store1.put('b') |
| request = store.get(2) |
| store2.put('b') |
| request = store.get(2) |
| PASS Got "a" for key: 1 |
| PASS Got "a" for key: 1 |
| PASS Got "b" for key: 2 |
| PASS Got "b" for key: 2 |
| db.close() |
| |
| Verify that the key generator is not updated if insertion fails |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| store = db.createObjectStore('store1', { autoIncrement: true }) |
| index = store.createIndex('index1', 'ix', { unique: true }) |
| store.put({ ix: 'a'}) |
| request = store.get(1) |
| store.put({ ix: 'a'}) |
| store.put({ ix: 'b'}) |
| request = store.get(2) |
| PASS Got {"ix":"a"} for key: 1 |
| PASS Got {"ix":"b"} for key: 2 |
| db.close() |
| |
| Verify that the key generator is not affected by item removal (delete or clear). |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| store = db.createObjectStore('store1', { autoIncrement: true }) |
| store.put('a') |
| request = store.get(1) |
| store.delete(1) |
| store.put('b') |
| request = store.get(2) |
| store.clear() |
| store.put('c') |
| request = store.get(3) |
| store.delete(IDBKeyRange.lowerBound(0)) |
| store.put('d') |
| request = store.get(4) |
| PASS Got "a" for key: 1 |
| PASS Got "b" for key: 2 |
| PASS Got "c" for key: 3 |
| PASS Got "d" for key: 4 |
| db.close() |
| |
| Verify that the key generator is only set if and only if a numeric key greater than the last generated key is used. |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| store = db.createObjectStore('store1', { autoIncrement: true }) |
| store.put('a') |
| request = store.get(1) |
| store.put('b', 3) |
| request = store.get(3) |
| store.put('c') |
| request = store.get(4) |
| store.put('d', -10) |
| request = store.get(-10) |
| store.put('e') |
| request = store.get(5) |
| store.put('f', 6.00001) |
| request = store.get(6.00001) |
| store.put('g') |
| request = store.get(7) |
| store.put('f', 8.9999) |
| request = store.get(8.9999) |
| store.put('g') |
| request = store.get(9) |
| store.put('h', 'foo') |
| request = store.get("foo") |
| store.put('i') |
| request = store.get(10) |
| store.put('j', [1000]) |
| request = store.get([1000]) |
| store.put('k') |
| request = store.get(11) |
| PASS Got "a" for key: 1 |
| PASS Got "b" for key: 3 |
| PASS Got "c" for key: 4 |
| PASS Got "d" for key: -10 |
| PASS Got "e" for key: 5 |
| PASS Got "f" for key: 6.00001 |
| PASS Got "g" for key: 7 |
| PASS Got "f" for key: 8.9999 |
| PASS Got "g" for key: 9 |
| PASS Got "h" for key: "foo" |
| PASS Got "i" for key: 10 |
| PASS Got "j" for key: [1000] |
| PASS Got "k" for key: 11 |
| db.close() |
| |
| Verify that aborting a transaction resets the key generator state. |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| trans1 = db.transaction(['store'], 'readwrite') |
| store_t1 = trans1.objectStore('store') |
| store_t1.put('a') |
| request = store.get(1) |
| store_t1.put('b') |
| request = store.get(2) |
| PASS Got "a" for key: 1 |
| PASS Got "b" for key: 2 |
| aborting... |
| trans1.abort() |
| aborted! |
| trans2 = db.transaction(['store'], 'readwrite') |
| store_t2 = trans2.objectStore('store') |
| store_t2.put('c') |
| request = store.get(1) |
| store_t2.put('d') |
| request = store.get(2) |
| PASS Got "c" for key: 1 |
| PASS Got "d" for key: 2 |
| db.close() |
| |
| Verify that keys above 2^53 result in errors. |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| trans1 = db.transaction(['store'], 'readwrite') |
| store_t1 = trans1.objectStore('store') |
| store_t1.put('a') |
| request = store.get(1) |
| store_t1.put('b', 9007199254740992) |
| request = store.get(9007199254740992) |
| store_t1.put('c') |
| store_t1.put('d', 2) |
| request = store.get(2) |
| PASS Got "a" for key: 1 |
| PASS Got "b" for key: 9007199254740992 |
| Error event fired auto-incrementing past 2^53 (as expected) |
| PASS event.target.error.name is 'ConstraintError' |
| event.preventDefault() |
| PASS Got "d" for key: 2 |
| db.close() |
| |
| Verify that keys above 2^64 result in errors. |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| trans1 = db.transaction(['store'], 'readwrite') |
| store_t1 = trans1.objectStore('store') |
| store_t1.put('a') |
| request = store.get(1) |
| store_t1.put('b', Math.pow(2, 64)) |
| request = store.get(18446744073709552000) |
| store_t1.put('c') |
| store_t1.put('d', 2) |
| request = store.get(2) |
| PASS Got "a" for key: 1 |
| PASS Got "b" for key: 18446744073709552000 |
| Error event fired auto-incrementing past 2^64 (as expected) |
| PASS event.target.error.name is 'ConstraintError' |
| event.preventDefault() |
| PASS Got "d" for key: 2 |
| db.close() |
| |
| Ensure key generator state is maintained across connections: |
| indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB; |
| |
| indexedDB.deleteDatabase(dbname) |
| indexedDB.open(dbname) |
| db.createObjectStore('store', {autoIncrement: true}) |
| |
| trans = db.transaction('store', 'readwrite') |
| request = trans.objectStore('store').put('value1') |
| PASS request.result is 1 |
| trans.objectStore('store').clear() |
| db.close() |
| |
| request = indexedDB.open(dbname) |
| db = request.result |
| trans = db.transaction('store', 'readwrite') |
| request = trans.objectStore('store').put('value2') |
| PASS request.result is 2 |
| |
| PASS successfullyParsed is true |
| |
| TEST COMPLETE |
| |