<!DOCTYPE html>
<meta charset=utf-8>
<title>Attempting to use deleted IDBObjectStore</title>
<link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#object-store">
<link rel=assert title="InvalidStateError Occurs if a request is made on a source object that has been deleted or removed.">
<link rel=author href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src=support.js></script>

<script>
    var db,
      add_success = false,
      t = async_test(document.title, {timeout: 10000})

    var open_rq = createdb(t);
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result;

        var objStore = db.createObjectStore("store", { autoIncrement: true });
        assert_equals(db.objectStoreNames[0], "store", "objectStoreNames");

        var rq_add = objStore.add(1);
        rq_add.onsuccess = function() { add_success = true; };
        rq_add.onerror = fail(t, 'rq_add.error');

        objStore.createIndex("idx", "a");
        db.deleteObjectStore("store");
        assert_equals(db.objectStoreNames.length, 0, "objectStoreNames.length after delete");

        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.add(2); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.put(3); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.get(1); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.clear(); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.count(); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.delete(1); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.openCursor(); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.index("idx"); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.deleteIndex("idx"); });
        assert_throws(DOMException.INVALID_STATE_ERR, function() { objStore.createIndex("idx2", "a"); });
    }

    open_rq.onsuccess = function() {
        assert_true(add_success, "First add was successful");
        t.done();
    }
</script>

<div id=log></div>
