Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test for following highlighting related.
// * highlight when mouse over on a target node
// * unhighlight when mouse out from the above element
// * lock highlighting when click on the inspect icon in animation target component
// * add 'highlighting' class to animation target component during locking
// * mouseover locked target node
// * unlock highlighting when click on the above icon
// * lock highlighting when click on the other inspect icon
// * if the locked node has multi animations,
// the class will add to those animation target as well
add_task(async function () {
await addTab(URL_ROOT + "doc_simple_animation.html");
await removeAnimatedElementsExcept([".animated", ".multi"]);
const { animationInspector, inspector, panel } =
await openAnimationInspector();
const { waitForHighlighterTypeShown, waitForHighlighterTypeHidden } =
getHighlighterTestHelpers(inspector);
info("Check highlighting when mouse over on a target node");
const onHighlight = waitForHighlighterTypeShown(
inspector.highlighters.TYPES.BOXMODEL
);
mouseOverOnTargetNode(animationInspector, panel, 0);
let data = await onHighlight;
assertNodeFront(data.nodeFront, "DIV", "ball animated");
info("Check unhighlighting when mouse out on a target node");
const onUnhighlight = waitForHighlighterTypeHidden(
inspector.highlighters.TYPES.BOXMODEL
);
mouseOutOnTargetNode(animationInspector, panel, 0);
await onUnhighlight;
ok(true, "Unhighlighted the targe node");
info("Check node is highlighted when the inspect icon is clicked");
const onHighlighterShown = waitForHighlighterTypeShown(
inspector.highlighters.TYPES.BOXMODEL
);
await clickOnInspectIcon(animationInspector, panel, 0);
data = await onHighlighterShown;
assertNodeFront(data.nodeFront, "DIV", "ball animated");
await assertHighlight(panel, 0, true);
info("Check if the animation target is still highlighted on mouse out");
mouseOutOnTargetNode(animationInspector, panel, 0);
await wait(500);
await assertHighlight(panel, 0, true);
info("Check no highlight event occur by mouse over locked target");
let highlightEventCount = 0;
function onHighlighterHidden({ type }) {
if (type === inspector.highlighters.TYPES.BOXMODEL) {
highlightEventCount += 1;
}
}
inspector.highlighters.on("highlighter-hidden", onHighlighterHidden);
mouseOverOnTargetNode(animationInspector, panel, 0);
await wait(500);
is(highlightEventCount, 0, "Highlight event should not occur");
inspector.highlighters.off("highlighter-hidden", onHighlighterHidden);
info("Show persistent highlighter on an animation target");
const onPersistentHighlighterShown = waitForHighlighterTypeShown(
inspector.highlighters.TYPES.SELECTOR
);
await clickOnInspectIcon(animationInspector, panel, 1);
data = await onPersistentHighlighterShown;
assertNodeFront(data.nodeFront, "DIV", "ball multi");
info("Check the highlighted state of the animation targets");
await assertHighlight(panel, 0, false);
await assertHighlight(panel, 1, true);
await assertHighlight(panel, 2, true);
info("Hide persistent highlighter");
const onPersistentHighlighterHidden = waitForHighlighterTypeHidden(
inspector.highlighters.TYPES.SELECTOR
);
await clickOnInspectIcon(animationInspector, panel, 1);
await onPersistentHighlighterHidden;
info("Check the highlighted state of the animation targets");
await assertHighlight(panel, 0, false);
await assertHighlight(panel, 1, false);
await assertHighlight(panel, 2, false);
});
async function assertHighlight(panel, index, isHighlightExpected) {
const animationItemEl = await findAnimationItemByIndex(panel, index);
const animationTargetEl = animationItemEl.querySelector(".animation-target");
await waitUntil(
() =>
animationTargetEl.classList.contains("highlighting") ===
isHighlightExpected
);
ok(true, `Highlighting class of animation target[${index}] is correct`);
}
function assertNodeFront(nodeFront, tagName, classValue) {
is(nodeFront.tagName, "DIV", "The highlighted node has the correct tagName");
is(
nodeFront.attributes[0].name,
"class",
"The highlighted node has the correct attributes"
);
is(
nodeFront.attributes[0].value,
classValue,
"The highlighted node has the correct class"
);
}