Revision 3b627befed3cfdb16b26f648899f1f02743c6778 authored by Jan-Ivar Bruaroey on 30 July 2018, 03:24:46 UTC, committed by moz-wptsync-bot on 30 July 2018, 15:06:49 UTC
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1478367
gecko-commit: 61261702f7ac3e0fea9f6903e328b4bf3a529255
gecko-integration-branch: autoland
gecko-reviewers: bwc
1 parent 390fa1b
Raw File
idbcursor-advance-exception-order.html
<!doctype html>
<meta charset=utf-8>
<title>IndexedDB: IDBCursor advance() Exception Ordering</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#dom-idbcursor-advance">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support.js"></script>
<script>

indexeddb_test(
  (t, db) => {
    const store = db.createObjectStore('s');
    store.put('value', 'key');
  },
  (t, db) => {
    const tx = db.transaction('s');
    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(new 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('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');
    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('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'
);

</script>
back to top