106 lines
2.9 KiB
HTML
106 lines
2.9 KiB
HTML
<html>
|
|
<head>
|
|
<script>
|
|
|
|
function log(message)
|
|
{
|
|
document.getElementById("console").innerHTML += message + "<br>";
|
|
}
|
|
|
|
// signal to testRunner when this reaches zero.
|
|
var testCount = 4;
|
|
// we first retrieve and store the number of rows already in our test database.
|
|
// our goal is to keep the number unchanged through the tests.
|
|
var initialRowCount = 0;
|
|
var database;
|
|
var successCallbackCalled;
|
|
|
|
function finishTest()
|
|
{
|
|
if (--testCount)
|
|
return;
|
|
|
|
log("All Tests are complete.");
|
|
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
function successCallback()
|
|
{
|
|
successCallbackCalled = true;
|
|
}
|
|
|
|
function verifySuccess(msg)
|
|
{
|
|
database.transaction(function(tx)
|
|
{
|
|
tx.executeSql("SELECT count(*) AS count FROM ErrorCallbackTest", [], function(tx, rs)
|
|
{
|
|
log(msg + " : " + (rs.rows.item(0).count == initialRowCount && !successCallbackCalled ? "SUCCESS" : "FAILURE"));
|
|
finishTest();
|
|
});
|
|
});
|
|
}
|
|
|
|
function failMidWay(errorCallback)
|
|
{
|
|
successCallbackCalled = false;
|
|
database.transaction(function(tx)
|
|
{
|
|
tx.executeSql("INSERT INTO ErrorCallbackTest(someValue) VALUES(?);", [ 1 ]);
|
|
tx.executeSql("MUTTER SOMETHING ILLEGIBLE");
|
|
}, errorCallback, successCallback);
|
|
}
|
|
|
|
function statementCallbackThrowsException(errorCallback)
|
|
{
|
|
successCallbackCalled = false;
|
|
database.transaction(function(tx)
|
|
{
|
|
tx.executeSql("INSERT INTO ErrorCallbackTest(someValue) VALUES(?);", [ 1 ], function()
|
|
{
|
|
throw {};
|
|
});
|
|
});
|
|
}
|
|
|
|
function runTest()
|
|
{
|
|
if (window.testRunner) {
|
|
testRunner.clearAllDatabases();
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
database = openDatabase("ErrorCallbackDatabase", "1.0", "Test for error callback", 1);
|
|
database.transaction(function(tx)
|
|
{
|
|
tx.executeSql("CREATE TABLE IF NOT EXISTS ErrorCallbackTest (someValue)", []);
|
|
tx.executeSql("SELECT count(*) AS count FROM ErrorCallbackTest", [], function(tx, rs)
|
|
{
|
|
initialRowCount = rs.rows.item(0).count;
|
|
});
|
|
});
|
|
|
|
failMidWay(function() { return true; });
|
|
verifySuccess("Testing transaction failing mid-way and error callback returning true");
|
|
failMidWay(function() { return false; });
|
|
verifySuccess("Testing transaction failing mid-way and error callback return false");
|
|
statementCallbackThrowsException(function() { return true; });
|
|
verifySuccess("Testing statement callback throwing exception and error callback returning true");
|
|
statementCallbackThrowsException(function() { return false; });
|
|
verifySuccess("Testing statement callback throwing exception and error callback returning false");
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
|
|
<body onload="runTest()">
|
|
This test confirms that <code>SQLTransactionErrorCallback</code> is invoked correctly and regardless of its output, the transaction is always rolled back on failure.
|
|
<pre id="console">
|
|
</pre>
|
|
</body>
|
|
|
|
</html>
|