| //description("This test verifies that the javascript values returned by database queries are of same type as the values put into the database."); |
| |
| function writeMessageToLog(message) |
| { |
| document.getElementById("console").innerText += message + "\n"; |
| } |
| |
| function notifyDone(str) { |
| writeMessageToLog(str); |
| if (window.layoutTestController) |
| layoutTestController.notifyDone(); |
| } |
| |
| var testValues = { |
| timestamp: new Date("Wed Feb 06 2008 12:16:52 GMT+0200 (EET)").valueOf(), |
| id: 1001, |
| real: 101.444, |
| text: "WebKit db TEXT", |
| blob: "supercalifragilistic" |
| }; |
| |
| function shouldBeSameTypeAndValue(propName, testValue, result) { |
| if (testValue == result && typeof testValue == typeof result) { |
| writeMessageToLog("PASS: property '" + propName + "' ok, type was " + typeof result); |
| return true; |
| } |
| writeMessageToLog("FAIL: property '" + propName + "' failed." |
| + " expected: " + typeof testValue + ":'" + testValue + "' " |
| + " got: " + typeof result + ":'" + result +"'"); |
| return false; |
| } |
| |
| function testDBValues(tx, result) { |
| var rs = result.rows.item(0); |
| // Avoid for .. in because (theretically) the order can change |
| i = "timestamp"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); |
| i = "id"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); |
| i = "real"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); |
| i = "text"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); |
| i = "blob"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); |
| |
| tx.executeSql("DROP TABLE DataTypeTestTable", [], |
| function(tx, result) { |
| notifyDone("PASS: database clean up ok."); |
| }, |
| function(tx, result) { |
| notifyDone("FAIL: Database clean up failed."); |
| }); |
| } |
| |
| function fetchDBValuesStmt(tx, result) { |
| tx.executeSql("SELECT * FROM DataTypeTestTable", [], |
| testDBValues, |
| function(tx,error) { |
| notifyDone("FAIL: Error fetching values from the db.") |
| }); |
| } |
| |
| function insertTestValuesStmt(tx, result) { |
| tx.executeSql("INSERT INTO DataTypeTestTable (id, real, timestamp, text, blob) VALUES (?,?,?,?,?)", |
| [testValues.id, testValues.real, testValues.timestamp, testValues.text, testValues.blob], |
| fetchDBValuesStmt, |
| function(tx, error) { |
| notifyDone("FAIL: Error inserting values to the db."); |
| }); |
| } |
| |
| function createTestDBStmt(tx) |
| { |
| tx.executeSql("CREATE TABLE IF NOT EXISTS DataTypeTestTable (id INTEGER UNIQUE, real REAL, timestamp INTEGER, text TEXT, blob BLOB)", [], |
| insertTestValuesStmt, |
| function(tx, error) { |
| notifyDone("FAIL: Error creating the db."); |
| }); |
| } |
| |
| function runTest() { |
| if (window.layoutTestController) { |
| layoutTestController.dumpAsText(); |
| layoutTestController.waitUntilDone(); |
| } |
| var db = openDatabase("DataTypeTest", "1.0", "Database for sql data type test", 1); |
| if (db) |
| db.transaction(createTestDBStmt); |
| else |
| notifyDone("FAIL: Error opening the db"); |
| } |