/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

ignoreAllUncaughtExceptions();

add_task(async function () {
  // See browser_contentSearchUI.js for comprehensive content search UI tests.
  info("Search suggestion smoke test");

  await SpecialPowers.pushPrefEnv({
    set: [
      [
        "browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar",
        false,
      ],
    ],
  });

  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:home" },
    async function (browser) {
      // Add a test engine that provides suggestions and switch to it.
      let engine;
      await promiseContentSearchChange(browser, async () => {
        engine = await SearchTestUtils.promiseNewSearchEngine({
          url: getRootDirectory(gTestPath) + "searchSuggestionEngine.xml",
          setAsDefault: true,
        });
        await Services.search.setDefault(
          engine,
          Ci.nsISearchService.CHANGE_REASON_UNKNOWN
        );
        return engine.name;
      });

      await SpecialPowers.spawn(browser, [], async function () {
        // Type an X in the search input.
        let input = content.document.querySelector([
          "#searchText",
          "#newtab-search-text",
        ]);
        input.focus();
      });

      await BrowserTestUtils.synthesizeKey("x", {}, browser);

      await SpecialPowers.spawn(browser, [], async function () {
        // Wait for the search suggestions to become visible.
        let table = content.document.getElementById("searchSuggestionTable");
        let input = content.document.querySelector([
          "#searchText",
          "#newtab-search-text",
        ]);

        await ContentTaskUtils.waitForMutationCondition(
          input,
          { attributeFilter: ["aria-expanded"] },
          () => input.getAttribute("aria-expanded") == "true"
        );
        ok(!table.hidden, "Search suggestion table unhidden");
      });

      // Empty the search input, causing the suggestions to be hidden.
      await BrowserTestUtils.synthesizeKey("a", { accelKey: true }, browser);
      await BrowserTestUtils.synthesizeKey("VK_DELETE", {}, browser);

      await SpecialPowers.spawn(browser, [], async function () {
        let table = content.document.getElementById("searchSuggestionTable");
        await ContentTaskUtils.waitForCondition(
          () => table.hidden,
          "Search suggestion table hidden"
        );
      });
    }
  );
  await SpecialPowers.popPrefEnv();
});
