62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
// 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');
|