Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
test_newtab({
async before() {
// Some reason test-linux1804-64-qr/debug can end up with example.com, so
// clear history so we only have the expected default top sites.
await clearHistoryAndBookmarks();
await setDefaultTopSites();
},
// Test verifies the menu options for a default top site.
test: async function defaultTopSites_menuOptions() {
const siteSelector = ".top-site-outer:not(.search-shortcut, .placeholder)";
await ContentTaskUtils.waitForCondition(
() => content.document.querySelector(siteSelector),
"Topsite tippytop icon not found"
);
const contextMenuItems = await content.openContextMenuAndGetOptions(
siteSelector
);
Assert.equal(contextMenuItems.length, 5, "Number of options is correct");
const expectedItemsText = [
"Pin",
"Edit",
"Open in a New Window",
"Open in a New Private Window",
"Dismiss",
];
for (let i = 0; i < contextMenuItems.length; i++) {
await ContentTaskUtils.waitForCondition(
() => contextMenuItems[i].textContent === expectedItemsText[i],
"Name option is correct"
);
}
},
});
test_newtab({
before: setDefaultTopSites,
// Test verifies that the next top site in queue replaces a dismissed top site.
test: async function defaultTopSites_dismiss() {
const siteSelector = ".top-site-outer:not(.search-shortcut, .placeholder)";
await ContentTaskUtils.waitForCondition(
() => content.document.querySelector(siteSelector),
"Topsite tippytop icon not found"
);
// Don't count search topsites
const defaultTopSitesNumber =
content.document.querySelectorAll(siteSelector).length;
Assert.equal(defaultTopSitesNumber, 5, "5 top sites are loaded by default");
// Skip the search topsites select the second default topsite
const secondTopSite = content.document
.querySelectorAll(siteSelector)[1]
.getAttribute("href");
const contextMenuItems = await content.openContextMenuAndGetOptions(
siteSelector
);
await ContentTaskUtils.waitForCondition(
() => contextMenuItems[4].textContent === "Dismiss",
"'Dismiss' is the 5th item in the context menu list"
);
contextMenuItems[4].querySelector("button").click();
// Wait for the topsite to be dismissed and the second one to replace it
await ContentTaskUtils.waitForCondition(
() =>
content.document.querySelector(siteSelector).getAttribute("href") ===
secondTopSite,
"First default topsite was dismissed"
);
await ContentTaskUtils.waitForCondition(
() => content.document.querySelectorAll(siteSelector).length === 4,
"4 top sites are displayed after one of them is dismissed"
);
},
async after() {
await new Promise(resolve => NewTabUtils.undoAll(resolve));
},
});
test_newtab({
before: setDefaultTopSites,
test: async function searchTopSites_dismiss() {
const siteSelector = ".search-shortcut";
await ContentTaskUtils.waitForCondition(
() => content.document.querySelectorAll(siteSelector).length === 1,
"1 search topsites is loaded by default"
);
const contextMenuItems = await content.openContextMenuAndGetOptions(
siteSelector
);
is(
contextMenuItems.length,
2,
"Search TopSites should only have Unpin and Dismiss"
);
// Unpin
contextMenuItems[0].querySelector("button").click();
await ContentTaskUtils.waitForCondition(
() => content.document.querySelectorAll(siteSelector).length === 1,
"1 search topsite displayed after we unpin the other one"
);
},
after: () => {
// Required for multiple test runs in the same browser, pref is used to
// prevent pinning the same search topsite twice
Services.prefs.clearUserPref(
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned"
);
},
});