<!doctype html>
<meta charset=utf-8>
<title>IndexedDB: IDBObjectStore delete() Exception Ordering</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-delete">
<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');
    const store2 = db.createObjectStore('s2');

    db.deleteObjectStore('s2');

    setTimeout(t.step_func(() => {
      assert_throws(
        'InvalidStateError', () => { store2.delete('key'); },
        '"has been deleted" check (InvalidStateError) should precede ' +
        '"not active" check (TransactionInactiveError)');
      t.done();
    }), 0);
  },
  (t, db) => {},
  'IDBObjectStore.delete exception order: ' +
  'InvalidStateError vs. TransactionInactiveError'
);

indexeddb_test(
  (t, db) => {
    const store = db.createObjectStore('s');
  },
  (t, db) => {
    const tx = db.transaction('s', 'readonly');
    const store = tx.objectStore('s');

    setTimeout(t.step_func(() => {
      assert_throws(
        'TransactionInactiveError', () => { store.delete('key'); },
        '"not active" check (TransactionInactiveError) should precede ' +
        '"read only" check (ReadOnlyError)');
      t.done();
    }), 0);
  },
  'IDBObjectStore.delete exception order: ' +
  'TransactionInactiveError vs. ReadOnlyError'
);

indexeddb_test(
  (t, db) => {
    const store = db.createObjectStore('s');
  },
  (t, db) => {
    const tx = db.transaction('s', 'readonly');
    const store = tx.objectStore('s');

    assert_throws(
      'ReadOnlyError', () => { store.delete({}); },
      '"read only" check (ReadOnlyError) should precede ' +
      'key/data check (DataError)');

    t.done();
  },
  'IDBObjectStore.delete exception order: ' +
  'ReadOnlyError vs. DataError'
);

</script>
