Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: devtools/client/shared/test/browser.toml
/* Any copyright is dedicated to the Public Domain.
/* import-globals-from helper_html_tooltip.js */
"use strict";
/**
* Test the HTMLTooltip can be resized.
*/
const TEST_URI = CHROME_URL_ROOT + "doc_html_tooltip.xhtml";
const {
HTMLTooltip,
} = require("resource://devtools/client/shared/widgets/tooltip/HTMLTooltip.js");
loadHelperScript("helper_html_tooltip.js");
const TOOLBOX_WIDTH = 500;
add_task(async function () {
await pushPref("devtools.toolbox.sidebar.width", TOOLBOX_WIDTH);
// Open the host on the right so that the doorhangers hang right.
const { doc } = await createHost("right", TEST_URI);
info("Test resizing of a tooltip");
const tooltip = new HTMLTooltip(doc, {
useXulWrapper: true,
type: "doorhanger",
});
const div = doc.createElementNS(HTML_NS, "div");
div.textContent = "tooltip";
div.style.cssText = "width: 100px; height: 40px";
tooltip.panel.appendChild(div);
const box1 = doc.getElementById("box1");
await showTooltip(tooltip, box1, { position: "top" });
// Get the original position of the panel and arrow.
const originalPanelBounds = tooltip.panel
.getBoxQuads({ relativeTo: doc })[0]
.getBounds();
const originalArrowBounds = tooltip.arrow
.getBoxQuads({ relativeTo: doc })[0]
.getBounds();
// Resize the content
div.style.cssText = "width: 200px; height: 30px";
tooltip.show(box1, { position: "top" });
// The panel should have moved 100px to the left and 10px down
const updatedPanelBounds = tooltip.panel
.getBoxQuads({ relativeTo: doc })[0]
.getBounds();
const panelXMovement =
`panel right: ${originalPanelBounds.right} -> ` + updatedPanelBounds.right;
Assert.strictEqual(
Math.round(updatedPanelBounds.right - originalPanelBounds.right),
100,
`Panel should have moved 100px to the right (actual: ${panelXMovement})`
);
const panelYMovement =
`panel top: ${originalPanelBounds.top} -> ` + updatedPanelBounds.top;
Assert.strictEqual(
Math.round(updatedPanelBounds.top - originalPanelBounds.top),
10,
`Panel should have moved 10px down (actual: ${panelYMovement})`
);
// The arrow should be in the same position
const updatedArrowBounds = tooltip.arrow
.getBoxQuads({ relativeTo: doc })[0]
.getBounds();
const arrowXMovement =
`arrow left: ${originalArrowBounds.left} -> ` + updatedArrowBounds.left;
Assert.strictEqual(
Math.round(updatedArrowBounds.left - originalArrowBounds.left),
0,
`Arrow should not have moved (actual: ${arrowXMovement})`
);
const arrowYMovement =
`arrow top: ${originalArrowBounds.top} -> ` + updatedArrowBounds.top;
Assert.strictEqual(
Math.round(updatedArrowBounds.top - originalArrowBounds.top),
0,
`Arrow should not have moved (actual: ${arrowYMovement})`
);
await hideTooltip(tooltip);
tooltip.destroy();
});