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

['put', 'add'].forEach(method => {
  indexeddb_test(
    (t, db) => {
      const store = db.createObjectStore('s');
      const store2 = db.createObjectStore('s2');

      db.deleteObjectStore('s2');

      setTimeout(t.step_func(() => {
        assert_throws_dom(
          'InvalidStateError', () => { store2[method]('key', 'value'); },
          '"has been deleted" check (InvalidStateError) should precede ' +
          '"not active" check (TransactionInactiveError)');
        t.done();
      }), 0);
    },
    (t, db) => {},
    `IDBObjectStore.${method} 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_dom(
          'TransactionInactiveError', () => { store[method]('key', 'value'); },
          '"not active" check (TransactionInactiveError) should precede ' +
          '"read only" check (ReadOnlyError)');
        t.done();
      }), 0);
    },

    `IDBObjectStore.${method} 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_dom(
        'ReadOnlyError', () => { store[method]({}, 'value'); },
        '"read only" check (ReadOnlyError) should precede ' +
        'key/data check (DataError)');

      t.done();
    },

    `IDBObjectStore.${method} exception order: ` +
    'ReadOnlyError vs. DataError'
  );
});

</script>
