| <html> |
| <head> |
| <script> |
| |
| function log(message) |
| { |
| document.getElementById("console").innerHTML += message + "<br>"; |
| } |
| |
| function finishTest() |
| { |
| log("Test Complete"); |
| if (window.layoutTestController) |
| layoutTestController.notifyDone(); |
| } |
| |
| var txCallbackCount = 0; |
| var NUMBER_OF_TRANSACTIONS = 10; |
| var database; |
| |
| function runTransaction(expectedToFail, statementErrorCallback) |
| { |
| database.transaction(function(tx) { |
| tx.executeSql("CREATE TABLE IF NOT EXISTS TestTable (RandomData TEXT)"); |
| tx.executeSql("INSERT INTO TestTable VALUES (?)", ['test']); |
| tx.executeSql("THIS STATEMENT WILL FAIL", [], |
| function(tx, data) { |
| log("FAIL - this statement should have failed"); |
| finishTest(); |
| }, statementErrorCallback); |
| tx.executeSql("INSERT INTO TestTable VALUES (?)", ['test1'], |
| function(error) { |
| if (expectedToFail) |
| log("FAIL - This statement should not have been executed"); |
| }, function() { |
| if (expectedToFail) |
| log("FAIL - This statement should not have been executed"); |
| }); |
| }, function(error) { |
| if (expectedToFail) |
| log("PASS - the transaction error callback was invoked."); |
| else |
| log("FAIL - the transaction error callback should not have been invoked."); |
| if (++txCallbackCount == NUMBER_OF_TRANSACTIONS) |
| finishTest(); |
| }, function() { |
| if (expectedToFail) |
| log("FAIL - the transaction success callback should not have been invoked."); |
| else |
| log("PASS - the transaction success callback was invoked."); |
| if (++txCallbackCount == NUMBER_OF_TRANSACTIONS) |
| finishTest(); |
| }); |
| } |
| |
| function runTest() |
| { |
| if (window.layoutTestController) { |
| layoutTestController.clearAllDatabases(); |
| layoutTestController.dumpAsText(); |
| layoutTestController.waitUntilDone(); |
| } |
| |
| database = openDatabase("StatementErrorCallbackTest", "1.0", "statement error callback test", 1024); |
| |
| runTransaction(true, function(error) { return true; }); |
| runTransaction(true, function(error) { throw "Exception in statement error callback"; return false; }); |
| runTransaction(true, function(error) { return "some string"; }); |
| runTransaction(true, function(error) { return 1234; }); |
| runTransaction(true, function(error) { return {a: 2, b: "abc"}; }); |
| runTransaction(true, function(error) { return "false"; }); |
| runTransaction(false, function(error) {}); |
| runTransaction(false, function(error) { return false; }); |
| runTransaction(false, function(error) { return 0; }); |
| runTransaction(false, function(error) { return null; }); |
| } |
| |
| </script> |
| </head> |
| |
| <body onload="runTest()"> |
| This test confirms that a transaction is immediately rolled back if and only if a statement's error callback throws an exception, returns true, or doesn't return any value. |
| <pre id="console"> |
| </pre> |
| </body> |
| |
| </html> |