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

XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
  "resource://gre/modules/AppConstants.jsm");

ignoreAllUncaughtExceptions();

add_task(async function setup() {
  // The following prefs would affect tests so make sure to disable them
  // before any tests start.
  await SpecialPowers.pushPrefEnv({set: [
    ["browser.newtabpage.activity-stream.aboutHome.enabled", false],
  ]});
});

add_task(async function() {
  info("Pressing Space while the Addons button is focused should activate it");

  // Skip this test on Mac, because Space doesn't activate the button there.
  if (AppConstants.platform == "macosx") {
    return;
  }

  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:home" }, async function(browser) {
    info("Waiting for about:addons tab to open...");
    let promiseTabLoaded = BrowserTestUtils.browserLoaded(browser, false, "about:addons");

    await ContentTask.spawn(browser, null, async function() {
      let addOnsButton = content.document.getElementById("addons");
      addOnsButton.focus();
    });
    await BrowserTestUtils.synthesizeKey(" ", {}, browser);

    await promiseTabLoaded;
    is(browser.currentURI.spec, "about:addons",
      "Should have seen the about:addons tab");
  });
});

add_task(async function() {
  info("Sync button should open about:preferences#sync");

  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:home" }, async function(browser) {
    let oldOpenPrefs = window.openPreferences;
    let openPrefsPromise = new Promise(resolve => {
      window.openPreferences = function(pane, params) {
        resolve({ pane, params });
      };
    });

    await BrowserTestUtils.synthesizeMouseAtCenter("#sync", {}, browser);

    let result = await openPrefsPromise;
    window.openPreferences = oldOpenPrefs;

    is(result.pane, "paneSync", "openPreferences should be called with paneSync");
    is(result.params.urlParams.entrypoint, "abouthome",
      "openPreferences should be called with abouthome entrypoint");
  });
});

add_task(async function() {
  info("Pressing any key should focus the search box in the page, and send the key to it");

  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:home" }, async function(browser) {
    await BrowserTestUtils.synthesizeMouseAtCenter("#brandLogo", {}, browser);

    await ContentTask.spawn(browser, null, async function() {
      let doc = content.document;
      isnot(doc.getElementById("searchText"), doc.activeElement,
        "Search input should not be the active element.");
    });

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

    await ContentTask.spawn(browser, null, async function() {
      let doc = content.document;
      let searchInput = doc.getElementById("searchText");
      await ContentTaskUtils.waitForCondition(() => doc.activeElement === searchInput,
        "Search input should be the active element.");
      is(searchInput.value, "a", "Search input should be 'a'.");
    });
  });
});
