<!DOCTYPE html>
<title>IndexedDB: IDBCursor continue() Exception Ordering</title>
<meta charset=utf-8>
<link rel="help" href="https://w3c.github.io/IndexedDB/#dom-idbcursor-continue">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support.js"></script>
<script>

indexeddb_test(
  (t, db) => {
    const s = db.createObjectStore('s');
    s.put('value', 'key');
  },
  (t, db) => {
    const s = db.transaction('s', 'readonly').objectStore('s');
    const r = s.openKeyCursor();
    r.onsuccess = t.step_func(() => {
      r.onsuccess = null;
      const cursor = r.result;
      setTimeout(t.step_func(() => {
        assert_throws('TransactionInactiveError', () => {
          cursor.continue({not: "a valid key"});
        }, '"Transaction inactive" check (TransactionInactiveError) ' +
           'should precede "invalid key" check (DataError)');
        t.done();
      }), 0);
    });
  },
  'IDBCursor.continue exception order: TransactionInactiveError vs. DataError'
);

indexeddb_test(
  (t, db) => {
    const s = db.createObjectStore('s');
    s.put('value', 'key');
  },
  (t, db) => {
    const s = db.transaction('s', 'readonly').objectStore('s');
    const r = s.openKeyCursor();
    r.onsuccess = t.step_func(() => {
      r.onsuccess = null;
      const cursor = r.result;
      cursor.continue();
      r.onsuccess = t.step_func(() => {
        setTimeout(t.step_func(() => {
          assert_throws('TransactionInactiveError', () => {
            cursor.continue();
          }, '"Transaction inactive" check (TransactionInactiveError) ' +
             'should precede "got value flag" check (InvalidStateError)');
          t.done();
        }), 0);
      });
    });
  },
  'IDBCursor.continue exception order: TransactionInactiveError vs. InvalidStateError'
);

indexeddb_test(
  (t, db) => {
    const s = db.createObjectStore('s');
    s.put('value', 'key');
  },
  (t, db) => {
    const s = db.transaction('s', 'readonly').objectStore('s');
    const r = s.openKeyCursor();
    r.onsuccess = t.step_func(() => {
      r.onsuccess = null;
      const cursor = r.result;
      cursor.continue();
      assert_throws('InvalidStateError', () => {
        cursor.continue({not: "a valid key"});
      }, '"got value flag" check (InvalidStateError) should precede ' +
         '"invalid key" check (DataError)');
      t.done();
    });
  },
  'IDBCursor.continue exception order: InvalidStateError vs. DataError'
);

</script>
