/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Tests that the rule view's highlightProperty scrolls to the specified declaration.
const TEST_URI = `
Hello this is a test
`;
add_task(async function () {
await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
const { inspector, view } = await openRuleView();
await selectNode(".test", inspector);
const { rules, styleWindow } = view;
info(
"Highlight the computed border-left-width declaration in the rule view."
);
const borderLeftWidthStyle = rules[2].textProps[2].computed.find(
({ name }) => name === "border-left-width"
);
let onHighlightProperty = view.once("scrolled-to-element");
let isHighlighted = view.highlightProperty("border-left-width");
await onHighlightProperty;
ok(isHighlighted, "border-left-property is highlighted.");
ok(
isInViewport(borderLeftWidthStyle.element, styleWindow),
"border-left-width is in view."
);
info("Highlight the font-size declaration in the rule view.");
const fontSize = rules[2].textProps[1].editor;
info("Wait for the view to scroll to the property.");
onHighlightProperty = view.once("scrolled-to-element");
isHighlighted = view.highlightProperty("font-size");
await onHighlightProperty;
ok(isHighlighted, "font-size property is highlighted.");
ok(isInViewport(fontSize.element, styleWindow), "font-size is in view.");
info("Highlight the pseudo-element's color declaration in the rule view.");
const color = rules[0].textProps[1].editor;
info("Wait for the view to scroll to the property.");
onHighlightProperty = view.once("scrolled-to-element");
isHighlighted = view.highlightProperty("color");
await onHighlightProperty;
ok(isHighlighted, "color property is highlighted.");
ok(isInViewport(color.element, styleWindow), "color property is in view.");
info("Highlight margin-top declaration in the rules view.");
const marginTop = rules[2].textProps[3].editor;
info("Wait for the view to scroll to the property.");
onHighlightProperty = view.once("scrolled-to-element");
isHighlighted = view.highlightProperty("margin-top");
await onHighlightProperty;
ok(isHighlighted, "margin-top property is highlighted.");
ok(
isInViewport(marginTop.element, styleWindow),
"margin-top property is in view."
);
});
function isInViewport(element, win) {
const { top, left, bottom, right } = element.getBoundingClientRect();
return (
top >= 0 &&
bottom <= win.innerHeight &&
left >= 0 &&
right <= win.innerWidth
);
}