/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

/*
Bug 1014547 - CSS transforms highlighter
Test that the highlighter elements created have the right size and coordinates.

Note that instead of hard-coding values here, the assertions are made by
comparing with the result of getAdjustedQuads.

There's a separate test for checking that getAdjustedQuads actually returns
sensible values
(devtools/client/shared/test/browser_layoutHelpers-getBoxQuads.js),
so the present test doesn't care about that, it just verifies that the css
transform highlighter applies those values correctly to the SVG elements
*/

const TEST_URL = URL_ROOT + "doc_inspector_highlighter_csstransform.html";

add_task(async function () {
  const { inspector, highlighterTestFront } = await openInspectorForURL(
    TEST_URL
  );
  const front = inspector.inspectorFront;

  const highlighter = await front.getHighlighterByType(
    "CssTransformHighlighter"
  );

  const nodeFront = await getNodeFront("#test-node", inspector);

  info("Displaying the transform highlighter on test node");
  await highlighter.show(nodeFront);

  const data = await getAllAdjustedQuadsForContentPageElement("#test-node");
  const [expected] = data.border;

  const points = await highlighterTestFront.getHighlighterNodeAttribute(
    "css-transform-transformed",
    "points",
    highlighter
  );
  const polygonPoints = points.split(" ").map(p => {
    return {
      x: +p.substring(0, p.indexOf(",")),
      y: +p.substring(p.indexOf(",") + 1),
    };
  });

  for (let i = 1; i < 5; i++) {
    is(
      polygonPoints[i - 1].x,
      expected["p" + i].x,
      "p" + i + " x coordinate is correct"
    );
    is(
      polygonPoints[i - 1].y,
      expected["p" + i].y,
      "p" + i + " y coordinate is correct"
    );
  }

  info("Hiding the transform highlighter");
  await highlighter.hide();
  await highlighter.finalize();
});
