Files
ladybird/Tests/LibWeb/Text/input/css/rotate-interpolation-same-axis.html
Andreas Kling 593fd69cdb Tests: Make rotation interpolation test use stable boolean checks
Avoid comparing exact matrix3d values which contain floating point
noise that could differ across platforms. Instead, check whether the
transform is or isn't the identity matrix.
2026-03-21 23:16:32 -05:00

46 lines
2.0 KiB
HTML

<!DOCTYPE html>
<div id="target" style="position: absolute;"></div>
<script src="../include.js"></script>
<script>
test(() => {
const el = document.getElementById("target");
// rotateY(0deg) to rotateY(3600deg) should interpolate the angle numerically,
// not via quaternion slerp (which would see 3600deg as equivalent to 0deg).
const anim = el.animate([
{ transform: "rotateY(0deg)" },
{ transform: "rotateY(3600deg)" },
], 1000);
anim.pause();
// Without the fix, all of these would be the identity matrix (no rotation).
// With the fix, 25% of 3600deg = 900deg, which is a non-trivial rotation.
anim.currentTime = 250;
const at25 = getComputedStyle(el).transform;
println("rotateY at 0.25 is not identity: " + (at25 !== "matrix(1, 0, 0, 1, 0, 0)" && at25 !== "none"));
// 50% of 3600deg = 1800deg = 5 full turns, visually equivalent to 0deg.
anim.currentTime = 500;
const at50 = getComputedStyle(el).transform;
// The matrix should be approximately identity (full turns).
println("rotateY at 0.5 is ~identity: " + (at50.startsWith("matrix3d(1,") || at50 === "matrix(1, 0, 0, 1, 0, 0)"));
// 25% of 720deg = 360deg for rotateX, visually identity.
const anim2 = el.animate([
{ transform: "rotateX(0deg)" },
{ transform: "rotateX(720deg)" },
], 1000);
anim2.pause();
// 50% of 720deg = 360deg, visually identity.
anim2.currentTime = 500;
const rx50 = getComputedStyle(el).transform;
println("rotateX at 0.5 of 720deg is ~identity: " + (rx50.startsWith("matrix3d(1,") || rx50 === "matrix(1, 0, 0, 1, 0, 0)"));
// 25% of 720deg = 180deg, should NOT be identity.
anim2.currentTime = 250;
const rx25 = getComputedStyle(el).transform;
println("rotateX at 0.25 of 720deg is not identity: " + (rx25 !== "matrix(1, 0, 0, 1, 0, 0)" && rx25 !== "none"));
});
</script>