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

"use strict";

// Test that hovering over regions in the box-model shows the highlighter with
// the right options.
// Tests that actually check the highlighter is displayed and correct are in the
// devtools/inspector/test folder. This test only cares about checking that the
// box model view does call the highlighter, and it does so by mocking it.

const STYLE = "div { position: absolute; top: 50px; left: 50px; " +
              "height: 10px; width: 10px; border: 10px solid black; " +
              "padding: 10px; margin: 10px;}";
const HTML = "<style>" + STYLE + "</style><div></div>";
const TEST_URL = "data:text/html;charset=utf-8," + encodeURIComponent(HTML);

var highlightedNodeFront, highlighterOptions;

add_task(function* () {
  yield addTab(TEST_URL);
  let {toolbox, inspector, view} = yield openBoxModelView();
  yield selectNode("div", inspector);

  // Mock the highlighter by replacing the showBoxModel method.
  toolbox.highlighter.showBoxModel = function (nodeFront, options) {
    highlightedNodeFront = nodeFront;
    highlighterOptions = options;
  };

  let elt = view.doc.getElementById("boxmodel-margins");
  yield testGuideOnLayoutHover(elt, "margin", inspector, view);

  elt = view.doc.getElementById("boxmodel-borders");
  yield testGuideOnLayoutHover(elt, "border", inspector, view);

  elt = view.doc.getElementById("boxmodel-padding");
  yield testGuideOnLayoutHover(elt, "padding", inspector, view);

  elt = view.doc.getElementById("boxmodel-content");
  yield testGuideOnLayoutHover(elt, "content", inspector, view);
});

function* testGuideOnLayoutHover(elt, expectedRegion, inspector) {
  info("Synthesizing mouseover on the boxmodel-view");
  EventUtils.synthesizeMouse(elt, 2, 2, {type: "mouseover"},
    elt.ownerDocument.defaultView);

  info("Waiting for the node-highlight event from the toolbox");
  yield inspector.toolbox.once("node-highlight");

  is(highlightedNodeFront, inspector.selection.nodeFront,
    "The right nodeFront was highlighted");
  is(highlighterOptions.region, expectedRegion,
    "Region " + expectedRegion + " was highlighted");
}
