<!DOCTYPE html>
<meta charset=utf-8>
<title>IDBDatabase.deleteObjectStore() - the object store is not reused</title>
<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 t = async_test(document.title, {timeout: 10000}),
    keys = [],
    open_rq = createdb(t)

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

    var objStore = db.createObjectStore("resurrected", { autoIncrement: true, keyPath: "k" });
    objStore.add({k:5}).onsuccess = function(e) { keys.push(e.target.result); }
    objStore.add({}).onsuccess = function(e) { keys.push(e.target.result); }
    objStore.createIndex("idx", "i");
    assert_true(objStore.indexNames.contains("idx"));
    assert_equals(objStore.keyPath, "k", "keyPath");

    db.deleteObjectStore("resurrected");

    var objStore2 = db.createObjectStore("resurrected", { autoIncrement: true });
    objStore2.add("Unicorns'R'us").onsuccess = function(e) { keys.push(e.target.result); };
    assert_false(objStore2.indexNames.contains("idx"), "index exist on new objstore");
    assert_equals(objStore2.keyPath, null, "keyPath");

    assert_throws("NotFoundError", function() { objStore2.index("idx"); });
}

open_rq.onsuccess = function(e) {
    assert_array_equals(keys, [5, 6, 1], "keys");
    t.done();
}

</script>

<div id="log"></div>
