From 92dbc37ed6d4b1758fae3fa7ae02dc58b8f81d4d Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 25 Feb 2026 21:53:46 +0200 Subject: Render probes modal as standalone TUI overlay view --- internal/tui/tui.go | 2 +- internal/tui/tui_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'internal') diff --git a/internal/tui/tui.go b/internal/tui/tui.go index 9e4e919..5dba75c 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -370,7 +370,7 @@ func (m Model) View() string { case ScreenDashboard: base := m.dashboard.View() if m.probeModal.Visible() { - return placeToViewport(width, height, m.probeModal.View(width, height)+"\n"+base) + return placeToViewport(width, height, m.probeModal.View(width, height)) } if m.exporter.Visible() { return placeToViewport(width, height, m.exporter.View(width, height)+"\n"+base) diff --git a/internal/tui/tui_test.go b/internal/tui/tui_test.go index e7f9a3f..0f55b40 100644 --- a/internal/tui/tui_test.go +++ b/internal/tui/tui_test.go @@ -3,6 +3,7 @@ package tui import ( "context" "errors" + "ior/internal/probemanager" "ior/internal/statsengine" "ior/internal/tui/eventstream" tuiexport "ior/internal/tui/export" @@ -19,6 +20,14 @@ import ( tea "github.com/charmbracelet/bubbletea" ) +type fakeProbeManager struct { + states []probemanager.ProbeState +} + +func (f fakeProbeManager) States() []probemanager.ProbeState { return f.states } +func (f fakeProbeManager) Toggle(string) error { return nil } +func (f fakeProbeManager) ActiveCount() (int, int) { return len(f.states), len(f.states) } + func TestPidSelectedTransitionsToDashboardAndSetsPIDFilter(t *testing.T) { flags.SetPidFilter(-1) m := NewModel(-1, func(context.Context) error { return nil }) @@ -452,3 +461,23 @@ func TestDashboardTabKeysChangeActiveView(t *testing.T) { t.Fatalf("expected files waiting view after tab") } } + +func TestProbeModalViewDoesNotStackDashboardContent(t *testing.T) { + SetProbeManager(fakeProbeManager{states: []probemanager.ProbeState{{Syscall: "read", Active: true}}}) + t.Cleanup(func() { SetProbeManager(nil) }) + + m := NewModel(-1, func(context.Context) error { return nil }) + m.screen = ScreenDashboard + m.attaching = false + m.width = 120 + m.height = 30 + m.probeModal = m.probeModal.Open() + + out := m.View() + if !strings.Contains(out, "Probes (") { + t.Fatalf("expected probe modal content, got %q", out) + } + if strings.Contains(out, "Overview: waiting for stats") { + t.Fatalf("expected probe modal to render as standalone view, got stacked dashboard content") + } +} -- cgit v1.2.3