// internal/ambient/sentinel_test.go package ambient import ( "context" "testing" "keel/internal/evidence" ) func snap(title, class string) evidence.WindowSnapshot { return evidence.WindowSnapshot{Title: title, Class: class, Health: evidence.EvidenceHealth{Available: true}} } func TestNewLineEmpty(t *testing.T) { s := New(Deps{}, 0, "notify") if s.Line() != "" { t.Fatalf("fresh sentinel line = %q, want empty", s.Line()) } } func TestOnWindowRingDedupesAndCaps(t *testing.T) { s := New(Deps{}, 0, "notify") s.OnWindow(snap("a", "x")) s.OnWindow(snap("a", "x")) // consecutive dup ignored s.OnWindow(snap("b", "x")) if got := s.recentForTest(); len(got) != 2 || got[0] != "a" || got[1] != "b" { t.Fatalf("ring = %v, want [a b]", got) } for i := 0; i < recentTitlesMax+5; i++ { s.OnWindow(snap(string(rune('A'+i)), "x")) } if got := s.recentForTest(); len(got) != recentTitlesMax { t.Fatalf("ring len = %d, want %d", len(got), recentTitlesMax) } } func TestOnWindowSkipsEmptyTitle(t *testing.T) { s := New(Deps{}, 0, "notify") s.OnWindow(snap("", "x")) if got := s.recentForTest(); len(got) != 0 { t.Fatalf("empty title must not enter ring, got %v", got) } } var _ = context.Background