/* vim: set ts=2 et sw=2 tw=80: */ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; requestLongerTimeout(2); // Check that the timeline shows correct time graduations in the header. const {findOptimalTimeInterval, TimeScale} = require("devtools/client/animationinspector/utils"); // Should be kept in sync with TIME_GRADUATION_MIN_SPACING in // animation-timeline.js const TIME_GRADUATION_MIN_SPACING = 40; add_task(function* () { yield addTab(URL_ROOT + "doc_simple_animation.html"); // System scrollbar is enabled by default on our testing envionment and it // would shrink width of inspector and affect number of time-ticks causing // unexpected results. So, we set it wider to avoid this kind of edge case. yield pushPref("devtools.toolsidebar-width.inspector", 350); let {panel} = yield openAnimationInspector(); let timeline = panel.animationsTimelineComponent; let headerEl = timeline.timeHeaderEl; info("Find out how many time graduations should there be"); let width = headerEl.offsetWidth; let animationDuration = TimeScale.maxEndTime - TimeScale.minStartTime; let minTimeInterval = TIME_GRADUATION_MIN_SPACING * animationDuration / width; // Note that findOptimalTimeInterval is tested separately in xpcshell test // test_findOptimalTimeInterval.js, so we assume that it works here. let interval = findOptimalTimeInterval(minTimeInterval); let nb = Math.ceil(animationDuration / interval); is(headerEl.querySelectorAll(".header-item").length, nb, "The expected number of time ticks were found"); info("Make sure graduations are evenly distributed and show the right times"); [...headerEl.querySelectorAll(".time-tick")].forEach((tick, i) => { let left = parseFloat(tick.style.left); let expectedPos = i * interval * 100 / animationDuration; is(Math.round(left), Math.round(expectedPos), `Graduation ${i} is positioned correctly`); // Note that the distancetoRelativeTime and formatTime functions are tested // separately in xpcshell test test_timeScale.js, so we assume that they // work here. let formattedTime = TimeScale.formatTime( TimeScale.distanceToRelativeTime(expectedPos, width)); is(tick.textContent, formattedTime, `Graduation ${i} has the right text content`); }); });