<html>
<head>
<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
<script src="../../fast/js/resources/js-test-pre.js"></script>
<script src="../../fast/js/resources/js-test-post-function.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>

description("Test IndexedDB's create and removeObjectStore");
if (window.layoutTestController)
    layoutTestController.waitUntilDone();

function test()
{
    request = evalAndLog("webkitIndexedDB.open('create-and-remove-object-store')");
    request.onsuccess = openSuccess;
    request.onerror = unexpectedErrorCallback;
}

function openSuccess()
{
    debug("openSuccess():");
    window.db = evalAndLog("db = event.target.result");
    testCreateAndRemove();
    request = evalAndLog("result = db.setVersion('version 1')");
    request.onsuccess = cleanDatabase;
    request.onerror = unexpectedErrorCallback;
    testCreateAndRemove();
}

function testCreateAndRemove()
{
    debug("Trying create");
    evalAndExpectException('db.createObjectStore("some os")', "webkitIDBDatabaseException.NOT_ALLOWED_ERR");
    debug("Trying remove");
    evalAndExpectException('db.createObjectStore("some os")', "webkitIDBDatabaseException.NOT_ALLOWED_ERR");
}

function cleanDatabase()
{
    deleteAllObjectStores(db);

    os = evalAndLog("db.createObjectStore('tmp')");
    evalAndExpectException("db.createObjectStore('tmp')", "webkitIDBDatabaseException.CONSTRAINT_ERR");

    trans = evalAndLog("trans = db.transaction({mode: webkitIDBTransaction.READ_WRITE})");
    request = evalAndLog("trans.objectStore('tmp').get(0)");
    request.onsuccess = tryOnceMore;
    request.onerror = unexpectedErrorCallback;
}

function tryOnceMore()
{
    shouldBeUndefined("event.target.result");

    testCreateAndRemove();

    done();
}

var successfullyParsed = true;

test();

</script>
</body>
</html>
