* fix(app): clamp split pane resize Prevent right-edge drags from overflowing the Electron viewport. * fix(app): isolate resize pointer state Keep concurrent resize drags from clobbering each other.
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { computeResizeHandleSizes } from "@/components/resize-handle-sizes";
|
|
|
|
describe("computeResizeHandleSizes", () => {
|
|
it("clamps right-edge drags to the adjacent pane minimum", () => {
|
|
const sizes = computeResizeHandleSizes({
|
|
sizes: [0.25, 0.5, 0.25],
|
|
index: 1,
|
|
deltaRatio: 0.5,
|
|
});
|
|
|
|
expect(sizes[0]).toBe(0.25);
|
|
expect(sizes[1]).toBe(0.65);
|
|
expect(sizes[2]).toBeCloseTo(0.1, 10);
|
|
});
|
|
|
|
it("clamps left-edge drags to the adjacent pane minimum", () => {
|
|
const sizes = computeResizeHandleSizes({
|
|
sizes: [0.25, 0.5, 0.25],
|
|
index: 1,
|
|
deltaRatio: -0.5,
|
|
});
|
|
|
|
expect(sizes[0]).toBe(0.25);
|
|
expect(sizes[1]).toBe(0.1);
|
|
expect(sizes[2]).toBeCloseTo(0.65, 10);
|
|
});
|
|
|
|
it("moves adjacent pane sizes without clamping", () => {
|
|
const sizes = computeResizeHandleSizes({
|
|
sizes: [0.25, 0.5, 0.25],
|
|
index: 1,
|
|
deltaRatio: 0.05,
|
|
});
|
|
|
|
expect(sizes[0]).toBe(0.25);
|
|
expect(sizes[1]).toBe(0.55);
|
|
expect(sizes[2]).toBeCloseTo(0.2, 10);
|
|
});
|
|
|
|
it("splits tiny adjacent pairs evenly when the configured minimum cannot fit", () => {
|
|
expect(
|
|
computeResizeHandleSizes({
|
|
sizes: [0.45, 0.05, 0.05, 0.45],
|
|
index: 1,
|
|
deltaRatio: 0.05,
|
|
}),
|
|
).toEqual([0.45, 0.05, 0.05, 0.45]);
|
|
});
|
|
|
|
it("leaves sizes unchanged when the adjacent pair is invalid", () => {
|
|
expect(
|
|
computeResizeHandleSizes({
|
|
sizes: [0.25, 0.5, 0.25],
|
|
index: 3,
|
|
deltaRatio: 0.25,
|
|
}),
|
|
).toEqual([0.25, 0.5, 0.25]);
|
|
expect(
|
|
computeResizeHandleSizes({
|
|
sizes: [0.25, 0, 0, 0.75],
|
|
index: 1,
|
|
deltaRatio: 0.25,
|
|
}),
|
|
).toEqual([0.25, 0, 0, 0.75]);
|
|
});
|
|
});
|