summaryrefslogtreecommitdiff
path: root/internal/tui/eventstream/model_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 22:03:01 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 22:03:01 +0200
commit0d1492291a3e20665d8a3a6b16d2eb4e13938cee (patch)
treeec09f7d660403478d23841cf541bdfa7f33aa70f /internal/tui/eventstream/model_test.go
parentd84902555621cc10b16a9641274b088e495f3714 (diff)
tui: restore global filter stack and anchored matches
Diffstat (limited to 'internal/tui/eventstream/model_test.go')
-rw-r--r--internal/tui/eventstream/model_test.go50
1 files changed, 44 insertions, 6 deletions
diff --git a/internal/tui/eventstream/model_test.go b/internal/tui/eventstream/model_test.go
index 9848042..a97fbea 100644
--- a/internal/tui/eventstream/model_test.go
+++ b/internal/tui/eventstream/model_test.go
@@ -377,30 +377,68 @@ func TestPausedSelectionMovesAcrossColumnsWithLeftRightAndHL(t *testing.T) {
}
}
-func TestPausedEnterDoesNotMutateGlobalFilter(t *testing.T) {
+func TestPausedEnterQueuesGlobalFilterRequestFromSelectedCell(t *testing.T) {
rb := NewRingBuffer()
rb.Push(StreamEvent{Seq: 1, PID: 1, TID: 1, Comm: "a", DurationNs: 100, GapNs: 5})
rb.Push(StreamEvent{Seq: 2, PID: 1, TID: 2, Comm: "b", DurationNs: 200, GapNs: 6})
m := NewModel(rb)
m.height = 20
m.Refresh()
+ m.SetFilter(Filter{PID: &NumericFilter{Op: OpEq, Value: 1}})
if !m.HandleKey("space") {
t.Fatalf("space should pause")
}
m.selectedIdx = 0
- m.selectedCol = streamColLatency
- if m.HandleKey("enter") {
- t.Fatalf("expected enter not to mutate filters in paused stream mode")
+ m.selectedCol = streamColComm
+ if !m.HandleKey("enter") {
+ t.Fatalf("expected enter to queue a global filter request in paused stream mode")
+ }
+ if m.filter.Comm != nil {
+ t.Fatalf("expected local stream filter state to remain unchanged until parent applies it")
+ }
+ req, action, ok := m.ConsumeGlobalFilterRequest()
+ if !ok {
+ t.Fatalf("expected pending global filter request")
+ }
+ if action != "comm~a" {
+ t.Fatalf("expected action label comm~a, got %q", action)
}
- if m.filter.IsActive() {
- t.Fatalf("expected enter to leave global filter unchanged")
+ if req.PID == nil || req.PID.Op != OpEq || req.PID.Value != 1 {
+ t.Fatalf("expected existing pid filter preserved, got %+v", req.PID)
+ }
+ if req.Comm == nil || req.Comm.Pattern != "a" {
+ t.Fatalf("expected selected comm folded into global filter, got %+v", req.Comm)
+ }
+ if _, _, ok := m.ConsumeGlobalFilterRequest(); ok {
+ t.Fatalf("expected global filter request to be one-shot")
}
if m.HandleKey("esc") {
t.Fatalf("expected esc not to act as local filter undo anymore")
}
}
+func TestPausedEscQueuesGlobalFilterUndoWhenStackPresent(t *testing.T) {
+ rb := NewRingBuffer()
+ rb.Push(StreamEvent{Seq: 1, PID: 1, TID: 1, Comm: "a"})
+ m := NewModel(rb)
+ m.height = 20
+ m.Refresh()
+ m.SetFilterStack([]string{"comm~a"})
+ if !m.HandleKey("space") {
+ t.Fatalf("space should pause")
+ }
+ if !m.HandleKey("esc") {
+ t.Fatalf("expected esc to queue undo when a global filter stack exists")
+ }
+ if !m.ConsumeGlobalFilterUndoRequest() {
+ t.Fatalf("expected pending global filter undo request")
+ }
+ if m.ConsumeGlobalFilterUndoRequest() {
+ t.Fatalf("expected global filter undo request to be one-shot")
+ }
+}
+
func TestSetFilterKeepsPausedSelectionCentered(t *testing.T) {
rb := NewRingBuffer()
for i := 0; i < 300; i++ {