Files
nmon/internal/cliout/cliout_test.go

52 lines
986 B
Go

package cliout
import (
"bytes"
"errors"
"strings"
"testing"
)
type failAfter struct {
n int
buf bytes.Buffer
}
var errFull = errors.New("disk full")
func (f *failAfter) Write(p []byte) (int, error) {
if f.n <= 0 {
return 0, errFull
}
f.n--
return f.buf.Write(p)
}
func TestWriterPrintsAndReportsNoError(t *testing.T) {
var b bytes.Buffer
w := New(&b)
w.Printf("a=%d\n", 1)
w.Println("b", 2)
if _, err := w.Write([]byte("c\n")); err != nil {
t.Fatal(err)
}
if w.Err() != nil || b.String() != "a=1\nb 2\nc\n" {
t.Fatalf("err=%v out=%q", w.Err(), b.String())
}
}
func TestWriterKeepsFirstErrorAndStopsWriting(t *testing.T) {
f := &failAfter{n: 1}
w := New(f)
w.Println("kept")
w.Printf("lost %s\n", "x")
w.Println("lost")
_, _ = w.Write([]byte("lost"))
if !errors.Is(w.Err(), errFull) {
t.Fatalf("err = %v", w.Err())
}
if got := f.buf.String(); !strings.HasPrefix(got, "kept") || strings.Contains(got, "lost") {
t.Fatalf("out = %q", got)
}
}