<html>
<head>
<script>

function log(message)
{
    document.getElementById("console").innerHTML += message + "<br>";
}

function finishTest()
{
    log("Test Complete");
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}

function errorFunction(error)
{
    log("Test failed - " + error.message);
    finishTest();
}

var successCount = 0;

function successFunction(message)
{
    log("Transaction succeeded - " + message);
    if (++successCount == 2)
        finishTest();
}

function runTest()
{
    if (window.layoutTestController) {
        layoutTestController.clearAllDatabases();
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();
    }
    
    var database = openDatabase("SuccessCallbackDatabase", "1.0", "Test for success callback <rdar://5737692>", 1);
    database.transaction(function(tx) { tx.executeSql("CREATE TABLE IF NOT EXISTS SuccessCallbackTest (randomData)", []); }, errorFunction, function() { successFunction("Transaction with one statement"); });
    database.transaction(function(tx) { }, errorFunction, function() { successFunction("Empty transaction"); });
}

</script>
</head>

<body onload="runTest()">
This test confirms that a successful transaction - both with and without a statement - receives its successCallback
<pre id="console">
</pre>
</body>

</html>
