From 30ed992af98ecde54dbe1e85df1d4a2762a8a7a0 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Sat, 4 Oct 2025 23:08:48 +0200 Subject: [PATCH] termstatus: flush output before returning OutputRaw() writer This prevents mangling the output due to delayed messages. --- internal/ui/termstatus/status.go | 1 + internal/ui/termstatus/status_test.go | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/ui/termstatus/status.go b/internal/ui/termstatus/status.go index 79bb0a296..3265c7a04 100644 --- a/internal/ui/termstatus/status.go +++ b/internal/ui/termstatus/status.go @@ -180,6 +180,7 @@ func (t *Terminal) OutputWriter() io.Writer { // other option. Must not be used in combination with Print, Error, SetStatus // or any other method that writes to the terminal. func (t *Terminal) OutputRaw() io.Writer { + t.Flush() return t.wr } diff --git a/internal/ui/termstatus/status_test.go b/internal/ui/termstatus/status_test.go index f6b885cee..f65bb096f 100644 --- a/internal/ui/termstatus/status_test.go +++ b/internal/ui/termstatus/status_test.go @@ -124,7 +124,8 @@ func TestReadPasswordTerminal(t *testing.T) { func TestRawInputOutput(t *testing.T) { input := io.NopCloser(strings.NewReader("password")) var output bytes.Buffer - term := New(input, &output, io.Discard, false) + term, cancel := Setup(input, &output, io.Discard, false) + defer cancel() rtest.Equals(t, input, term.InputRaw()) rtest.Equals(t, false, term.InputIsTerminal()) rtest.Equals(t, &output, term.OutputRaw())