mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-02 14:27:40 +00:00
145 lines
6.5 KiB
TypeScript
145 lines
6.5 KiB
TypeScript
import { beforeEach, describe, expect, test } from "vitest"
|
|
|
|
import { Rectangle } from "@/infrastructure/Rectangle"
|
|
|
|
describe("Rectangle resize functionality", () => {
|
|
let rect: Rectangle
|
|
|
|
beforeEach(() => {
|
|
rect = new Rectangle(100, 200, 300, 400) // x, y, width, height
|
|
// So: left=100, top=200, right=400, bottom=600
|
|
})
|
|
|
|
describe("findContainingCorner", () => {
|
|
const cornerSize = 15
|
|
|
|
test("should detect NW (top-left) corner", () => {
|
|
expect(rect.findContainingCorner(100, 200, cornerSize)).toBe("NW")
|
|
expect(rect.findContainingCorner(110, 210, cornerSize)).toBe("NW")
|
|
expect(rect.findContainingCorner(114, 214, cornerSize)).toBe("NW")
|
|
})
|
|
|
|
test("should detect NE (top-right) corner", () => {
|
|
// Top-right corner starts at (right - cornerSize, top) = (385, 200)
|
|
expect(rect.findContainingCorner(385, 200, cornerSize)).toBe("NE")
|
|
expect(rect.findContainingCorner(390, 210, cornerSize)).toBe("NE")
|
|
expect(rect.findContainingCorner(399, 214, cornerSize)).toBe("NE")
|
|
})
|
|
|
|
test("should detect SW (bottom-left) corner", () => {
|
|
// Bottom-left corner starts at (left, bottom - cornerSize) = (100, 585)
|
|
expect(rect.findContainingCorner(100, 585, cornerSize)).toBe("SW")
|
|
expect(rect.findContainingCorner(110, 590, cornerSize)).toBe("SW")
|
|
expect(rect.findContainingCorner(114, 599, cornerSize)).toBe("SW")
|
|
})
|
|
|
|
test("should detect SE (bottom-right) corner", () => {
|
|
// Bottom-right corner starts at (right - cornerSize, bottom - cornerSize) = (385, 585)
|
|
expect(rect.findContainingCorner(385, 585, cornerSize)).toBe("SE")
|
|
expect(rect.findContainingCorner(390, 590, cornerSize)).toBe("SE")
|
|
expect(rect.findContainingCorner(399, 599, cornerSize)).toBe("SE")
|
|
})
|
|
|
|
test("should return undefined when not in any corner", () => {
|
|
// Middle of rectangle
|
|
expect(rect.findContainingCorner(250, 400, cornerSize)).toBeUndefined()
|
|
// On edge but not in corner
|
|
expect(rect.findContainingCorner(200, 200, cornerSize)).toBeUndefined()
|
|
expect(rect.findContainingCorner(100, 400, cornerSize)).toBeUndefined()
|
|
// Outside rectangle
|
|
expect(rect.findContainingCorner(50, 150, cornerSize)).toBeUndefined()
|
|
})
|
|
})
|
|
|
|
describe("corner detection methods", () => {
|
|
const cornerSize = 20
|
|
|
|
describe("isInTopLeftCorner", () => {
|
|
test("should return true when point is in top-left corner", () => {
|
|
expect(rect.isInTopLeftCorner(100, 200, cornerSize)).toBe(true)
|
|
expect(rect.isInTopLeftCorner(110, 210, cornerSize)).toBe(true)
|
|
expect(rect.isInTopLeftCorner(119, 219, cornerSize)).toBe(true)
|
|
})
|
|
|
|
test("should return false when point is outside top-left corner", () => {
|
|
expect(rect.isInTopLeftCorner(120, 200, cornerSize)).toBe(false)
|
|
expect(rect.isInTopLeftCorner(100, 220, cornerSize)).toBe(false)
|
|
expect(rect.isInTopLeftCorner(99, 200, cornerSize)).toBe(false)
|
|
expect(rect.isInTopLeftCorner(100, 199, cornerSize)).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe("isInTopRightCorner", () => {
|
|
test("should return true when point is in top-right corner", () => {
|
|
// Top-right corner area is from (right - cornerSize, top) to (right, top + cornerSize)
|
|
// That's (380, 200) to (400, 220)
|
|
expect(rect.isInTopRightCorner(380, 200, cornerSize)).toBe(true)
|
|
expect(rect.isInTopRightCorner(390, 210, cornerSize)).toBe(true)
|
|
expect(rect.isInTopRightCorner(399, 219, cornerSize)).toBe(true)
|
|
})
|
|
|
|
test("should return false when point is outside top-right corner", () => {
|
|
expect(rect.isInTopRightCorner(379, 200, cornerSize)).toBe(false)
|
|
expect(rect.isInTopRightCorner(400, 220, cornerSize)).toBe(false)
|
|
expect(rect.isInTopRightCorner(401, 200, cornerSize)).toBe(false)
|
|
expect(rect.isInTopRightCorner(400, 199, cornerSize)).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe("isInBottomLeftCorner", () => {
|
|
test("should return true when point is in bottom-left corner", () => {
|
|
// Bottom-left corner area is from (left, bottom - cornerSize) to (left + cornerSize, bottom)
|
|
// That's (100, 580) to (120, 600)
|
|
expect(rect.isInBottomLeftCorner(100, 580, cornerSize)).toBe(true)
|
|
expect(rect.isInBottomLeftCorner(110, 590, cornerSize)).toBe(true)
|
|
expect(rect.isInBottomLeftCorner(119, 599, cornerSize)).toBe(true)
|
|
})
|
|
|
|
test("should return false when point is outside bottom-left corner", () => {
|
|
expect(rect.isInBottomLeftCorner(120, 600, cornerSize)).toBe(false)
|
|
expect(rect.isInBottomLeftCorner(100, 579, cornerSize)).toBe(false)
|
|
expect(rect.isInBottomLeftCorner(99, 600, cornerSize)).toBe(false)
|
|
expect(rect.isInBottomLeftCorner(100, 601, cornerSize)).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe("isInBottomRightCorner", () => {
|
|
test("should return true when point is in bottom-right corner", () => {
|
|
// Bottom-right corner area is from (right - cornerSize, bottom - cornerSize) to (right, bottom)
|
|
// That's (380, 580) to (400, 600)
|
|
expect(rect.isInBottomRightCorner(380, 580, cornerSize)).toBe(true)
|
|
expect(rect.isInBottomRightCorner(390, 590, cornerSize)).toBe(true)
|
|
expect(rect.isInBottomRightCorner(399, 599, cornerSize)).toBe(true)
|
|
})
|
|
|
|
test("should return false when point is outside bottom-right corner", () => {
|
|
expect(rect.isInBottomRightCorner(379, 600, cornerSize)).toBe(false)
|
|
expect(rect.isInBottomRightCorner(400, 579, cornerSize)).toBe(false)
|
|
expect(rect.isInBottomRightCorner(401, 600, cornerSize)).toBe(false)
|
|
expect(rect.isInBottomRightCorner(400, 601, cornerSize)).toBe(false)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe("edge cases", () => {
|
|
test("should handle zero-sized corner areas", () => {
|
|
expect(rect.findContainingCorner(100, 200, 0)).toBeUndefined()
|
|
expect(rect.isInTopLeftCorner(100, 200, 0)).toBe(false)
|
|
})
|
|
|
|
test("should handle rectangles at origin", () => {
|
|
const originRect = new Rectangle(0, 0, 100, 100)
|
|
expect(originRect.findContainingCorner(0, 0, 10)).toBe("NW")
|
|
// Bottom-right corner is at (90, 90) to (100, 100)
|
|
expect(originRect.findContainingCorner(90, 90, 10)).toBe("SE")
|
|
})
|
|
|
|
test("should handle negative coordinates", () => {
|
|
const negRect = new Rectangle(-50, -50, 100, 100)
|
|
expect(negRect.findContainingCorner(-50, -50, 10)).toBe("NW")
|
|
// Bottom-right corner is at (40, 40) to (50, 50)
|
|
expect(negRect.findContainingCorner(40, 40, 10)).toBe("SE")
|
|
})
|
|
})
|
|
})
|