From 0291e51761151254908c68522612c393179dbc3e Mon Sep 17 00:00:00 2001 From: Philipp von Weitershausen Date: Fri, 29 Oct 2010 06:54:41 -0700 Subject: [PATCH] Bug 606695 - De-Sync.js-ify history store test [r=mconnor] --- .../sync/tests/unit/test_history_store.js | 132 ++++++++++-------- 1 file changed, 76 insertions(+), 56 deletions(-) diff --git a/services/sync/tests/unit/test_history_store.js b/services/sync/tests/unit/test_history_store.js index 40edec2d4291..f7e3fa44aea0 100644 --- a/services/sync/tests/unit/test_history_store.js +++ b/services/sync/tests/unit/test_history_store.js @@ -1,7 +1,6 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://services-sync/engines/history.js"); Cu.import("resource://services-sync/type_records/history.js"); -Cu.import("resource://services-sync/ext/Sync.js"); Cu.import("resource://services-sync/util.js"); const TIMESTAMP1 = (Date.now() - 103406528) * 1000; @@ -28,30 +27,40 @@ function queryHistoryVisits(uri) { return queryPlaces(uri, options); } -function waitForTitleChanged(test) { - Sync(function (callback) { - Svc.History.addObserver({ - onBeginUpdateBatch: function onBeginUpdateBatch() {}, - onEndUpdateBatch: function onEndUpdateBatch() {}, - onPageChanged: function onPageChanged() {}, - onTitleChanged: function onTitleChanged() { - Svc.History.removeObserver(this); - callback(); - }, - onVisit: function onVisit() {}, - onDeleteVisits: function onDeleteVisits() {}, - onPageExpired: function onPageExpired() {}, - onBeforeDeleteURI: function onBeforeDeleteURI() {}, - onDeleteURI: function onDeleteURI() {}, - onClearHistory: function onClearHistory() {}, - QueryInterface: XPCOMUtils.generateQI([ - Ci.nsINavHistoryObserver, - Ci.nsINavHistoryObserver_MOZILLA_1_9_1_ADDITIONS, - Ci.nsISupportsWeakReference - ]) - }, true); - test(); - })(); +function onNextTitleChanged(callback) { + Svc.History.addObserver({ + onBeginUpdateBatch: function onBeginUpdateBatch() {}, + onEndUpdateBatch: function onEndUpdateBatch() {}, + onPageChanged: function onPageChanged() {}, + onTitleChanged: function onTitleChanged() { + Svc.History.removeObserver(this); + Utils.delay(callback, 0, this); + }, + onVisit: function onVisit() {}, + onDeleteVisits: function onDeleteVisits() {}, + onPageExpired: function onPageExpired() {}, + onBeforeDeleteURI: function onBeforeDeleteURI() {}, + onDeleteURI: function onDeleteURI() {}, + onClearHistory: function onClearHistory() {}, + QueryInterface: XPCOMUtils.generateQI([ + Ci.nsINavHistoryObserver, + Ci.nsINavHistoryObserver_MOZILLA_1_9_1_ADDITIONS, + Ci.nsISupportsWeakReference + ]) + }, true); +} + +// Ensure exceptions from inside callbacks leads to test failures while +// we still clean up properly. +function ensureThrows(func) { + return function() { + try { + func.apply(this, arguments); + } catch (ex) { + Svc.History.removeAllPages(); + do_throw(ex); + } + }; } function run_test() { @@ -59,15 +68,18 @@ function run_test() { let store = new HistoryEngine()._store; do_check_eq([id for (id in store.getAllIDs())].length, 0); - try { + let fxuri, fxguid, tburi, tbguid; + do_test_pending(); + Utils.asyncChain(function (next) { + _("Let's create an entry in the database."); - let fxuri = Utils.makeURI("http://getfirefox.com/"); + fxuri = Utils.makeURI("http://getfirefox.com/"); Svc.History.addPageWithDetails(fxuri, "Get Firefox!", TIMESTAMP1); _("Verify that the entry exists."); let ids = [id for (id in store.getAllIDs())]; do_check_eq(ids.length, 1); - let fxguid = ids[0]; + fxguid = ids[0]; do_check_true(store.itemExists(fxguid)); _("If we query a non-existent record, it's marked as deleted."); @@ -85,33 +97,39 @@ function run_test() { _("Let's modify the record and have the store update the database."); let secondvisit = {date: TIMESTAMP2, type: Ci.nsINavHistoryService.TRANSITION_TYPED}; - waitForTitleChanged(function() { - store.update({histUri: record.histUri, - title: "Hol Dir Firefox!", - visits: [record.visits[0], secondvisit]}); - }); - let queryres = queryHistoryVisits(fxuri); - do_check_eq(queryres.length, 2); - do_check_eq(queryres[0].time, TIMESTAMP1); - do_check_eq(queryres[0].title, "Hol Dir Firefox!"); - do_check_eq(queryres[1].time, TIMESTAMP2); - do_check_eq(queryres[1].title, "Hol Dir Firefox!"); + onNextTitleChanged(ensureThrows(function() { + let queryres = queryHistoryVisits(fxuri); + do_check_eq(queryres.length, 2); + do_check_eq(queryres[0].time, TIMESTAMP1); + do_check_eq(queryres[0].title, "Hol Dir Firefox!"); + do_check_eq(queryres[1].time, TIMESTAMP2); + do_check_eq(queryres[1].title, "Hol Dir Firefox!"); + next(); + })); + store.update({histUri: record.histUri, + title: "Hol Dir Firefox!", + visits: [record.visits[0], secondvisit]}); + + }, function (next) { _("Create a brand new record through the store."); - let tbguid = Utils.makeGUID(); - let tburi = Utils.makeURI("http://getthunderbird.com"); - waitForTitleChanged(function() { - store.create({id: tbguid, - histUri: tburi.spec, - title: "The bird is the word!", - visits: [{date: TIMESTAMP3, - type: Ci.nsINavHistoryService.TRANSITION_TYPED}]}); - }); - do_check_eq([id for (id in store.getAllIDs())].length, 2); - queryres = queryHistoryVisits(tburi); - do_check_eq(queryres.length, 1); - do_check_eq(queryres[0].time, TIMESTAMP3); - do_check_eq(queryres[0].title, "The bird is the word!"); + tbguid = Utils.makeGUID(); + tburi = Utils.makeURI("http://getthunderbird.com"); + onNextTitleChanged(ensureThrows(function() { + do_check_eq([id for (id in store.getAllIDs())].length, 2); + let queryres = queryHistoryVisits(tburi); + do_check_eq(queryres.length, 1); + do_check_eq(queryres[0].time, TIMESTAMP3); + do_check_eq(queryres[0].title, "The bird is the word!"); + next(); + })); + store.create({id: tbguid, + histUri: tburi.spec, + title: "The bird is the word!", + visits: [{date: TIMESTAMP3, + type: Ci.nsINavHistoryService.TRANSITION_TYPED}]}); + + }, function (next) { _("Make sure we handle invalid URLs in places databases gracefully."); let query = "INSERT INTO moz_places " @@ -124,7 +142,7 @@ function run_test() { _("Remove a record from the store."); store.remove({id: fxguid}); do_check_false(store.itemExists(fxguid)); - queryres = queryHistoryVisits(fxuri); + let queryres = queryHistoryVisits(fxuri); do_check_eq(queryres.length, 0); _("Make sure wipe works."); @@ -135,8 +153,10 @@ function run_test() { queryres = queryHistoryVisits(tburi); do_check_eq(queryres.length, 0); - } finally { _("Clean up."); Svc.History.removeAllPages(); - } + do_test_finished(); + + })(); + }