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

"use strict";

// Tests the Filter Editor Tooltip committing changes on ENTER

const TEST_URL = URL_ROOT + "doc_filter.html";

add_task(async function () {
  await addTab(TEST_URL);
  const { view } = await openRuleView();

  info("Get the filter swatch element");
  const swatch = getRuleViewProperty(
    view,
    "body",
    "filter"
  ).valueSpan.querySelector(".ruleview-filterswatch");

  info("Click on the filter swatch element");
  // Clicking on a cssfilter swatch sets the current filter value in the tooltip
  // which, in turn, makes the FilterWidget emit an "updated" event that causes
  // the rule-view to refresh. So we must wait for the ruleview-changed event.
  let onRuleViewChanged = view.once("ruleview-changed");
  swatch.click();
  await onRuleViewChanged;

  info("Get the cssfilter widget instance");
  const filterTooltip = view.tooltips.getTooltip("filterEditor");
  const widget = filterTooltip.widget;

  info("Set a new value in the cssfilter widget");
  onRuleViewChanged = view.once("ruleview-changed");
  widget.setCssValue("blur(2px)");
  await waitForComputedStyleProperty("body", null, "filter", "blur(2px)");
  await onRuleViewChanged;
  ok(true, "Changes previewed on the element");

  info("Press RETURN to commit changes");
  // Pressing return in the cssfilter tooltip triggeres 2 ruleview-changed
  onRuleViewChanged = waitForNEvents(view, "ruleview-changed", 2);
  EventUtils.sendKey("RETURN", widget.styleWindow);
  await onRuleViewChanged;

  is(
    await getComputedStyleProperty("body", null, "filter"),
    "blur(2px)",
    "The elemenet's filter was kept after RETURN"
  );
});
