bd44b5aa08
Test / build-libghostty-vt (x86_64-windows-gnu) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-ios) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt-macos (x86_64-macos) (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-dist (push) Has been cancelled
Test / GTK x11=true wayland=true (push) Has been cancelled
Test / Build -Dsimd=false (push) Has been cancelled
Test / Build -Dsimd=true (push) Has been cancelled
Test / Build -Dsentry=false (push) Has been cancelled
Test / Build -Dsentry=true (push) Has been cancelled
Test / zig-fmt (push) Has been cancelled
Test / GitHub Actions Pins (push) Has been cancelled
Test / prettier (push) Has been cancelled
Test / swiftlint (push) Has been cancelled
Test / alejandra (push) Has been cancelled
Test / typos (push) Has been cancelled
Nix / Required Checks: Nix (push) Has been cancelled
Nix / check-zig-cache-hash (push) Has been cancelled
Test / skip (push) Has been cancelled
Test / Required Checks: Test (push) Has been cancelled
Test / build-bench (push) Has been cancelled
Test / list-examples (push) Has been cancelled
Test / Example ${{ matrix.dir }} (Windows) (push) Has been cancelled
Test / build-cmake (push) Has been cancelled
Test / test-lib-vt-pkgconfig (push) Has been cancelled
Test / build-flatpak (push) Has been cancelled
Test / build-snap (push) Has been cancelled
Test / build-libghostty-vt (aarch64-linux) (push) Has been cancelled
Test / build-libghostty-vt (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt (wasm32-freestanding) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux-musl) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-macos) (push) Has been cancelled
Test / build-libghostty-vt-android (aarch64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-android (arm-linux-androideabi) (push) Has been cancelled
Test / build-libghostty-vt-android (x86_64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-windows (push) Has been cancelled
Test / build-libghostty-windows-gnu (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-linux-libghostty (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-dist-lib-vt (push) Has been cancelled
Test / trigger-snap (push) Has been cancelled
Test / trigger-flatpak (push) Has been cancelled
Test / build-macos (push) Has been cancelled
Test / build-macos-freetype (push) Has been cancelled
Test / test (push) Has been cancelled
Test / test-lib-vt (push) Has been cancelled
Test / GTK x11=false wayland=false (push) Has been cancelled
Test / GTK x11=true wayland=false (push) Has been cancelled
Test / GTK x11=false wayland=true (push) Has been cancelled
Test / test-macos (push) Has been cancelled
Test / test-windows (push) Has been cancelled
Test / Build -Di18n=false (push) Has been cancelled
Test / Build -Di18n=true (push) Has been cancelled
Test / Build test/fuzz-libghostty (push) Has been cancelled
Test / shellcheck (push) Has been cancelled
Test / translations (push) Has been cancelled
Test / blueprint-compiler (push) Has been cancelled
Test / Test pkg/wuffs (push) Has been cancelled
Test / Test build on Debian 13 (push) Has been cancelled
Test / valgrind (push) Has been cancelled
Test / Example ${{ matrix.dir }} (push) Has been cancelled
129 lines
4.4 KiB
Swift
129 lines
4.4 KiB
Swift
import Testing
|
|
import Foundation
|
|
@testable import Ghostty
|
|
|
|
struct TerminalSplitDropZoneTests {
|
|
private let standardSize = CGSize(width: 100, height: 100)
|
|
|
|
// MARK: - Basic Edge Detection
|
|
|
|
@Test func topEdge() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 50, y: 5), in: standardSize)
|
|
#expect(zone == .top)
|
|
}
|
|
|
|
@Test func bottomEdge() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 50, y: 95), in: standardSize)
|
|
#expect(zone == .bottom)
|
|
}
|
|
|
|
@Test func leftEdge() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 5, y: 50), in: standardSize)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
@Test func rightEdge() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 95, y: 50), in: standardSize)
|
|
#expect(zone == .right)
|
|
}
|
|
|
|
// MARK: - Corner Tie-Breaking
|
|
// When distances are equal, the check order determines the result:
|
|
// left -> right -> top -> bottom
|
|
|
|
@Test func topLeftCornerSelectsLeft() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 0, y: 0), in: standardSize)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
@Test func topRightCornerSelectsRight() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 100, y: 0), in: standardSize)
|
|
#expect(zone == .right)
|
|
}
|
|
|
|
@Test func bottomLeftCornerSelectsLeft() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 0, y: 100), in: standardSize)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
@Test func bottomRightCornerSelectsRight() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 100, y: 100), in: standardSize)
|
|
#expect(zone == .right)
|
|
}
|
|
|
|
// MARK: - Center Point (All Distances Equal)
|
|
|
|
@Test func centerSelectsLeft() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 50, y: 50), in: standardSize)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
// MARK: - Non-Square Aspect Ratio
|
|
|
|
@Test func rectangularViewTopEdge() {
|
|
let size = CGSize(width: 200, height: 100)
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 100, y: 10), in: size)
|
|
#expect(zone == .top)
|
|
}
|
|
|
|
@Test func rectangularViewLeftEdge() {
|
|
let size = CGSize(width: 200, height: 100)
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 10, y: 50), in: size)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
@Test func tallRectangleTopEdge() {
|
|
let size = CGSize(width: 100, height: 200)
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 50, y: 10), in: size)
|
|
#expect(zone == .top)
|
|
}
|
|
|
|
// MARK: - Out-of-Bounds Points
|
|
|
|
@Test func pointLeftOfViewSelectsLeft() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: -10, y: 50), in: standardSize)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
@Test func pointAboveViewSelectsTop() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 50, y: -10), in: standardSize)
|
|
#expect(zone == .top)
|
|
}
|
|
|
|
@Test func pointRightOfViewSelectsRight() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 110, y: 50), in: standardSize)
|
|
#expect(zone == .right)
|
|
}
|
|
|
|
@Test func pointBelowViewSelectsBottom() {
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 50, y: 110), in: standardSize)
|
|
#expect(zone == .bottom)
|
|
}
|
|
|
|
// MARK: - Diagonal Regions (Triangular Zones)
|
|
|
|
@Test func upperLeftTriangleSelectsLeft() {
|
|
// Point in the upper-left triangle, closer to left than top
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 20, y: 30), in: standardSize)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
@Test func upperRightTriangleSelectsRight() {
|
|
// Point in the upper-right triangle, closer to right than top
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 80, y: 30), in: standardSize)
|
|
#expect(zone == .right)
|
|
}
|
|
|
|
@Test func lowerLeftTriangleSelectsLeft() {
|
|
// Point in the lower-left triangle, closer to left than bottom
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 20, y: 70), in: standardSize)
|
|
#expect(zone == .left)
|
|
}
|
|
|
|
@Test func lowerRightTriangleSelectsRight() {
|
|
// Point in the lower-right triangle, closer to right than bottom
|
|
let zone = TerminalSplitDropZone.calculate(at: CGPoint(x: 80, y: 70), in: standardSize)
|
|
#expect(zone == .right)
|
|
}
|
|
}
|