/* 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";
// Check that the box-model highlighter supports configuration options
const TEST_URL = `
test
`;
// Test data format:
// - desc: a string that will be output to the console.
// - options: json object to be passed as options to the highlighter.
// - checkHighlighter: a generator (async) function that should check the
// highlighter is correct.
const TEST_DATA = [
{
desc: "Guides and infobar should be shown by default",
options: {},
checkHighlighter: async function(testActor) {
let hidden = await testActor.getHighlighterNodeAttribute(
"box-model-infobar-container",
"hidden"
);
ok(!hidden, "Node infobar is visible");
hidden = await testActor.getHighlighterNodeAttribute(
"box-model-elements",
"hidden"
);
ok(!hidden, "SVG container is visible");
for (const side of ["top", "right", "bottom", "left"]) {
hidden = await testActor.getHighlighterNodeAttribute(
"box-model-guide-" + side,
"hidden"
);
ok(!hidden, side + " guide is visible");
}
},
},
{
desc: "All regions should be shown by default",
options: {},
checkHighlighter: async function(testActor) {
for (const region of ["margin", "border", "padding", "content"]) {
const { d } = await testActor.getHighlighterRegionPath(region);
ok(d, "Region " + region + " has set coordinates");
}
},
},
{
desc: "Guides can be hidden",
options: { hideGuides: true },
checkHighlighter: async function(testActor) {
for (const side of ["top", "right", "bottom", "left"]) {
const hidden = await testActor.getHighlighterNodeAttribute(
"box-model-guide-" + side,
"hidden"
);
is(hidden, "true", side + " guide has been hidden");
}
},
},
{
desc: "Infobar can be hidden",
options: { hideInfoBar: true },
checkHighlighter: async function(testActor) {
const hidden = await testActor.getHighlighterNodeAttribute(
"box-model-infobar-container",
"hidden"
);
is(hidden, "true", "infobar has been hidden");
},
},
{
desc: "One region only can be shown (1)",
options: { showOnly: "content" },
checkHighlighter: async function(testActor) {
let { d } = await testActor.getHighlighterRegionPath("margin");
ok(!d, "margin region is hidden");
({ d } = await testActor.getHighlighterRegionPath("border"));
ok(!d, "border region is hidden");
({ d } = await testActor.getHighlighterRegionPath("padding"));
ok(!d, "padding region is hidden");
({ d } = await testActor.getHighlighterRegionPath("content"));
ok(d, "content region is shown");
},
},
{
desc: "One region only can be shown (2)",
options: { showOnly: "margin" },
checkHighlighter: async function(testActor) {
let { d } = await testActor.getHighlighterRegionPath("margin");
ok(d, "margin region is shown");
({ d } = await testActor.getHighlighterRegionPath("border"));
ok(!d, "border region is hidden");
({ d } = await testActor.getHighlighterRegionPath("padding"));
ok(!d, "padding region is hidden");
({ d } = await testActor.getHighlighterRegionPath("content"));
ok(!d, "content region is hidden");
},
},
{
desc: "Guides can be drawn around a given region (1)",
options: { region: "padding" },
checkHighlighter: async function(testActor) {
const topY1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-top",
"y1"
);
const rightX1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-right",
"x1"
);
const bottomY1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-bottom",
"y1"
);
const leftX1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-left",
"x1"
);
let { points } = await testActor.getHighlighterRegionPath("padding");
points = points[0];
is(topY1, points[0][1], "Top guide's y1 is correct");
is(
parseInt(rightX1, 10),
points[1][0] - 1,
"Right guide's x1 is correct"
);
is(
parseInt(bottomY1, 10),
points[2][1] - 1,
"Bottom guide's y1 is correct"
);
is(leftX1, points[3][0], "Left guide's x1 is correct");
},
},
{
desc: "Guides can be drawn around a given region (2)",
options: { region: "margin" },
checkHighlighter: async function(testActor) {
const topY1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-top",
"y1"
);
const rightX1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-right",
"x1"
);
const bottomY1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-bottom",
"y1"
);
const leftX1 = await testActor.getHighlighterNodeAttribute(
"box-model-guide-left",
"x1"
);
let { points } = await testActor.getHighlighterRegionPath("margin");
points = points[0];
is(topY1, points[0][1], "Top guide's y1 is correct");
is(
parseInt(rightX1, 10),
points[1][0] - 1,
"Right guide's x1 is correct"
);
is(
parseInt(bottomY1, 10),
points[2][1] - 1,
"Bottom guide's y1 is correct"
);
is(leftX1, points[3][0], "Left guide's x1 is correct");
},
},
{
desc: "When showOnly is used, other regions can be faded",
options: { showOnly: "margin", onlyRegionArea: true },
checkHighlighter: async function(testActor) {
for (const region of ["margin", "border", "padding", "content"]) {
const { d } = await testActor.getHighlighterRegionPath(region);
ok(d, "Region " + region + " is shown (it has a d attribute)");
const faded = await testActor.getHighlighterNodeAttribute(
"box-model-" + region,
"faded"
);
if (region === "margin") {
ok(!faded, "The margin region is not faded");
} else {
is(faded, "true", "Region " + region + " is faded");
}
}
},
},
{
desc: "When showOnly is used, other regions can be faded (2)",
options: { showOnly: "padding", onlyRegionArea: true },
checkHighlighter: async function(testActor) {
for (const region of ["margin", "border", "padding", "content"]) {
const { d } = await testActor.getHighlighterRegionPath(region);
ok(d, "Region " + region + " is shown (it has a d attribute)");
const faded = await testActor.getHighlighterNodeAttribute(
"box-model-" + region,
"faded"
);
if (region === "padding") {
ok(!faded, "The padding region is not faded");
} else {
is(faded, "true", "Region " + region + " is faded");
}
}
},
},
];
add_task(async function() {
const { inspector, testActor } = await openInspectorForURL(
"data:text/html;charset=utf-8," + encodeURI(TEST_URL)
);
const divFront = await getNodeFront("div", inspector);
for (const { desc, options, checkHighlighter } of TEST_DATA) {
info("Running test: " + desc);
info("Show the box-model highlighter with options " + options);
await inspector.highlighters.showHighlighterTypeForNode(
inspector.highlighters.TYPES.BOXMODEL,
divFront,
options
);
await checkHighlighter(testActor);
info("Hide the box-model highlighter");
await inspector.highlighters.hideHighlighterType(
inspector.highlighters.TYPES.BOXMODEL
);
}
});