summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/browser_search_within_preferences_1.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/tests/browser_search_within_preferences_1.js')
-rw-r--r--browser/components/preferences/tests/browser_search_within_preferences_1.js344
1 files changed, 344 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/browser_search_within_preferences_1.js b/browser/components/preferences/tests/browser_search_within_preferences_1.js
new file mode 100644
index 0000000000..504191ecb5
--- /dev/null
+++ b/browser/components/preferences/tests/browser_search_within_preferences_1.js
@@ -0,0 +1,344 @@
+"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);
+});