/**
* DockRegion (#22) — the in-flow resizable side column. Covers: it renders its
* children beside a resize handle, the handle carries the right a11y role, and a
* pointer drag maps to a clamped width delta whose sign depends on the side
* (left grows moving right, right grows moving left).
*/
import { describe, it, expect, vi } from "vitest";
import { render, screen, fireEvent } from "@testing-library/react";
import { DockRegion } from "./DockRegion";
describe("DockRegion", () => {
it("renders its children and an inner-edge resize separator", () => {
render(
{}}>
docked body
,
);
expect(screen.getByText("docked body")).toBeTruthy();
const handle = screen.getByRole("separator", { name: "resize left dock" });
expect(handle.getAttribute("aria-orientation")).toBe("vertical");
});
it("a left dock grows when the pointer drags right", () => {
const onResize = vi.fn();
render(
body
,
);
const handle = screen.getByRole("separator", { name: "resize left dock" });
fireEvent.pointerDown(handle, { pointerId: 1, clientX: 100 });
fireEvent.pointerMove(handle, { pointerId: 1, clientX: 160 });
expect(onResize).toHaveBeenLastCalledWith(360);
});
it("a right dock grows when the pointer drags left, and width is clamped", () => {
const onResize = vi.fn();
render(
body
,
);
const handle = screen.getByRole("separator", { name: "resize right dock" });
// Dragging left (negative delta) grows a right dock.
fireEvent.pointerDown(handle, { pointerId: 1, clientX: 400 });
fireEvent.pointerMove(handle, { pointerId: 1, clientX: 320 });
expect(onResize).toHaveBeenLastCalledWith(380);
// A large leftward drag is clamped to maxWidth.
fireEvent.pointerMove(handle, { pointerId: 1, clientX: 0 });
expect(onResize).toHaveBeenLastCalledWith(500);
});
});