summaryrefslogtreecommitdiff
path: root/internal/tui/tui_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-25 08:55:58 +0200
committerPaul Buetow <paul@buetow.org>2026-02-25 08:55:58 +0200
commit22f1589e62aeafed805b8dd07d4610b7662f205e (patch)
tree1661bd680ccd0d969359c3f3cf3cbd3d8ec4a5a3 /internal/tui/tui_test.go
parentd423225771a10ebae87d22c69fe88e5b65a3d378 (diff)
Polish stream filter UX and expand TUI viewport
Diffstat (limited to 'internal/tui/tui_test.go')
-rw-r--r--internal/tui/tui_test.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/internal/tui/tui_test.go b/internal/tui/tui_test.go
index e69ff9b..e7f9a3f 100644
--- a/internal/tui/tui_test.go
+++ b/internal/tui/tui_test.go
@@ -4,7 +4,9 @@ import (
"context"
"errors"
"ior/internal/statsengine"
+ "ior/internal/tui/eventstream"
tuiexport "ior/internal/tui/export"
+ "ior/internal/tui/messages"
"os"
"path/filepath"
"strings"
@@ -191,6 +193,33 @@ func TestDashboardRefreshPicksLateBoundSource(t *testing.T) {
}
}
+func TestTracingStartedRebindsEventStreamSource(t *testing.T) {
+ orig := getEventStreamSource()
+ defer SetEventStreamSource(orig)
+
+ rb := eventstream.NewRingBuffer()
+ rb.Push(eventstream.StreamEvent{Seq: 1, Syscall: "read", Comm: "proc", PID: 1, TID: 1})
+ SetEventStreamSource(rb)
+
+ m := NewModel(-1, func(context.Context) error { return nil })
+ m.screen = ScreenDashboard
+ m.attaching = true
+
+ next, _ := m.Update(TracingStartedMsg{})
+ m = next.(Model)
+
+ next, _ = m.Update(tea.WindowSizeMsg{Width: 120, Height: 30})
+ m = next.(Model)
+ next, _ = m.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'7'}})
+ m = next.(Model)
+ next, _ = m.Update(messages.StatsTickMsg{})
+ m = next.(Model)
+
+ if !strings.Contains(m.View(), "read") {
+ t.Fatalf("expected stream tab to render rebound stream event")
+ }
+}
+
func TestExportKeyOpensModalOnDashboard(t *testing.T) {
flags.SetTUIExportEnable(true)
t.Cleanup(func() { flags.SetTUIExportEnable(true) })
@@ -221,6 +250,37 @@ func TestExportKeyIgnoredWhenExportDisabled(t *testing.T) {
}
}
+func TestStreamFilterModalConsumesEKeyInsteadOfOpeningExport(t *testing.T) {
+ flags.SetTUIExportEnable(true)
+ t.Cleanup(func() { flags.SetTUIExportEnable(true) })
+
+ m := NewModel(-1, func(context.Context) error { return nil })
+ m.screen = ScreenDashboard
+ m.attaching = false
+ m.width = 120
+ m.height = 30
+
+ next, _ := m.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'7'}})
+ m = next.(Model)
+ next, _ = m.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{'f'}})
+ m = next.(Model)
+ next, _ = m.Update(tea.KeyMsg{Type: tea.KeyEnter})
+ m = next.(Model)
+ for _, r := range []rune{'o', 'p', 'e'} {
+ next, _ = m.Update(tea.KeyMsg{Type: tea.KeyRunes, Runes: []rune{r}})
+ m = next.(Model)
+ }
+ next, _ = m.Update(tea.KeyMsg{Type: tea.KeyEsc})
+ m = next.(Model)
+
+ if m.exporter.Visible() {
+ t.Fatalf("expected export modal to remain closed while stream filter modal handles typing")
+ }
+ if !strings.Contains(m.View(), "syscall~ope") {
+ t.Fatalf("expected typed syscall filter to be applied")
+ }
+}
+
func TestRunExportCmdCSVWritesFile(t *testing.T) {
dir := t.TempDir()
prev, err := os.Getwd()