forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			171 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
/**
 | 
						|
 * This file contains tests for the Preferences search bar.
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Enabling searching functionality. Will display search bar from this testcase forward.
 | 
						|
 */
 | 
						|
add_task(async function() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [["browser.preferences.search", true]],
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * Test that we only search the selected child of a XUL deck.
 | 
						|
 * When we search "Remove Account",
 | 
						|
 * it should not show the "Remove Account" button if the Firefox account is not logged in yet.
 | 
						|
 */
 | 
						|
add_task(async function() {
 | 
						|
  await openPreferencesViaOpenPreferencesAPI("paneSync", { leaveOpen: true });
 | 
						|
 | 
						|
  let weavePrefsDeck = gBrowser.contentDocument.getElementById(
 | 
						|
    "weavePrefsDeck"
 | 
						|
  );
 | 
						|
  is(
 | 
						|
    weavePrefsDeck.selectedIndex,
 | 
						|
    0,
 | 
						|
    "Should select the #noFxaAccount child node"
 | 
						|
  );
 | 
						|
 | 
						|
  // 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 = "Sync";
 | 
						|
  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 == "header-searchResults" || child.id == "weavePrefsDeck") {
 | 
						|
      is_element_visible(child, "Should be in search results");
 | 
						|
    } else if (child.id) {
 | 
						|
      is_element_hidden(child, "Should not be in search results");
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  // Ensure the "Remove Account" button exists in the hidden child of the <xul:deck>.
 | 
						|
  let unlinkFxaAccount = weavePrefsDeck.children[1].querySelector(
 | 
						|
    "#unverifiedUnlinkFxaAccount"
 | 
						|
  );
 | 
						|
  is(
 | 
						|
    unlinkFxaAccount.label,
 | 
						|
    "Remove Account",
 | 
						|
    "The Remove Account button should exist"
 | 
						|
  );
 | 
						|
 | 
						|
  // Performs search.
 | 
						|
  searchInput.focus();
 | 
						|
  query = "Remove Account";
 | 
						|
  searchCompletedPromise = BrowserTestUtils.waitForEvent(
 | 
						|
    gBrowser.contentWindow,
 | 
						|
    "PreferencesSearchCompleted",
 | 
						|
    evt => evt.detail == query
 | 
						|
  );
 | 
						|
  EventUtils.sendString(query);
 | 
						|
  await searchCompletedPromise;
 | 
						|
 | 
						|
  let noResultsEl = gBrowser.contentDocument.querySelector(
 | 
						|
    "#no-results-message"
 | 
						|
  );
 | 
						|
  is_element_visible(noResultsEl, "Should be reporting no results");
 | 
						|
 | 
						|
  BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * Test that we search using `search-l10n-ids`.
 | 
						|
 *
 | 
						|
 * The test uses element `showUpdateHistory` and
 | 
						|
 * l10n id `language-and-appearance-header` and expects the element
 | 
						|
 * to be matched on the first word from the l10n id value ("Language" in en-US).
 | 
						|
 */
 | 
						|
add_task(async function() {
 | 
						|
  let l10nId = "language-and-appearance-header";
 | 
						|
 | 
						|
  await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
 | 
						|
    leaveOpen: true,
 | 
						|
  });
 | 
						|
 | 
						|
  // First, lets make sure that the element is not matched without
 | 
						|
  // `search-l10n-ids`.
 | 
						|
  {
 | 
						|
    let searchInput = gBrowser.contentDocument.getElementById("searchInput");
 | 
						|
    let suhElem = gBrowser.contentDocument.getElementById("showUpdateHistory");
 | 
						|
 | 
						|
    is(
 | 
						|
      searchInput,
 | 
						|
      gBrowser.contentDocument.activeElement.closest("#searchInput"),
 | 
						|
      "Search input should be focused when visiting preferences"
 | 
						|
    );
 | 
						|
 | 
						|
    ok(
 | 
						|
      !suhElem.getAttribute("search-l10n-ids").includes(l10nId),
 | 
						|
      "showUpdateHistory element should not contain the l10n id here."
 | 
						|
    );
 | 
						|
 | 
						|
    let query = "Language";
 | 
						|
    let searchCompletedPromise = BrowserTestUtils.waitForEvent(
 | 
						|
      gBrowser.contentWindow,
 | 
						|
      "PreferencesSearchCompleted",
 | 
						|
      evt => evt.detail == query
 | 
						|
    );
 | 
						|
    EventUtils.sendString(query);
 | 
						|
    await searchCompletedPromise;
 | 
						|
 | 
						|
    is_element_hidden(
 | 
						|
      suhElem,
 | 
						|
      "showUpdateHistory should not be in search results"
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  await BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | 
						|
 | 
						|
  // Now, let's add the l10n id to the element and perform the same search again.
 | 
						|
 | 
						|
  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 suhElem = gBrowser.contentDocument.getElementById("showUpdateHistory");
 | 
						|
    suhElem.setAttribute("search-l10n-ids", l10nId);
 | 
						|
 | 
						|
    let query = "Language";
 | 
						|
    let searchCompletedPromise = BrowserTestUtils.waitForEvent(
 | 
						|
      gBrowser.contentWindow,
 | 
						|
      "PreferencesSearchCompleted",
 | 
						|
      evt => evt.detail == query
 | 
						|
    );
 | 
						|
    EventUtils.sendString(query);
 | 
						|
    await searchCompletedPromise;
 | 
						|
 | 
						|
    is_element_visible(
 | 
						|
      suhElem,
 | 
						|
      "showUpdateHistory should be in search results"
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  await BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | 
						|
});
 |