summaryrefslogtreecommitdiffstats
path: root/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/newtab/tests/xpcshell/test_PlacesProvider.js')
-rw-r--r--browser/components/newtab/tests/xpcshell/test_PlacesProvider.js358
1 files changed, 0 insertions, 358 deletions
diff --git a/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js b/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js
deleted file mode 100644
index 22815741b..000000000
--- a/browser/components/newtab/tests/xpcshell/test_PlacesProvider.js
+++ /dev/null
@@ -1,358 +0,0 @@
-"use strict";
-
-/* global XPCOMUtils, PlacesUtils, PlacesTestUtils, PlacesProvider, NetUtil */
-/* global do_get_profile, run_next_test, add_task */
-/* global equal, ok */
-
-const {
- utils: Cu,
- interfaces: Ci,
-} = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesProvider",
- "resource:///modules/PlacesProvider.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
- "resource://gre/modules/PlacesUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils",
- "resource://testing-common/PlacesTestUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
- "resource://gre/modules/NetUtil.jsm");
-
-// ensure a profile exists
-do_get_profile();
-
-function run_test() {
- PlacesProvider.links.init();
- run_next_test();
-}
-
-// url prefix for test history population
-const TEST_URL = "https://mozilla.com/";
-// time when the test starts execution
-const TIME_NOW = (new Date()).getTime();
-
-// utility function to compute past timestap
-function timeDaysAgo(numDays) {
- return TIME_NOW - (numDays * 24 * 60 * 60 * 1000);
-}
-
-// utility function to make a visit for insetion into places db
-function makeVisit(index, daysAgo, isTyped, domain=TEST_URL) {
- let {
- TRANSITION_TYPED,
- TRANSITION_LINK
- } = PlacesUtils.history;
-
- return {
- uri: NetUtil.newURI(`${domain}${index}`),
- visitDate: timeDaysAgo(daysAgo),
- transition: (isTyped) ? TRANSITION_TYPED : TRANSITION_LINK,
- };
-}
-
-/** Test LinkChecker **/
-
-add_task(function test_LinkChecker_securityCheck() {
-
- let urls = [
- {url: "javascript:alert('hello')", expected: false}, // jshint ignore:line
- {url: "data:image/png;base64,XXX", expected: false},
- {url: "about:newtab", expected: true},
- {url: "https://example.com", expected: true},
- {url: "ftp://example.com", expected: true},
- {url: "file://home/file/image.png", expected: true},
- {url: "resource:///modules/PlacesProvider.jsm", expected: true},
- ];
- for (let {url, expected} of urls) {
- let observed = PlacesProvider.LinkChecker.checkLoadURI(url);
- equal(observed, expected, `can load "${url}"?`);
- }
-});
-
-/** Test Provider **/
-
-add_task(function* test_Links_getLinks() {
- yield PlacesTestUtils.clearHistory();
- let provider = PlacesProvider.links;
-
- let links = yield provider.getLinks();
- equal(links.length, 0, "empty history yields empty links");
-
- // add a visit
- let testURI = NetUtil.newURI("http://mozilla.com");
- yield PlacesTestUtils.addVisits(testURI);
-
- links = yield provider.getLinks();
- equal(links.length, 1, "adding a visit yields a link");
- equal(links[0].url, testURI.spec, "added visit corresponds to added url");
-});
-
-add_task(function* test_Links_getLinks_Order() {
- yield PlacesTestUtils.clearHistory();
- let provider = PlacesProvider.links;
-
- // all four visits must come from different domains to avoid deduplication
- let visits = [
- makeVisit(0, 0, true, "http://bar.com/"), // frecency 200, today
- makeVisit(1, 0, true, "http://foo.com/"), // frecency 200, today
- makeVisit(2, 2, true, "http://buz.com/"), // frecency 200, 2 days ago
- makeVisit(3, 2, false, "http://aaa.com/"), // frecency 10, 2 days ago, transition
- ];
-
- let links = yield provider.getLinks();
- equal(links.length, 0, "empty history yields empty links");
- yield PlacesTestUtils.addVisits(visits);
-
- links = yield provider.getLinks();
- equal(links.length, visits.length, "number of links added is the same as obtain by getLinks");
- for (let i = 0; i < links.length; i++) {
- equal(links[i].url, visits[i].uri.spec, "links are obtained in the expected order");
- }
-});
-
-add_task(function* test_Links_getLinks_Deduplication() {
- yield PlacesTestUtils.clearHistory();
- let provider = PlacesProvider.links;
-
- // all for visits must come from different domains to avoid deduplication
- let visits = [
- makeVisit(0, 2, true, "http://bar.com/"), // frecency 200, 2 days ago
- makeVisit(1, 0, true, "http://bar.com/"), // frecency 200, today
- makeVisit(2, 0, false, "http://foo.com/"), // frecency 10, today
- makeVisit(3, 0, true, "http://foo.com/"), // frecency 200, today
- ];
-
- let links = yield provider.getLinks();
- equal(links.length, 0, "empty history yields empty links");
- yield PlacesTestUtils.addVisits(visits);
-
- links = yield provider.getLinks();
- equal(links.length, 2, "only two links must be left after deduplication");
- equal(links[0].url, visits[1].uri.spec, "earliest link is present");
- equal(links[1].url, visits[3].uri.spec, "most fresent link is present");
-});
-
-add_task(function* test_Links_onLinkChanged() {
- let provider = PlacesProvider.links;
-
- let url = "https://example.com/onFrecencyChanged1";
- let linkChangedMsgCount = 0;
-
- let linkChangedPromise = new Promise(resolve => {
- let handler = (_, link) => { // jshint ignore:line
- /* There are 3 linkChanged events:
- * 1. visit insertion (-1 frecency by default)
- * 2. frecency score update (after transition type calculation etc)
- * 3. title change
- */
- if (link.url === url) {
- equal(link.url, url, `expected url on linkChanged event`);
- linkChangedMsgCount += 1;
- if (linkChangedMsgCount === 3) {
- ok(true, `all linkChanged events captured`);
- provider.off("linkChanged", this);
- resolve();
- }
- }
- };
- provider.on("linkChanged", handler);
- });
-
- // add a visit
- let testURI = NetUtil.newURI(url);
- yield PlacesTestUtils.addVisits(testURI);
- yield linkChangedPromise;
-
- yield PlacesTestUtils.clearHistory();
-});
-
-add_task(function* test_Links_onClearHistory() {
- let provider = PlacesProvider.links;
-
- let clearHistoryPromise = new Promise(resolve => {
- let handler = () => {
- ok(true, `clearHistory event captured`);
- provider.off("clearHistory", handler);
- resolve();
- };
- provider.on("clearHistory", handler);
- });
-
- // add visits
- for (let i = 0; i <= 10; i++) {
- let url = `https://example.com/onClearHistory${i}`;
- let testURI = NetUtil.newURI(url);
- yield PlacesTestUtils.addVisits(testURI);
- }
- yield PlacesTestUtils.clearHistory();
- yield clearHistoryPromise;
-});
-
-add_task(function* test_Links_onDeleteURI() {
- let provider = PlacesProvider.links;
-
- let testURL = "https://example.com/toDelete";
-
- let deleteURIPromise = new Promise(resolve => {
- let handler = (_, {url}) => { // jshint ignore:line
- equal(testURL, url, "deleted url and expected url are the same");
- provider.off("deleteURI", handler);
- resolve();
- };
-
- provider.on("deleteURI", handler);
- });
-
- let testURI = NetUtil.newURI(testURL);
- yield PlacesTestUtils.addVisits(testURI);
- yield PlacesUtils.history.remove(testURL);
- yield deleteURIPromise;
-});
-
-add_task(function* test_Links_onManyLinksChanged() {
- let provider = PlacesProvider.links;
-
- let promise = new Promise(resolve => {
- let handler = () => {
- ok(true);
- provider.off("manyLinksChanged", handler);
- resolve();
- };
-
- provider.on("manyLinksChanged", handler);
- });
-
- let testURL = "https://example.com/toDelete";
- let testURI = NetUtil.newURI(testURL);
- yield PlacesTestUtils.addVisits(testURI);
-
- // trigger DecayFrecency
- PlacesUtils.history.QueryInterface(Ci.nsIObserver).
- observe(null, "idle-daily", "");
-
- yield promise;
-});
-
-add_task(function* test_Links_execute_query() {
- yield PlacesTestUtils.clearHistory();
- let provider = PlacesProvider.links;
-
- let visits = [
- makeVisit(0, 0, true), // frecency 200, today
- makeVisit(1, 0, true), // frecency 200, today
- makeVisit(2, 2, true), // frecency 200, 2 days ago
- makeVisit(3, 2, false), // frecency 10, 2 days ago, transition
- ];
-
- yield PlacesTestUtils.addVisits(visits);
-
- function testItemValue(results, index, value) {
- equal(results[index][0], `${TEST_URL}${value}`, "raw url");
- equal(results[index][1], `test visit for ${TEST_URL}${value}`, "raw title");
- }
-
- function testItemObject(results, index, columnValues) {
- Object.keys(columnValues).forEach(name => {
- equal(results[index][name], columnValues[name], "object name " + name);
- });
- }
-
- // select all 4 records
- let results = yield provider.executePlacesQuery("select url, title from moz_places");
- equal(results.length, 4, "expect 4 items");
- // check for insert order sequence
- for (let i = 0; i < results.length; i++) {
- testItemValue(results, i, i);
- }
-
- // test parameter passing
- results = yield provider.executePlacesQuery(
- "select url, title from moz_places limit :limit",
- {params: {limit: 2}}
- );
- equal(results.length, 2, "expect 2 items");
- for (let i = 0; i < results.length; i++) {
- testItemValue(results, i, i);
- }
-
- // test extracting items by name
- results = yield provider.executePlacesQuery(
- "select url, title from moz_places limit :limit",
- {columns: ["url", "title"], params: {limit: 4}}
- );
- equal(results.length, 4, "expect 4 items");
- for (let i = 0; i < results.length; i++) {
- testItemObject(results, i, {
- "url": `${TEST_URL}${i}`,
- "title": `test visit for ${TEST_URL}${i}`,
- });
- }
-
- // test ordering
- results = yield provider.executePlacesQuery(
- "select url, title, last_visit_date, frecency from moz_places " +
- "order by frecency DESC, last_visit_date DESC, url DESC limit :limit",
- {columns: ["url", "title", "last_visit_date", "frecency"], params: {limit: 4}}
- );
- equal(results.length, 4, "expect 4 items");
- testItemObject(results, 0, {url: `${TEST_URL}1`});
- testItemObject(results, 1, {url: `${TEST_URL}0`});
- testItemObject(results, 2, {url: `${TEST_URL}2`});
- testItemObject(results, 3, {url: `${TEST_URL}3`});
-
- // test callback passing
- results = [];
- function handleRow(aRow) {
- results.push({
- url: aRow.getResultByName("url"),
- title: aRow.getResultByName("title"),
- last_visit_date: aRow.getResultByName("last_visit_date"),
- frecency: aRow.getResultByName("frecency")
- });
- }
- yield provider.executePlacesQuery(
- "select url, title, last_visit_date, frecency from moz_places " +
- "order by frecency DESC, last_visit_date DESC, url DESC",
- {callback: handleRow}
- );
- equal(results.length, 4, "expect 4 items");
- testItemObject(results, 0, {url: `${TEST_URL}1`});
- testItemObject(results, 1, {url: `${TEST_URL}0`});
- testItemObject(results, 2, {url: `${TEST_URL}2`});
- testItemObject(results, 3, {url: `${TEST_URL}3`});
-
- // negative test cases
- // bad sql
- try {
- yield provider.executePlacesQuery("select from moz");
- do_throw("bad sql should've thrown");
- }
- catch (e) {
- do_check_true("expected failure - bad sql");
- }
- // missing bindings
- try {
- yield provider.executePlacesQuery("select * from moz_places limit :limit");
- do_throw("bad sql should've thrown");
- }
- catch (e) {
- do_check_true("expected failure - missing bidning");
- }
- // non-existent column name
- try {
- yield provider.executePlacesQuery("select * from moz_places limit :limit",
- {columns: ["no-such-column"], params: {limit: 4}});
- do_throw("bad sql should've thrown");
- }
- catch (e) {
- do_check_true("expected failure - wrong column name");
- }
-
- // cleanup
- yield PlacesTestUtils.clearHistory();
-});