060a881e81c91c174e28cd7e9eab7491a6fd9c38
[WebKit-https.git] / LayoutTests / storage / statement-error-callback.html
1 <html>
2 <head>
3 <script>
4
5 function log(message)
6 {
7     document.getElementById("console").innerHTML += message + "<br>";
8 }
9
10 function finishTest()
11 {
12     log("Test Complete");
13     if (window.layoutTestController)
14         layoutTestController.notifyDone();
15 }
16
17 var txCallbackCount = 0;
18 var NUMBER_OF_TRANSACTIONS = 7;
19 var database;
20
21 function transactionErrorFunction(error)
22 {
23     log("PASS - the transaction error callback was invoked.");
24     if (++txCallbackCount == NUMBER_OF_TRANSACTIONS)
25         finishTest();
26 }
27
28 function transactionSuccessFunction(message)
29 {
30     log("FAIL - the transaction success callback should not be invoked.");
31     if (++txCallbackCount == NUMBER_OF_TRANSACTIONS)
32         finishTest();
33 }
34
35 function runTransactionExpectedToFail(statementErrorCallback)
36 {
37     database.transaction(function(tx) {
38         tx.executeSql("CREATE TABLE IF NOT EXISTS StatementErrorCallbackTest (randomData)");
39         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test']);
40         tx.executeSql("THIS STATEMENT WILL FAIL", [],
41             function(tx, data) {
42                 log("FAIL - this statement should have failed");
43                 finishTest();
44             }, statementErrorCallback);
45         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test1'],
46             function(error) { log("FAIL - This statement should not have been executed"); },
47             function() { log("FAIL - This statement should not have been executed"); });
48     }, transactionErrorFunction, transactionSuccessFunction);
49 }
50
51 function runTest()
52 {
53     if (window.layoutTestController) {
54         layoutTestController.clearAllDatabases();
55         layoutTestController.dumpAsText();
56         layoutTestController.waitUntilDone();
57     }
58
59     database = openDatabase("bug-28872", "1.0", "statement error callback test", 1024);
60     database.transaction(function(tx) {
61         tx.executeSql("CREATE TABLE IF NOT EXISTS StatementErrorCallbackTest (randomData)");
62         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test']);
63         tx.executeSql("THIS STATEMENT WILL FAIL", [],
64             function(tx, data) {
65                 log("FAIL - this statement should have failed");
66                 finishTest();
67             }, function(tx, error) { return false; });
68         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test1'],
69             function(tx, data) { },
70             function(tx, error) { log("FAIL - This statement should not have caused an error"); });
71     }, function(error) { log("FAIL - The transaction error callback should not have been invoked"); },
72     function() { });
73
74     runTransactionExpectedToFail(function(error) { return true; });
75     runTransactionExpectedToFail(function(error) { throw "Exception in statement error callback"; return false; });
76     runTransactionExpectedToFail(function(error) {});
77     runTransactionExpectedToFail(function(error) { return null; });
78     runTransactionExpectedToFail(function(error) { return "some string"; });
79     runTransactionExpectedToFail(function(error) { return 1234; });
80     runTransactionExpectedToFail(function(error) { return {a: 2, b: "abc"}; });
81 }
82
83 </script>
84 </head>
85
86 <body onload="runTest()">
87 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.
88 <pre id="console">
89 </pre>
90 </body>
91
92 </html>