/* 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";
const TEST_URL = `data:text/html;charset=utf-8,
`;
const PREFIX = "measuring-tool-highlighter-";
const HIGHLIGHTER_TYPE = "MeasuringToolHighlighter";
const SIDES = ["top", "right", "bottom", "left"];
const X = 32;
const Y = 20;
const WIDTH = 160;
const HEIGHT = 100;
const HYPOTENUSE = Math.hypot(WIDTH, HEIGHT).toFixed(2);
add_task(function* () {
let helper = yield openInspectorForURL(TEST_URL)
.then(getHighlighterHelperFor(HIGHLIGHTER_TYPE));
let { show, finalize } = helper;
helper.prefix = PREFIX;
yield show();
yield hasNoLabelsWhenStarts(helper);
yield hasSizeLabelWhenMoved(helper);
yield hasCorrectSizeLabelValue(helper);
yield hasSizeLabelAndGuidesWhenStops(helper);
yield hasCorrectSizeLabelValue(helper);
yield finalize();
});
function* hasNoLabelsWhenStarts({isElementHidden, synthesizeMouse}) {
info("Checking highlighter has no labels when we start to select");
yield synthesizeMouse({
selector: ":root",
options: {type: "mousedown"},
x: X,
y: Y
});
let hidden = yield isElementHidden("label-size");
ok(hidden, "label's size still hidden");
hidden = yield isElementHidden("label-position");
ok(hidden, "label's position still hidden");
info("Checking highlighter has no guides when we start to select");
let guidesHidden = true;
for (let side of SIDES) {
guidesHidden = guidesHidden && (yield isElementHidden("guide-" + side));
}
ok(guidesHidden, "guides are hidden during dragging");
}
function* hasSizeLabelWhenMoved({isElementHidden, synthesizeMouse}) {
info("Checking highlighter has size label when we select the area");
yield synthesizeMouse({
selector: ":root",
options: {type: "mousemove"},
x: X + WIDTH,
y: Y + HEIGHT
});
let hidden = yield isElementHidden("label-size");
is(hidden, false, "label's size is visible during selection");
hidden = yield isElementHidden("label-position");
ok(hidden, "label's position still hidden");
info("Checking highlighter has no guides when we select the area");
let guidesHidden = true;
for (let side of SIDES) {
guidesHidden = guidesHidden && (yield isElementHidden("guide-" + side));
}
ok(guidesHidden, "guides are hidden during selection");
}
function* hasSizeLabelAndGuidesWhenStops({isElementHidden, synthesizeMouse}) {
info("Checking highlighter has size label and guides when we stop");
yield synthesizeMouse({
selector: ":root",
options: {type: "mouseup"},
x: X + WIDTH,
y: Y + HEIGHT
});
let hidden = yield isElementHidden("label-size");
is(hidden, false, "label's size is visible when the selection is done");
hidden = yield isElementHidden("label-position");
ok(hidden, "label's position still hidden");
let guidesVisible = true;
for (let side of SIDES) {
guidesVisible = guidesVisible && !(yield isElementHidden("guide-" + side));
}
ok(guidesVisible, "guides are visible when the selection is done");
}
function* hasCorrectSizeLabelValue({getElementTextContent}) {
let text = yield getElementTextContent("label-size");
let [width, height, hypot] = text.match(/\d.*px/g);
is(parseFloat(width), WIDTH, "width on label's size is correct");
is(parseFloat(height), HEIGHT, "height on label's size is correct");
is(parseFloat(hypot), HYPOTENUSE, "hypotenuse on label's size is correct");
}