--- /dev/null
+//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");
+}