summaryrefslogtreecommitdiff
path: root/internal/tui
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-25 21:53:46 +0200
committerPaul Buetow <paul@buetow.org>2026-02-25 21:53:46 +0200
commit92dbc37ed6d4b1758fae3fa7ae02dc58b8f81d4d (patch)
tree24817430a6ca82b96d77c7c932e8700ff896fd7e /internal/tui
parent82481653218903aa0aba51af98788afa2a3e30de (diff)
Render probes modal as standalone TUI overlay view
Diffstat (limited to 'internal/tui')
-rw-r--r--internal/tui/tui.go2
-rw-r--r--internal/tui/tui_test.go29
2 files changed, 30 insertions, 1 deletions
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")
+ }
+}