1 //description("This test verifies that the javascript values returned by database queries are of same type as the values put into the database."); 2 3 function writeMessageToLog(message) 4 { 5 document.getElementById("console").innerText += message + "\n"; 6 } 7 8 function notifyDone(str) { 9 writeMessageToLog(str); 10 if (window.layoutTestController) 11 layoutTestController.notifyDone(); 12 } 13 14 var testValues = { 15 timestamp: new Date("Wed Feb 06 2008 12:16:52 GMT+0200 (EET)").valueOf(), 16 id: 1001, 17 real: 101.444, 18 text: "WebKit db TEXT", 19 blob: "supercalifragilistic" 20 }; 21 22 function shouldBeSameTypeAndValue(propName, testValue, result) { 23 if (testValue == result && typeof testValue == typeof result) { 24 writeMessageToLog("PASS: property '" + propName + "' ok, type was " + typeof result); 25 return true; 26 } 27 writeMessageToLog("FAIL: property '" + propName + "' failed." 28 + " expected: " + typeof testValue + ":'" + testValue + "' " 29 + " got: " + typeof result + ":'" + result +"'"); 30 return false; 31 } 32 33 function testDBValues(tx, result) { 34 var rs = result.rows.item(0); 35 // Avoid for .. in because (theretically) the order can change 36 i = "timestamp"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); 37 i = "id"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); 38 i = "real"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); 39 i = "text"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); 40 i = "blob"; shouldBeSameTypeAndValue(i, testValues[i], rs[i]); 41 42 tx.executeSql("DROP TABLE DataTypeTestTable", [], 43 function(tx, result) { 44 notifyDone("PASS: database clean up ok."); 45 }, 46 function(tx, result) { 47 notifyDone("FAIL: Database clean up failed."); 48 }); 49 } 50 51 function fetchDBValuesStmt(tx, result) { 52 tx.executeSql("SELECT * FROM DataTypeTestTable", [], 53 testDBValues, 54 function(tx,error) { 55 notifyDone("FAIL: Error fetching values from the db.") 56 }); 57 } 58 59 function insertTestValuesStmt(tx, result) { 60 tx.executeSql("INSERT INTO DataTypeTestTable (id, real, timestamp, text, blob) VALUES (?,?,?,?,?)", 61 [testValues.id, testValues.real, testValues.timestamp, testValues.text, testValues.blob], 62 fetchDBValuesStmt, 63 function(tx, error) { 64 notifyDone("FAIL: Error inserting values to the db."); 65 }); 66 } 67 68 function createTestDBStmt(tx) 69 { 70 tx.executeSql("CREATE TABLE IF NOT EXISTS DataTypeTestTable (id INTEGER UNIQUE, real REAL, timestamp INTEGER, text TEXT, blob BLOB)", [], 71 insertTestValuesStmt, 72 function(tx, error) { 73 notifyDone("FAIL: Error creating the db."); 74 }); 75 } 76 77 function runTest() { 78 if (window.layoutTestController) { 79 layoutTestController.dumpAsText(); 80 layoutTestController.waitUntilDone(); 81 } 82 var db = openDatabase("DataTypeTest", "1.0", "Database for sql data type test", 1); 83 if (db) 84 db.transaction(createTestDBStmt); 85 else 86 notifyDone("FAIL: Error opening the db"); 87 } 88