diff options
author | Matt A. Tobin <email@mattatobin.com> | 2020-02-25 15:07:00 -0500 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2020-04-14 12:55:19 +0200 |
commit | eb70e6e3d0bff11c25f14b1196025791bf2308fb (patch) | |
tree | 5ef4ce17db83c74d7b05ec12c8f59e095a6dd5bd /toolkit/components/places/tests/history/test_removeVisitsByFilter.js | |
parent | 32ead795290b3399d56b4708fc75b77d296f6a1a (diff) | |
download | UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar.gz UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar.lz UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar.xz UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.zip |
Issue #439 - Remove tests from toolkit/
Diffstat (limited to 'toolkit/components/places/tests/history/test_removeVisitsByFilter.js')
-rw-r--r-- | toolkit/components/places/tests/history/test_removeVisitsByFilter.js | 345 |
1 files changed, 0 insertions, 345 deletions
diff --git a/toolkit/components/places/tests/history/test_removeVisitsByFilter.js b/toolkit/components/places/tests/history/test_removeVisitsByFilter.js deleted file mode 100644 index 699420e43..000000000 --- a/toolkit/components/places/tests/history/test_removeVisitsByFilter.js +++ /dev/null @@ -1,345 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et: */ - -// Tests for `History.removeVisitsByFilter`, as implemented in History.jsm - -"use strict"; - -Cu.importGlobalProperties(["URL"]); - -Cu.import("resource://gre/modules/PromiseUtils.jsm", this); - -add_task(function* test_removeVisitsByFilter() { - let referenceDate = new Date(1999, 9, 9, 9, 9); - - // Populate a database with 20 entries, remove a subset of entries, - // ensure consistency. - let remover = Task.async(function*(options) { - do_print("Remover with options " + JSON.stringify(options)); - let SAMPLE_SIZE = options.sampleSize; - - yield PlacesTestUtils.clearHistory(); - yield PlacesUtils.bookmarks.eraseEverything(); - - // Populate the database. - // Create `SAMPLE_SIZE` visits, from the oldest to the newest. - - let bookmarkIndices = new Set(options.bookmarks); - let visits = []; - let frecencyChangePromises = new Map(); - let uriDeletePromises = new Map(); - let getURL = options.url ? - i => "http://mozilla.com/test_browserhistory/test_removeVisitsByFilter/removeme/byurl/" + Math.floor(i / (SAMPLE_SIZE / 5)) + "/" : - i => "http://mozilla.com/test_browserhistory/test_removeVisitsByFilter/removeme/" + i + "/" + Math.random(); - for (let i = 0; i < SAMPLE_SIZE; ++i) { - let spec = getURL(i); - let uri = NetUtil.newURI(spec); - let jsDate = new Date(Number(referenceDate) + 3600 * 1000 * i); - let dbDate = jsDate * 1000; - let hasBookmark = bookmarkIndices.has(i); - let hasOwnBookmark = hasBookmark; - if (!hasOwnBookmark && options.url) { - // Also mark as bookmarked if one of the earlier bookmarked items has the same URL. - hasBookmark = - options.bookmarks.filter(n => n < i).some(n => visits[n].uri.spec == spec && visits[n].test.hasBookmark); - } - do_print("Generating " + uri.spec + ", " + dbDate); - let visit = { - uri, - title: "visit " + i, - visitDate: dbDate, - test: { - // `visitDate`, as a Date - jsDate: jsDate, - // `true` if we expect that the visit will be removed - toRemove: false, - // `true` if `onRow` informed of the removal of this visit - announcedByOnRow: false, - // `true` if there is a bookmark for this URI, i.e. of the page - // should not be entirely removed. - hasBookmark: hasBookmark, - onFrecencyChanged: null, - onDeleteURI: null, - }, - }; - visits.push(visit); - if (hasOwnBookmark) { - do_print("Adding a bookmark to visit " + i); - yield PlacesUtils.bookmarks.insert({ - url: uri, - parentGuid: PlacesUtils.bookmarks.unfiledGuid, - title: "test bookmark" - }); - do_print("Bookmark added"); - } - } - - do_print("Adding visits"); - yield PlacesTestUtils.addVisits(visits); - - do_print("Preparing filters"); - let filter = { - }; - let beginIndex = 0; - let endIndex = visits.length - 1; - if ("begin" in options) { - let ms = Number(visits[options.begin].test.jsDate) - 1000; - filter.beginDate = new Date(ms); - beginIndex = options.begin; - } - if ("end" in options) { - let ms = Number(visits[options.end].test.jsDate) + 1000; - filter.endDate = new Date(ms); - endIndex = options.end; - } - if ("limit" in options) { - endIndex = beginIndex + options.limit - 1; // -1 because the start index is inclusive. - filter.limit = options.limit; - } - let removedItems = visits.slice(beginIndex); - endIndex -= beginIndex; - if (options.url) { - let rawURL = ""; - switch (options.url) { - case 1: - filter.url = new URL(removedItems[0].uri.spec); - rawURL = filter.url.href; - break; - case 2: - filter.url = removedItems[0].uri; - rawURL = filter.url.spec; - break; - case 3: - filter.url = removedItems[0].uri.spec; - rawURL = filter.url; - break; - } - endIndex = Math.min(endIndex, removedItems.findIndex((v, index) => v.uri.spec != rawURL) - 1); - } - removedItems.splice(endIndex + 1); - let remainingItems = visits.filter(v => !removedItems.includes(v)); - for (let i = 0; i < removedItems.length; i++) { - let test = removedItems[i].test; - do_print("Marking visit " + (beginIndex + i) + " as expecting removal"); - test.toRemove = true; - if (test.hasBookmark || - (options.url && remainingItems.some(v => v.uri.spec == removedItems[i].uri.spec))) { - frecencyChangePromises.set(removedItems[i].uri.spec, PromiseUtils.defer()); - } else if (!options.url || i == 0) { - uriDeletePromises.set(removedItems[i].uri.spec, PromiseUtils.defer()); - } - } - - let observer = { - deferred: PromiseUtils.defer(), - onBeginUpdateBatch: function() {}, - onEndUpdateBatch: function() {}, - onVisit: function(uri) { - this.deferred.reject(new Error("Unexpected call to onVisit " + uri.spec)); - }, - onTitleChanged: function(uri) { - this.deferred.reject(new Error("Unexpected call to onTitleChanged " + uri.spec)); - }, - onClearHistory: function() { - this.deferred.reject("Unexpected call to onClearHistory"); - }, - onPageChanged: function(uri) { - this.deferred.reject(new Error("Unexpected call to onPageChanged " + uri.spec)); - }, - onFrecencyChanged: function(aURI) { - do_print("onFrecencyChanged " + aURI.spec); - let deferred = frecencyChangePromises.get(aURI.spec); - Assert.ok(!!deferred, "Observing onFrecencyChanged"); - deferred.resolve(); - }, - onManyFrecenciesChanged: function() { - do_print("Many frecencies changed"); - for (let [, deferred] of frecencyChangePromises) { - deferred.resolve(); - } - }, - onDeleteURI: function(aURI) { - do_print("onDeleteURI " + aURI.spec); - let deferred = uriDeletePromises.get(aURI.spec); - Assert.ok(!!deferred, "Observing onDeleteURI"); - deferred.resolve(); - }, - onDeleteVisits: function(aURI) { - // Not sure we can test anything. - } - }; - PlacesUtils.history.addObserver(observer, false); - - let cbarg; - if (options.useCallback) { - do_print("Setting up callback"); - cbarg = [info => { - for (let visit of visits) { - do_print("Comparing " + info.date + " and " + visit.test.jsDate); - if (Math.abs(visit.test.jsDate - info.date) < 100) { // Assume rounding errors - Assert.ok(!visit.test.announcedByOnRow, - "This is the first time we announce the removal of this visit"); - Assert.ok(visit.test.toRemove, - "This is a visit we intended to remove"); - visit.test.announcedByOnRow = true; - return; - } - } - Assert.ok(false, "Could not find the visit we attempt to remove"); - }]; - } else { - do_print("No callback"); - cbarg = []; - } - let result = yield PlacesUtils.history.removeVisitsByFilter(filter, ...cbarg); - - Assert.ok(result, "Removal succeeded"); - - // Make sure that we have eliminated exactly the entries we expected - // to eliminate. - for (let i = 0; i < visits.length; ++i) { - let visit = visits[i]; - do_print("Controlling the results on visit " + i); - let remainingVisitsForURI = remainingItems.filter(v => visit.uri.spec == v.uri.spec).length; - Assert.equal( - visits_in_database(visit.uri), - remainingVisitsForURI, - "Visit is still present iff expected"); - if (options.useCallback) { - Assert.equal( - visit.test.toRemove, - visit.test.announcedByOnRow, - "Visit removal has been announced by onResult iff expected"); - } - if (visit.test.hasBookmark || remainingVisitsForURI) { - Assert.notEqual(page_in_database(visit.uri), 0, "The page should still appear in the db"); - } else { - Assert.equal(page_in_database(visit.uri), 0, "The page should have been removed from the db"); - } - } - - // Make sure that the observer has been called wherever applicable. - do_print("Checking URI delete promises."); - yield Promise.all(Array.from(uriDeletePromises.values())); - do_print("Checking frecency change promises."); - yield Promise.all(Array.from(frecencyChangePromises.values())); - PlacesUtils.history.removeObserver(observer); - }); - - let size = 20; - for (let range of [ - {begin: 0}, - {end: 19}, - {begin: 0, end: 10}, - {begin: 3, end: 4}, - {begin: 5, end: 8, limit: 2}, - {begin: 10, end: 18, limit: 5}, - ]) { - for (let bookmarks of [[], [5, 6]]) { - let options = { - sampleSize: size, - bookmarks: bookmarks, - }; - if ("begin" in range) { - options.begin = range.begin; - } - if ("end" in range) { - options.end = range.end; - } - if ("limit" in range) { - options.limit = range.limit; - } - yield remover(options); - options.url = 1; - yield remover(options); - options.url = 2; - yield remover(options); - options.url = 3; - yield remover(options); - } - } - yield PlacesTestUtils.clearHistory(); -}); - -// Test the various error cases -add_task(function* test_error_cases() { - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter(), - /TypeError: Expected a filter/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter("obviously, not a filter"), - /TypeError: Expected a filter/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({}), - /TypeError: Expected a non-empty filter/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({beginDate: "now"}), - /TypeError: Expected a Date/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({beginDate: Date.now()}), - /TypeError: Expected a Date/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({beginDate: new Date()}, "obviously, not a callback"), - /TypeError: Invalid function/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({beginDate: new Date(1000), endDate: new Date(0)}), - /TypeError: `beginDate` should be at least as old/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({limit: {}}), - /Expected a non-zero positive integer as a limit/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({limit: -1}), - /Expected a non-zero positive integer as a limit/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({limit: 0.1}), - /Expected a non-zero positive integer as a limit/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({limit: Infinity}), - /Expected a non-zero positive integer as a limit/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({url: {}}), - /Expected a valid URL for `url`/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({url: 0}), - /Expected a valid URL for `url`/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({beginDate: new Date(1000), endDate: new Date(0)}), - /TypeError: `beginDate` should be at least as old/ - ); - Assert.throws( - () => PlacesUtils.history.removeVisitsByFilter({beginDate: new Date(1000), endDate: new Date(0)}), - /TypeError: `beginDate` should be at least as old/ - ); -}); - -add_task(function* test_orphans() { - let uri = NetUtil.newURI("http://moz.org/"); - yield PlacesTestUtils.addVisits({ uri }); - - PlacesUtils.favicons.setAndFetchFaviconForPage( - uri, SMALLPNG_DATA_URI, true, PlacesUtils.favicons.FAVICON_LOAD_NON_PRIVATE, - null, Services.scriptSecurityManager.getSystemPrincipal()); - PlacesUtils.annotations.setPageAnnotation(uri, "test", "restval", 0, - PlacesUtils.annotations.EXPIRE_NEVER); - - yield PlacesUtils.history.removeVisitsByFilter({ beginDate: new Date(1999, 9, 9, 9, 9), - endDate: new Date() }); - Assert.ok(!(yield PlacesTestUtils.isPageInDB(uri)), "Page should have been removed"); - let db = yield PlacesUtils.promiseDBConnection(); - let rows = yield db.execute(`SELECT (SELECT count(*) FROM moz_annos) + - (SELECT count(*) FROM moz_favicons) AS count`); - Assert.equal(rows[0].getResultByName("count"), 0, "Should not find orphans"); -}); |