<!DOCTYPE html>
<meta charset=utf-8>
<title>IDBDatabase.createObjectStore() - empty name</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 db

    var open_rq = createdb(async_test())
    open_rq.onupgradeneeded = function(e) {
        db = e.target.result
        var store = db.createObjectStore("")

        for (var i = 0; i < 5; i++)
            store.add("object_" + i, i)

        assert_equals(db.objectStoreNames[0], "", "db.objectStoreNames[0]")
        assert_equals(db.objectStoreNames.length, 1, "objectStoreNames.length")
    }

    open_rq.onsuccess = function() {
        var store = db.transaction("").objectStore("")

        store.get(2).onsuccess = this.step_func(function(e) {
            assert_equals(e.target.result, "object_2")
        })

        assert_equals(db.objectStoreNames[0], "", "db.objectStoreNames[0]")
        assert_equals(db.objectStoreNames.length, 1, "objectStoreNames.length")

        this.done()
    }
</script>

<div id=log></div>
