77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import {
|
|
normalizedWheelZoomSteps,
|
|
orbitControlsDeltaSeconds,
|
|
PREVIEW_AUTO_ROTATE_SPEED,
|
|
PREVIEW_ORBIT_SECONDS_PER_TURN,
|
|
updateOrbitControls,
|
|
wheelZoomDistanceMultiplier
|
|
} from "./orbitControls.js";
|
|
|
|
test("preview auto-rotate speed uses the configured full-turn duration", () => {
|
|
assert.equal(PREVIEW_ORBIT_SECONDS_PER_TURN, 60);
|
|
assert.equal(PREVIEW_AUTO_ROTATE_SPEED, 1);
|
|
});
|
|
|
|
test("orbitControlsDeltaSeconds converts animation timestamps from ms to seconds", () => {
|
|
assert.equal(orbitControlsDeltaSeconds(1016, 1000), 0.016);
|
|
});
|
|
|
|
test("orbitControlsDeltaSeconds preserves slow render frames", () => {
|
|
assert.equal(orbitControlsDeltaSeconds(1400, 1000), 0.4);
|
|
});
|
|
|
|
test("orbitControlsDeltaSeconds clamps stale frame gaps", () => {
|
|
assert.equal(orbitControlsDeltaSeconds(3000, 1000), 1);
|
|
});
|
|
|
|
test("updateOrbitControls passes seconds while auto-rotate is active", () => {
|
|
const updateArgs = [];
|
|
const controls = {
|
|
autoRotate: true,
|
|
update(...args) {
|
|
updateArgs.push(args);
|
|
return true;
|
|
}
|
|
};
|
|
const state = { orbitControlsLastTimestamp: 1000 };
|
|
|
|
assert.equal(updateOrbitControls(controls, 1016, state), true);
|
|
assert.deepEqual(updateArgs, [[0.016]]);
|
|
assert.equal(state.orbitControlsLastTimestamp, 1016);
|
|
});
|
|
|
|
test("updateOrbitControls resets timing when auto-rotate is inactive", () => {
|
|
const updateArgs = [];
|
|
const controls = {
|
|
autoRotate: false,
|
|
update(...args) {
|
|
updateArgs.push(args);
|
|
return false;
|
|
}
|
|
};
|
|
const state = { orbitControlsLastTimestamp: 1016 };
|
|
|
|
assert.equal(updateOrbitControls(controls, 1032, state), false);
|
|
assert.deepEqual(updateArgs, [[]]);
|
|
assert.equal(state.orbitControlsLastTimestamp, 0);
|
|
});
|
|
|
|
test("normalizedWheelZoomSteps normalizes Chrome pixel wheel deltas", () => {
|
|
assert.equal(normalizedWheelZoomSteps({ deltaY: 100, deltaMode: 0 }), 1);
|
|
assert.equal(normalizedWheelZoomSteps({ deltaY: -100, deltaMode: 0 }), -1);
|
|
});
|
|
|
|
test("normalizedWheelZoomSteps caps very large wheel deltas", () => {
|
|
assert.equal(normalizedWheelZoomSteps({ deltaY: 1000, deltaMode: 0 }), 3);
|
|
assert.equal(normalizedWheelZoomSteps({ deltaY: -1000, deltaMode: 0 }), -3);
|
|
});
|
|
|
|
test("wheelZoomDistanceMultiplier keeps one wheel event away from zoom limits", () => {
|
|
assert.ok(wheelZoomDistanceMultiplier({ deltaY: 100, deltaMode: 0 }) < 1.1);
|
|
assert.ok(wheelZoomDistanceMultiplier({ deltaY: -100, deltaMode: 0 }) > 0.9);
|
|
assert.ok(wheelZoomDistanceMultiplier({ deltaY: 1000, deltaMode: 0 }) < 1.3);
|
|
});
|