Bug 486008 - test_browserGlue_corrupt_nobackup.js is wrong, r=dietrich a=tests-only

This commit is contained in:
Marco Bonardo 2009-04-01 11:39:47 +02:00
parent d2012e9b33
commit 2d20882353
3 changed files with 125 additions and 34 deletions

View File

@ -187,6 +187,8 @@ const SMART_BOOKMARKS_ON_MENU = 2;
* @return nsIFile object for the file.
*/
function create_bookmarks_html(aFilename) {
if (!aFilename)
do_throw("you must pass a filename to create_bookmarks_html function");
remove_bookmarks_html();
let bookmarksHTMLFile = gTestDir.clone();
bookmarksHTMLFile.append(aFilename);
@ -232,6 +234,8 @@ function check_bookmarks_html() {
* @return nsIFile object for the file.
*/
function create_JSON_backup(aFilename) {
if (!aFilename)
do_throw("you must pass a filename to create_JSON_backup function");
remove_all_JSON_backups();
let bookmarksBackupDir = gProfD.clone();
bookmarksBackupDir.append("bookmarkbackups");
@ -273,3 +277,56 @@ function check_JSON_backup() {
do_check_true(profileBookmarksJSONFile.exists());
return profileBookmarksJSONFile;
}
/**
* Dumps the rows of a table out to the console.
*
* @param aName
* The name of the table or view to output.
*/
function dump_table(aName)
{
let db = Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsPIPlacesDatabase).
DBConnection;
let stmt = db.createStatement("SELECT * FROM " + aName);
dump("\n*** Printing data from " + aName + ":\n");
let count = 0;
while (stmt.executeStep()) {
let columns = stmt.numEntries;
if (count == 0) {
// print the column names
for (let i = 0; i < columns; i++)
dump(stmt.getColumnName(i) + "\t");
dump("\n");
}
// print the row
for (let i = 0; i < columns; i++) {
switch (stmt.getTypeOfIndex(i)) {
case Ci.mozIStorageValueArray.VALUE_TYPE_NULL:
dump("NULL\t");
break;
case Ci.mozIStorageValueArray.VALUE_TYPE_INTEGER:
dump(stmt.getInt64(i) + "\t");
break;
case Ci.mozIStorageValueArray.VALUE_TYPE_FLOAT:
dump(stmt.getDouble(i) + "\t");
break;
case Ci.mozIStorageValueArray.VALUE_TYPE_TEXT:
dump(stmt.getString(i) + "\t");
break;
}
}
dump("\n");
count++;
}
dump("*** There were a total of " + count + " rows of data.\n\n");
stmt.reset();
stmt.finalize();
stmt = null;
}

View File

@ -41,14 +41,42 @@
* is corrupt but a JSON backup is not available.
*/
const NS_PLACES_INIT_COMPLETE_TOPIC = "places-init-complete";
// Create an observer for the Places notifications
var os = Cc["@mozilla.org/observer-service;1"].
getService(Ci.nsIObserverService);
var observer = {
observe: function thn_observe(aSubject, aTopic, aData) {
if (aTopic == NS_PLACES_INIT_COMPLETE_TOPIC) {
os.removeObserver(this, NS_PLACES_INIT_COMPLETE_TOPIC);
var hs = Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsINavHistoryService);
// Check the database was corrupt.
// nsBrowserGlue uses databaseStatus to manage initialization.
do_check_eq(hs.databaseStatus, hs.DATABASE_STATUS_CORRUPT);
// Enqueue next part of the test.
var tm = Cc["@mozilla.org/thread-manager;1"].
getService(Ci.nsIThreadManager);
tm.mainThread.dispatch({
run: function() {
continue_test();
}
}, Ci.nsIThread.DISPATCH_NORMAL);
}
}
};
os.addObserver(observer, NS_PLACES_INIT_COMPLETE_TOPIC, false);
function run_test() {
// Create bookmarks.html in the profile.
create_bookmarks_html();
create_bookmarks_html("bookmarks.glue.html");
// Remove JSON backup from profile.
remove_all_JSON_backups();
// Remove current database file.
let db = gProfD.clone();
var db = gProfD.clone();
db.append("places.sqlite");
if (db.exists()) {
db.remove(false);
@ -64,30 +92,19 @@ function run_test() {
Cc["@mozilla.org/browser/browserglue;1"].getService(Ci.nsIBrowserGlue);
// Initialize Places through the History Service.
let hs = Cc["@mozilla.org/browser/nav-history-service;1"].
var hs = Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsINavHistoryService);
// Check the database was corrupt.
// nsBrowserGlue uses databaseStatus to manage initialization.
do_check_eq(hs.databaseStatus, hs.DATABASE_STATUS_CORRUPT);
// Restore could take some time, usually less than 1s.
// We will poll later in continue_test to be sure restore has finished.
// Wait for init-complete notification before going on.
do_test_pending();
do_timeout(1000, "continue_test();");
}
function continue_test() {
let bs = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
var bs = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
getService(Ci.nsINavBookmarksService);
do_test_finished();
if (bs.getIdForItemAt(bs.toolbarFolder, 0) == -1) {
// Not enough time to complete restore, poll again later.
do_timeout(1000, "continue_test();");
return;
}
// Check that default bookmarks have been restored.
let itemId = bs.getIdForItemAt(bs.toolbarFolder, SMART_BOOKMARKS_ON_TOOLBAR);
var itemId = bs.getIdForItemAt(bs.toolbarFolder, SMART_BOOKMARKS_ON_TOOLBAR);
do_check_neq(itemId, -1);
do_check_eq(bs.getItemTitle(itemId), "example");
do_test_finished();

View File

@ -41,6 +41,34 @@
* corrupt, nor a JSON backup nor bookmarks.html are available.
*/
const NS_PLACES_INIT_COMPLETE_TOPIC = "places-init-complete";
// Create an observer for the Places notifications
var os = Cc["@mozilla.org/observer-service;1"].
getService(Ci.nsIObserverService);
var observer = {
observe: function thn_observe(aSubject, aTopic, aData) {
if (aTopic == NS_PLACES_INIT_COMPLETE_TOPIC) {
os.removeObserver(this, NS_PLACES_INIT_COMPLETE_TOPIC);
var hs = Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsINavHistoryService);
// Check the database was corrupt.
// nsBrowserGlue uses databaseStatus to manage initialization.
do_check_eq(hs.databaseStatus, hs.DATABASE_STATUS_CORRUPT);
// Enqueue next part of the test.
var tm = Cc["@mozilla.org/thread-manager;1"].
getService(Ci.nsIThreadManager);
tm.mainThread.dispatch({
run: function() {
continue_test();
}
}, Ci.nsIThread.DISPATCH_NORMAL);
}
}
};
os.addObserver(observer, NS_PLACES_INIT_COMPLETE_TOPIC, false);
function run_test() {
// Remove bookmarks.html from profile.
remove_bookmarks_html();
@ -48,7 +76,7 @@ function run_test() {
remove_all_JSON_backups();
// Remove current database file.
let db = gProfD.clone();
var db = gProfD.clone();
db.append("places.sqlite");
if (db.exists()) {
db.remove(false);
@ -64,30 +92,19 @@ function run_test() {
Cc["@mozilla.org/browser/browserglue;1"].getService(Ci.nsIBrowserGlue);
// Initialize Places through the History Service.
let hs = Cc["@mozilla.org/browser/nav-history-service;1"].
var hs = Cc["@mozilla.org/browser/nav-history-service;1"].
getService(Ci.nsINavHistoryService);
// Check the database was corrupt.
// nsBrowserGlue uses databaseStatus to manage initialization.
do_check_eq(hs.databaseStatus, hs.DATABASE_STATUS_CORRUPT);
// Restore could take some time, usually less than 1s.
// We will poll later in continue_test to be sure restore has finished.
// Wait for init-complete notification before going on.
do_test_pending();
do_timeout(1000, "continue_test();");
}
function continue_test() {
let bs = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
var bs = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
getService(Ci.nsINavBookmarksService);
if (bs.getIdForItemAt(bs.toolbarFolder, 1) == -1) {
// Not enough time to complete restore, poll again later.
do_timeout(1000, "continue_test();");
return;
}
// Check that default bookmarks have been restored.
let itemId = bs.getIdForItemAt(bs.toolbarFolder, SMART_BOOKMARKS_ON_TOOLBAR + 1);
var itemId = bs.getIdForItemAt(bs.toolbarFolder, SMART_BOOKMARKS_ON_TOOLBAR + 1);
do_check_true(itemId > 0);
do_test_finished();