OLD | NEW |
| (Empty) |
1 var dbName = "SQLExceptionCodesTest" + (new Date()).getTime(); | |
2 | |
3 function testTransaction(db, executeStatementsCallback, expectedError) | |
4 { | |
5 db.transaction(function(tx) { | |
6 try { | |
7 executeStatementsCallback(tx); | |
8 postMessage("FAIL: an exception (" + expectedError + ") should've be
en thrown."); | |
9 } catch (err) { | |
10 postMessage("LOG: " + err); | |
11 if (typeof err == "string" && err == expectedError) | |
12 postMessage("PASS: expected and got error with message " + expec
tedError); | |
13 else if (err.name == expectedError) | |
14 postMessage("PASS: expected and got error name " + expectedError
); | |
15 else | |
16 postMessage("FAIL: expected error name " + expectedError + ", go
t " + err); | |
17 } | |
18 }); | |
19 } | |
20 | |
21 function testTransactionThrowsException(db) | |
22 { | |
23 testTransaction(db, function(tx) { throw "Exception thrown in transaction ca
llback."; }, "Exception thrown in transaction callback."); | |
24 } | |
25 | |
26 function testInvalidStatement(db) | |
27 { | |
28 testTransaction(db, function(tx) { tx.executeSql("BAD STATEMENT"); }, "Synta
xError"); | |
29 } | |
30 | |
31 function testIncorrectNumberOfBindParameters(db) | |
32 { | |
33 testTransaction(db, | |
34 function(tx) { | |
35 tx.executeSql("CREATE TABLE IF NOT EXISTS BadBindNumberT
est (Foo INT, Bar INT)"); | |
36 tx.executeSql("INSERT INTO BadBindNumberTest VALUES (?,
?)", [1]); | |
37 }, "SyntaxError"); | |
38 } | |
39 | |
40 function testBindParameterOfWrongType(db) | |
41 { | |
42 var badString = { }; | |
43 badString.toString = function() { throw "Cannot call toString() on this obje
ct." }; | |
44 | |
45 testTransaction(db, function(tx) { | |
46 tx.executeSql("CREATE TABLE IF NOT EXISTS BadBindTypeTest (Foo TEXT)"); | |
47 tx.executeSql("INSERT INTO BadBindTypeTest VALUES (?)", [badString]); | |
48 }, "Cannot call toString() on this object."); | |
49 } | |
50 | |
51 function testQuotaExceeded(db) | |
52 { | |
53 // Sometimes, SQLite automatically rolls back a transaction if executing a s
tatement fails. | |
54 // This seems to be one of those cases. | |
55 try { | |
56 testTransaction(db, | |
57 function(tx) { | |
58 tx.executeSql("CREATE TABLE IF NOT EXISTS QuotaTest
(Foo BLOB)"); | |
59 tx.executeSql("INSERT INTO QuotaTest VALUES (ZEROBLO
B(10 * 1024 * 1024))"); | |
60 }, "QuotaExceededError"); | |
61 postMessage("FAIL: Transaction should've been rolled back by SQLite."); | |
62 } catch (err) { | |
63 if (err.name == "DatabaseError") | |
64 postMessage("PASS: Transaction was rolled back by SQLite as expected
."); | |
65 else | |
66 postMessage("FAIL: An unexpected exception was thrown: " + err); | |
67 } | |
68 } | |
69 | |
70 function testVersionMismatch(db) | |
71 { | |
72 var db2 = openDatabaseSync(dbName, "1.0", "Tests the error codes.", 1); | |
73 db2.changeVersion("1.0", "2.0", function(tx) { }); | |
74 testTransaction(db, | |
75 function(tx) { | |
76 tx.executeSql("THIS STATEMENT SHOULD NEVER GET EXECUTED"
); | |
77 }, "VersionError"); | |
78 } | |
79 | |
80 var db = openDatabaseSync(dbName, "1.0", "Tests the exception codes.", 1); | |
81 testTransactionThrowsException(db); | |
82 testInvalidStatement(db); | |
83 testIncorrectNumberOfBindParameters(db); | |
84 testBindParameterOfWrongType(db); | |
85 testQuotaExceeded(db); | |
86 testVersionMismatch(db); | |
87 | |
88 postMessage("done"); | |
OLD | NEW |