mirror of
https://github.com/anotherhadi/ilovetui.git
synced 2026-08-21 03:55:48 +02:00
5f99fa7521
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
76 lines
2.8 KiB
Go
76 lines
2.8 KiB
Go
package layout
|
|
|
|
import "testing"
|
|
|
|
func TestFindNeighborBasicDirections(t *testing.T) {
|
|
leaves := []LeafRect{
|
|
{ID: "left", Rect: Rect{X: 0, Y: 0, W: 10, H: 10}},
|
|
{ID: "right", Rect: Rect{X: 10, Y: 0, W: 10, H: 10}},
|
|
}
|
|
|
|
if id, ok := FindNeighbor(leaves, leaves[0], FocusRight); !ok || id != "right" {
|
|
t.Fatalf("FocusRight from left: got (%q, %v), want (right, true)", id, ok)
|
|
}
|
|
if id, ok := FindNeighbor(leaves, leaves[1], FocusLeft); !ok || id != "left" {
|
|
t.Fatalf("FocusLeft from right: got (%q, %v), want (left, true)", id, ok)
|
|
}
|
|
if _, ok := FindNeighbor(leaves, leaves[0], FocusLeft); ok {
|
|
t.Fatalf("FocusLeft from left (edge): expected no neighbor")
|
|
}
|
|
}
|
|
|
|
// Two candidates at the exact same gap: the one that actually shares more
|
|
// of from's edge should win, not an arbitrary pick. This is the overlap
|
|
// tie-break, the one that matters most for a real tmux/i3-style layout
|
|
// (picking the pane that's genuinely alongside you, not just "a" neighbor).
|
|
func TestFindNeighborPrefersLargerOverlapOnEqualGap(t *testing.T) {
|
|
from := LeafRect{ID: "from", Rect: Rect{X: 0, Y: 0, W: 10, H: 10}}
|
|
leaves := []LeafRect{
|
|
from,
|
|
{ID: "full", Rect: Rect{X: 10, Y: 0, W: 10, H: 10}},
|
|
{ID: "partial", Rect: Rect{X: 10, Y: 5, W: 10, H: 10}},
|
|
}
|
|
|
|
id, ok := FindNeighbor(leaves, from, FocusRight)
|
|
if !ok || id != "full" {
|
|
t.Fatalf("got (%q, %v), want (full, true): equal gap, full's overlap (10) beats partial's (5)", id, ok)
|
|
}
|
|
}
|
|
|
|
// When gap AND overlap are tied, center-to-center distance on the
|
|
// perpendicular axis is the last resort.
|
|
func TestFindNeighborCrossIsLastResortTiebreak(t *testing.T) {
|
|
from := LeafRect{ID: "from", Rect: Rect{X: 0, Y: 10, W: 10, H: 10}} // Y 10..20, center 15
|
|
leaves := []LeafRect{
|
|
from,
|
|
{ID: "near", Rect: Rect{X: 10, Y: 8, W: 10, H: 20}}, // Y 8..28, overlap 10, center 18
|
|
{ID: "far", Rect: Rect{X: 10, Y: 0, W: 10, H: 20}}, // Y 0..20, overlap 10, center 10
|
|
}
|
|
|
|
id, ok := FindNeighbor(leaves, from, FocusRight)
|
|
if !ok || id != "near" {
|
|
t.Fatalf("got (%q, %v), want (near, true): equal gap and overlap, near's center is closer (3 vs 5)", id, ok)
|
|
}
|
|
}
|
|
|
|
func TestFindNeighborNoCandidateBeyondEdge(t *testing.T) {
|
|
leaves := []LeafRect{
|
|
{ID: "only", Rect: Rect{X: 0, Y: 0, W: 10, H: 10}},
|
|
}
|
|
if _, ok := FindNeighbor(leaves, leaves[0], FocusDown); ok {
|
|
t.Fatal("expected no neighbor with a single leaf")
|
|
}
|
|
}
|
|
|
|
func TestFindNeighborRequiresPerpendicularOverlap(t *testing.T) {
|
|
leaves := []LeafRect{
|
|
{ID: "from", Rect: Rect{X: 0, Y: 0, W: 10, H: 10}},
|
|
// Directly to the right on the X axis, but no shared Y extent at
|
|
// all: not a valid candidate even though it's the only one there.
|
|
{ID: "diagonal", Rect: Rect{X: 10, Y: 10, W: 10, H: 10}},
|
|
}
|
|
if _, ok := FindNeighbor(leaves, leaves[0], FocusRight); ok {
|
|
t.Fatal("expected no neighbor: candidate shares no Y extent with from")
|
|
}
|
|
}
|