// META: global=window,worker // META: title=IndexedDB: IDBCursor advance() Exception Ordering // META: script=resources/support.js // Spec: https://w3c.github.io/IndexedDB/#dom-idbcursor-advance 'use strict'; indexeddb_test( (t, db) => { const store = db.createObjectStore('s'); store.put('value', 'key'); }, (t, db) => { const tx = db.transaction('s', 'readonly'); const store = tx.objectStore('s'); const r = store.openKeyCursor(); r.onsuccess = t.step_func(() => { r.onsuccess = null; const cursor = r.result; setTimeout( t.step_func(() => { assert_throws_js( TypeError, () => { cursor.advance(0); }, '"zero" check (TypeError) should precede ' + '"not active" check (TransactionInactiveError)'); t.done(); }), 0); }); }, 'IDBCursor.advance exception order: TypeError vs. TransactionInactiveError'); indexeddb_test( (t, db) => { const store = db.createObjectStore('s'); const s = db.createObjectStore('s2'); s.put('value', 'key'); const r = s.openKeyCursor(); r.onsuccess = t.step_func(() => { r.onsuccess = null; const cursor = r.result; db.deleteObjectStore('s2'); setTimeout( t.step_func(() => { assert_throws_dom( 'TransactionInactiveError', () => { cursor.advance(1); }, '"not active" check (TransactionInactiveError) ' + 'should precede "deleted" check (InvalidStateError)'); t.done(); }), 0); }); }, (t, db) => {}, 'IDBCursor.advance exception order: ' + 'TransactionInactiveError vs. InvalidStateError #1'); indexeddb_test( (t, db) => { const store = db.createObjectStore('s'); store.put('value', 'key'); }, (t, db) => { const tx = db.transaction('s', 'readonly'); const store = tx.objectStore('s'); const r = store.openKeyCursor(); r.onsuccess = t.step_func(() => { r.onsuccess = null; const cursor = r.result; cursor.advance(1); setTimeout( t.step_func(() => { assert_throws_dom( 'TransactionInactiveError', () => { cursor.advance(1); }, '"not active" check (TransactionInactiveError) ' + 'should precede "got value" check (InvalidStateError)'); t.done(); }), 0); }); }, 'IDBCursor.advance exception order: ' + 'TransactionInactiveError vs. InvalidStateError #2');