<!doctype html>
<meta charset=utf-8>
<title>IndexedDB: IDBObjectStore deleteIndex() Exception Ordering</title>
<link rel="help" href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-deleteindex">
<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.createIndex('i', 'keyPath');
  },
  (t, db) => {
    const tx = db.transaction('s');
    const store = tx.objectStore('s');

    setTimeout(t.step_func(() => {
      assert_throws(
        'InvalidStateError', () => { store.deleteIndex('i'); },
        '"running an upgrade transaction" check (InvalidStateError) ' +
        'should precede "not active" check (TransactionInactiveError)');
      t.done();
    }), 0);
  },
  'IDBObjectStore.deleteIndex exception order: ' +
  'InvalidStateError #1 vs. TransactionInactiveError'
);

indexeddb_test(
  (t, db) => {
    const store = db.createObjectStore('s');
    const index = store.createIndex('i', 'keyPath');

    db.deleteObjectStore('s');

    setTimeout(t.step_func(() => {
      assert_throws(
        'InvalidStateError', () => { store.deleteIndex('i'); },
        '"deleted" check (InvalidStateError) ' +
        'should precede "not active" check (TransactionInactiveError)');
      t.done();
    }), 0);
  },
  (t, db) => {},
  'IDBObjectStore.deleteIndex exception order: ' +
  'InvalidStateError #2 vs. TransactionInactiveError'
);

indexeddb_test(
  (t, db) => {
    const store = db.createObjectStore('s');

    setTimeout(t.step_func(() => {
      assert_throws(
        'TransactionInactiveError', () => { store.deleteIndex('nope'); },
        '"not active" check (TransactionInactiveError) should precede ' +
        '"name in store" check (NotFoundError)');
      t.done();
    }), 0);
  },
  (t, db) => {},
  'IDBObjectStore.deleteIndex exception order: ' +
  'TransactionInactiveError vs. NotFoundError'
);

</script>
