<!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(null, function() { objStore.add(2); });
        assert_throws(null, function() { objStore.put(3); });
        assert_throws(null, function() { objStore.get(1); });
        assert_throws(null, function() { objStore.clear(); });
        assert_throws(null, function() { objStore.count(); });
        assert_throws(null, function() { objStore.delete(1); });
        assert_throws(null, function() { objStore.openCursor(); });
        assert_throws(null, function() { objStore.index("idx"); });
        assert_throws(null, function() { objStore.deleteIndex("idx"); });
        assert_throws(null, function() { objStore.createIndex("idx2", "a"); });
    }

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

<div id=log></div>
