Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
// Animation inspector should not update when hidden.
// Test for followings:
// * whether the UIs update after selecting another inspector
// * whether the UIs update after selecting another tool
// * whether the UIs update after selecting animation inspector again
add_task(async function () {
info(
"Switch to 2 pane inspector to see if the animation only refreshes when visible"
);
await pushPref("devtools.inspector.three-pane-enabled", false);
await addTab(URL_ROOT + "doc_custom_playback_rate.html");
const { animationInspector, inspector, panel } =
await openAnimationInspector();
info("Checking the UIs update after selecting another inspector");
await selectNode("head", inspector);
inspector.sidebar.select("ruleview");
await selectNode("div", inspector);
await waitUntil(() => !animationInspector.state.animations.length);
ok(true, "Should not update after selecting another inspector");
await selectAnimationInspector(inspector);
await waitUntil(() => animationInspector.state.animations.length);
ok(true, "Should update after selecting animation inspector");
await assertCurrentTimeUpdated(animationInspector, panel, true);
inspector.sidebar.select("ruleview");
is(
animationInspector.state.animations.length,
1,
"Should not update after selecting another inspector again"
);
await assertCurrentTimeUpdated(animationInspector, panel, false);
info("Checking the UIs update after selecting another tool");
await selectAnimationInspector(inspector);
await selectNode("head", inspector);
await waitUntil(() => !animationInspector.state.animations.length);
await inspector.toolbox.selectTool("webconsole");
await selectNode("div", inspector);
is(
animationInspector.state.animations.length,
0,
"Should not update after selecting another tool"
);
await selectAnimationInspector(inspector);
await waitUntil(() => animationInspector.state.animations.length);
is(
animationInspector.state.animations.length,
1,
"Should update after selecting animation inspector"
);
await assertCurrentTimeUpdated(animationInspector, panel, true);
await inspector.toolbox.selectTool("webconsole");
await waitUntil(() => animationInspector.state.animations.length);
is(
animationInspector.state.animations.length,
1,
"Should not update after selecting another tool again"
);
await assertCurrentTimeUpdated(animationInspector, panel, false);
});
async function assertCurrentTimeUpdated(
animationInspector,
panel,
shouldRunning
) {
let count = 0;
const listener = () => {
count++;
};
animationInspector.addAnimationsCurrentTimeListener(listener);
await new Promise(resolve =>
panel.ownerGlobal.requestAnimationFrame(resolve)
);
animationInspector.removeAnimationsCurrentTimeListener(listener);
if (shouldRunning) {
isnot(count, 0, "Should forward current time");
} else {
is(count, 0, "Should not forward current time");
}
}