| // META: global=window,worker |
| // META: title=IndexedDB: IDBDatabase transaction() Exception Ordering |
| // META: script=resources/support.js |
| |
| // Spec: https://w3c.github.io/IndexedDB/#dom-idbdatabase-transaction |
| |
| 'use strict'; |
| |
| indexeddb_test( |
| (t, db) => { |
| db.createObjectStore('s'); |
| }, |
| (t, db) => { |
| db.close(); |
| assert_throws_dom( |
| 'InvalidStateError', () => db.transaction('no-such-store'), |
| '"Connection is closed" check (InvalidStateError) should precede ' + |
| '"store names" check (NotFoundError)'); |
| t.done(); |
| }, |
| 'IDBDatabase.transaction exception order: InvalidStateError vs. NotFoundError'); |
| |
| indexeddb_test( |
| (t, db) => { |
| db.createObjectStore('s'); |
| }, |
| (t, db) => { |
| db.close(); |
| assert_throws_dom( |
| 'InvalidStateError', () => db.transaction([]), |
| '"Connection is closed" check (InvalidStateError) should precede ' + |
| '"stores is empty" check (InvalidAccessError)'); |
| t.done(); |
| }, |
| 'IDBDatabase.transaction exception order: InvalidStateError vs. InvalidAccessError'); |
| |
| // Verify that the invalid mode check actually throws an exception. |
| indexeddb_test( |
| (t, db) => { |
| db.createObjectStore('s'); |
| }, |
| (t, db) => { |
| assert_throws_js( |
| TypeError, () => db.transaction('s', 'versionchange'), |
| '"invalid mode" check should throw TypeError'); |
| t.done(); |
| }, |
| 'IDBDatabase.transaction throws exception on invalid mode'); |
| |
| indexeddb_test( |
| (t, db) => { |
| db.createObjectStore('s'); |
| }, |
| (t, db) => { |
| assert_throws_dom( |
| 'NotFoundError', |
| () => db.transaction('no-such-store', 'versionchange'), |
| '"No such store" check (NotFoundError) should precede ' + |
| '"invalid mode" check (TypeError)'); |
| t.done(); |
| }, |
| 'IDBDatabase.transaction exception order: NotFoundError vs. TypeError'); |