Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test for following PlaybackRateSelector component:
// * element existence
// * make playback rate of animations by the selector
// * in case of animations have mixed playback rate
// * in case of animations have playback rate which is not default selectable value
add_task(async function () {
await addTab(URL_ROOT + "doc_custom_playback_rate.html");
const { animationInspector, inspector, panel } =
await openAnimationInspector();
info("Checking playback rate selector existence");
const selectEl = panel.querySelector(".playback-rate-selector");
ok(selectEl, "scrubber controller should exist");
info(
"Checking playback rate existence which includes custom rate of animations"
);
const expectedPlaybackRates = [0.1, 0.25, 0.5, 1, 1.5, 2, 5, 10];
await assertPlaybackRateOptions(selectEl, expectedPlaybackRates);
info("Checking selected playback rate");
is(Number(selectEl.value), 1.5, "Selected option should be 1.5");
info("Checking playback rate of animations");
await changePlaybackRateSelector(animationInspector, panel, 0.5);
await assertPlaybackRate(animationInspector, 0.5);
info("Checking mixed playback rate");
await selectNode("div", inspector);
await waitUntil(() => panel.querySelectorAll(".animation-item").length === 1);
await changePlaybackRateSelector(animationInspector, panel, 2);
await assertPlaybackRate(animationInspector, 2);
await selectNode("body", inspector);
await waitUntil(() => panel.querySelectorAll(".animation-item").length === 2);
await waitUntil(() => selectEl.value === "");
ok(true, "Selected option should be empty");
info("Checking playback rate after re-setting");
await changePlaybackRateSelector(animationInspector, panel, 1);
await assertPlaybackRate(animationInspector, 1);
info(
"Checking whether custom playback rate exist " +
"after selecting another playback rate"
);
await assertPlaybackRateOptions(selectEl, expectedPlaybackRates);
});
async function assertPlaybackRate(animationInspector, rate) {
await waitUntil(() =>
animationInspector.state?.animations.every(
({ state }) => state.playbackRate === rate
)
);
ok(true, `Playback rate of animations should be ${rate}`);
}
async function assertPlaybackRateOptions(selectEl, expectedPlaybackRates) {
await waitUntil(() => {
if (selectEl.options.length !== expectedPlaybackRates.length) {
return false;
}
for (let i = 0; i < selectEl.options.length; i++) {
const optionEl = selectEl.options[i];
const expectedPlaybackRate = expectedPlaybackRates[i];
if (Number(optionEl.value) !== expectedPlaybackRate) {
return false;
}
}
return true;
});
ok(true, "Content of playback rate options are correct");
}