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

"use strict";

/**
 * Tests for the paste and go functionality of the urlbar.
 */

add_task(async function () {
  const kURLs = [
    "http://example.com/1",
    "http://example.org/2\n",
    "http://\nexample.com/3\n",
  ];
  for (let url of kURLs) {
    await BrowserTestUtils.withNewTab("about:blank", async function (browser) {
      gURLBar.focus();

      await SimpleTest.promiseClipboardChange(url, () => {
        clipboardHelper.copyString(url);
      });
      let menuitem = await promiseContextualMenuitem("paste-and-go");
      let browserLoadedPromise = BrowserTestUtils.browserLoaded(
        browser,
        false,
        url.replace(/\n/g, "")
      );
      menuitem.closest("menupopup").activateItem(menuitem);
      // Using toSource in order to get the newlines escaped:
      info("Paste and go, loading " + url.toSource());
      await browserLoadedPromise;
      ok(true, "Successfully loaded " + url);
    });
  }
});

add_task(async function test_invisible_char() {
  const url = "http://example.com/4\u2028";
  await BrowserTestUtils.withNewTab("about:blank", async function (browser) {
    gURLBar.focus();
    await SimpleTest.promiseClipboardChange(url, () => {
      clipboardHelper.copyString(url);
    });
    let menuitem = await promiseContextualMenuitem("paste-and-go");
    let browserLoadedPromise = BrowserTestUtils.browserLoaded(
      browser,
      false,
      url.replace(/\u2028/g, "")
    );
    menuitem.closest("menupopup").activateItem(menuitem);
    // Using toSource in order to get the newlines escaped:
    info("Paste and go, loading " + url.toSource());
    await browserLoadedPromise;
    ok(true, "Successfully loaded " + url);
  });
});

add_task(async function test_with_input_and_results() {
  // Test paste and go When there's some input and the results pane is open.
  await UrlbarTestUtils.promiseAutocompleteResultPopup({
    window,
    value: "foo",
  });
  const url = "http://example.com/";
  await SimpleTest.promiseClipboardChange(url, () => {
    clipboardHelper.copyString(url);
  });
  let menuitem = await promiseContextualMenuitem("paste-and-go");
  let browserLoadedPromise = BrowserTestUtils.browserLoaded(
    gBrowser.selectedBrowser,
    false,
    url
  );
  menuitem.closest("menupopup").activateItem(menuitem);
  // Using toSource in order to get the newlines escaped:
  info("Paste and go, loading " + url.toSource());
  await browserLoadedPromise;
  ok(true, "Successfully loaded " + url);
});
