Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Errors
- This test gets skipped with pattern: os == 'linux' && os_version == '18.04' && asan OR os == 'linux' && os_version == '18.04' && tsan OR win11_2009 && asan
- This test failed 54 times in the preceding 30 days. quicksearch this test
- Manifest: browser/components/preferences/tests/browser.toml
"use strict";
/**
* This file contains tests for the Preferences search bar.
*/
requestLongerTimeout(6);
/**
* Tests to see if search bar is being shown when pref is turned on
*/
add_task(async function show_search_bar_when_pref_is_enabled() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
leaveOpen: true,
});
let searchInput = gBrowser.contentDocument.getElementById("searchInput");
is_element_visible(searchInput, "Search box should be shown");
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for "Search Result" panel.
* After it runs a search, it tests if the "Search Results" panel is the only selected category.
* The search is then cleared, it then tests if the "General" panel is the only selected category.
*/
add_task(async function show_search_results_pane_only_then_revert_to_general() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
leaveOpen: true,
});
// Performs search
let searchInput = gBrowser.contentDocument.getElementById("searchInput");
is(
searchInput,
gBrowser.contentDocument.activeElement.closest("#searchInput"),
"Search input should be focused when visiting preferences"
);
let query = "password";
let searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == query
);
EventUtils.sendString(query);
await searchCompletedPromise;
let categoriesList = gBrowser.contentDocument.getElementById("categories");
for (let i = 0; i < categoriesList.childElementCount; i++) {
let child = categoriesList.itemChildren[i];
is(child.selected, false, "No other panel should be selected");
}
// Takes search off
searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == ""
);
let count = query.length;
while (count--) {
EventUtils.sendKey("BACK_SPACE");
}
await searchCompletedPromise;
// Checks if back to generalPane
for (let i = 0; i < categoriesList.childElementCount; i++) {
let child = categoriesList.itemChildren[i];
if (child.id == "category-general") {
is(child.selected, true, "General panel should be selected");
} else if (child.id) {
is(child.selected, false, "No other panel should be selected");
}
}
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for "password" case. When we search "password", it should show the "passwordGroup"
*/
add_task(async function search_for_password_show_passwordGroup() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
leaveOpen: true,
});
// Performs search
let searchInput = gBrowser.contentDocument.getElementById("searchInput");
is(
searchInput,
gBrowser.contentDocument.activeElement.closest("#searchInput"),
"Search input should be focused when visiting preferences"
);
let query = "password";
let searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == query
);
EventUtils.sendString(query);
await searchCompletedPromise;
let mainPrefTag = gBrowser.contentDocument.getElementById("mainPrefPane");
for (let i = 0; i < mainPrefTag.childElementCount; i++) {
let child = mainPrefTag.children[i];
if (
child.id == "passwordsGroup" ||
child.id == "weavePrefsDeck" ||
child.id == "header-searchResults" ||
child.id == "certSelection" ||
child.id == "connectionGroup" ||
child.id == "dataMigrationGroup"
) {
is_element_visible(child, "Should be in search results");
} else if (child.id) {
is_element_hidden(child, "Should not be in search results");
}
}
// Takes search off
searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == ""
);
let count = query.length;
while (count--) {
EventUtils.sendKey("BACK_SPACE");
}
await searchCompletedPromise;
let expectedChildren = [
"paneGeneral",
"startupGroup",
"languagesGroup",
"webAppearanceGroup",
"colorsGroup",
"fontsGroup",
"zoomGroup",
"downloadsGroup",
"applicationsGroup",
"drmGroup",
"browsingGroup",
"performanceGroup",
"connectionGroup",
"generalCategory",
"languageAndAppearanceCategory",
"filesAndApplicationsCategory",
"performanceCategory",
"browsingCategory",
"networkProxyCategory",
"dataMigrationGroup",
"translationsGroup",
];
// Only visible for non-MSIX builds
if (
AppConstants.platform !== "win" ||
!Services.sysinfo.getProperty("hasWinPackageId", false)
) {
expectedChildren.push("updatesCategory");
expectedChildren.push("updateApp");
}
// Checks if back to generalPane
for (let i = 0; i < mainPrefTag.childElementCount; i++) {
let child = mainPrefTag.children[i];
if (expectedChildren.includes(child.id)) {
is_element_visible(child, `Should be in general tab: ${child.id}`);
} else if (child.id) {
is_element_hidden(child, `Should not be in general tab: ${child.id}`);
}
}
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for if nothing is found
*/
add_task(async function search_with_nothing_found() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
leaveOpen: true,
});
let noResultsEl = gBrowser.contentDocument.querySelector(
"#no-results-message"
);
let sorryMsgQueryEl = gBrowser.contentDocument.getElementById(
"sorry-message-query"
);
is_element_hidden(noResultsEl, "Should not be in search results yet");
// Performs search
let searchInput = gBrowser.contentDocument.getElementById("searchInput");
is(
searchInput,
gBrowser.contentDocument.activeElement.closest("#searchInput"),
"Search input should be focused when visiting preferences"
);
let query = "coach";
let searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == query
);
EventUtils.sendString(query);
await searchCompletedPromise;
is_element_visible(noResultsEl, "Should be in search results");
is(
sorryMsgQueryEl.textContent,
query,
"sorry-message-query should contain the query"
);
// Takes search off
searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == ""
);
let count = query.length;
while (count--) {
EventUtils.sendKey("BACK_SPACE");
}
await searchCompletedPromise;
is_element_hidden(noResultsEl, "Should not be in search results");
is(
sorryMsgQueryEl.textContent.length,
0,
"sorry-message-query should be empty"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for if we go back to general tab after search case
*/
add_task(async function exiting_search_reverts_to_general_pane() {
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
let generalPane = gBrowser.contentDocument.getElementById("generalCategory");
is_element_hidden(generalPane, "Should not be in general");
// Performs search
let searchInput = gBrowser.contentDocument.getElementById("searchInput");
is(
searchInput,
gBrowser.contentDocument.activeElement.closest("#searchInput"),
"Search input should be focused when visiting preferences"
);
let query = "password";
let searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == query
);
EventUtils.sendString(query);
await searchCompletedPromise;
// Takes search off
searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == ""
);
let count = query.length;
while (count--) {
EventUtils.sendKey("BACK_SPACE");
}
await searchCompletedPromise;
// Checks if back to normal
is_element_visible(generalPane, "Should be in generalPane");
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for if we go to another tab after searching
*/
add_task(async function changing_tabs_after_searching() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
leaveOpen: true,
});
let searchInput = gBrowser.contentDocument.getElementById("searchInput");
is(
searchInput,
gBrowser.contentDocument.activeElement.closest("#searchInput"),
"Search input should be focused when visiting preferences"
);
let query = "permission";
let searchCompletedPromise = BrowserTestUtils.waitForEvent(
gBrowser.contentWindow,
"PreferencesSearchCompleted",
evt => evt.detail == query
);
EventUtils.sendString(query);
await searchCompletedPromise;
// Search header should be shown for the permissions group
let permissionsSearchHeader = gBrowser.contentDocument.querySelector(
"#permissionsGroup .search-header"
);
is(
permissionsSearchHeader.hidden,
false,
"Permissions search-header should be visible"
);
let privacyCategory =
gBrowser.contentDocument.getElementById("category-privacy");
privacyCategory.click();
is(searchInput.value, "", "search input should be empty");
let categoriesList = gBrowser.contentDocument.getElementById("categories");
for (let i = 0; i < categoriesList.childElementCount; i++) {
let child = categoriesList.itemChildren[i];
if (child.id == "category-privacy") {
is(child.selected, true, "Privacy panel should be selected");
} else if (child.id) {
is(child.selected, false, "No other panel should be selected");
}
}
// Search header should now be hidden when viewing the permissions group not through a search
is(
permissionsSearchHeader.hidden,
true,
"Permissions search-header should be hidden"
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});