test(web): cover timeline live preview render edges
This commit is contained in:
@@ -39,6 +39,17 @@ function createSession(element: HTMLElement): LivePreviewSession {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function renderScheduledPreview(session: LivePreviewSession) {
|
||||||
|
let frameCallback: FrameRequestCallback | null = null;
|
||||||
|
vi.stubGlobal("requestAnimationFrame", vi.fn((callback: FrameRequestCallback) => {
|
||||||
|
frameCallback = callback;
|
||||||
|
return 1;
|
||||||
|
}));
|
||||||
|
|
||||||
|
scheduleLivePreview(session);
|
||||||
|
frameCallback?.(0);
|
||||||
|
}
|
||||||
|
|
||||||
describe("timelineLivePreview", () => {
|
describe("timelineLivePreview", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vi.unstubAllGlobals();
|
vi.unstubAllGlobals();
|
||||||
@@ -132,6 +143,57 @@ describe("timelineLivePreview", () => {
|
|||||||
expect(datesMatch(null, null)).toBe(false);
|
expect(datesMatch(null, null)).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("renders move previews with snapped left offsets and residual transforms", () => {
|
||||||
|
const element = createElement();
|
||||||
|
const session = createSession(element);
|
||||||
|
|
||||||
|
session.pointerDeltaX = 50;
|
||||||
|
session.daysDelta = 1;
|
||||||
|
|
||||||
|
renderScheduledPreview(session);
|
||||||
|
|
||||||
|
expect(session.frame).toBeNull();
|
||||||
|
expect(element.style.left).toBe("44px");
|
||||||
|
expect(element.style.width).toBe("48px");
|
||||||
|
expect(element.style.transform).toBe("scale(1) translateX(18px)");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("clamps resize-start previews to the minimum cell width", () => {
|
||||||
|
const element = createElement();
|
||||||
|
const session = createSession(element);
|
||||||
|
|
||||||
|
session.mode = "resize-start";
|
||||||
|
session.cellWidth = 20;
|
||||||
|
session.targets[0]!.baseLeft = 10;
|
||||||
|
session.targets[0]!.baseWidth = 60;
|
||||||
|
session.pointerDeltaX = 80;
|
||||||
|
session.daysDelta = 1;
|
||||||
|
|
||||||
|
renderScheduledPreview(session);
|
||||||
|
|
||||||
|
expect(element.style.left).toBe("50px");
|
||||||
|
expect(element.style.width).toBe("20px");
|
||||||
|
expect(element.style.transform).toBe("scale(1)");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("clamps resize-end previews to the minimum cell width", () => {
|
||||||
|
const element = createElement();
|
||||||
|
const session = createSession(element);
|
||||||
|
|
||||||
|
session.mode = "resize-end";
|
||||||
|
session.cellWidth = 20;
|
||||||
|
session.targets[0]!.baseLeft = 10;
|
||||||
|
session.targets[0]!.baseWidth = 30;
|
||||||
|
session.pointerDeltaX = -40;
|
||||||
|
session.daysDelta = 0;
|
||||||
|
|
||||||
|
renderScheduledPreview(session);
|
||||||
|
|
||||||
|
expect(element.style.left).toBe("10px");
|
||||||
|
expect(element.style.width).toBe("20px");
|
||||||
|
expect(element.style.transform).toBe("scale(1)");
|
||||||
|
});
|
||||||
|
|
||||||
it("schedules at most one animation frame for a preview session", () => {
|
it("schedules at most one animation frame for a preview session", () => {
|
||||||
const element = createElement();
|
const element = createElement();
|
||||||
const session = createSession(element);
|
const session = createSession(element);
|
||||||
|
|||||||
Reference in New Issue
Block a user