package logbuf import ( "fmt" "testing" ) func TestRingKeepsMostRecent(t *testing.T) { w := New(3) for i := 0; i < 5; i++ { fmt.Fprintf(w, "line %d\n", i) } got := w.Lines(0) want := []string{"line 2", "line 3", "line 4"} if len(got) != len(want) { t.Fatalf("got %d lines, want %d: %v", len(got), len(want), got) } for i := range want { if got[i] != want[i] { t.Errorf("line %d = %q, want %q", i, got[i], want[i]) } } } func TestLinesN(t *testing.T) { w := New(10) for i := 0; i < 5; i++ { fmt.Fprintf(w, "l%d\n", i) } if got := w.Lines(2); len(got) != 2 || got[0] != "l3" || got[1] != "l4" { t.Errorf("Lines(2) = %v, want [l3 l4]", got) } if got := w.Lines(100); len(got) != 5 { t.Errorf("Lines(100) = %d lines, want all 5", len(got)) } } func TestMultilineAndBlankWrite(t *testing.T) { w := New(10) if _, err := w.Write([]byte("a\nb\n\nc\n")); err != nil { t.Fatal(err) } got := w.Lines(0) want := []string{"a", "b", "c"} // blank line dropped if len(got) != len(want) { t.Fatalf("got %v, want %v", got, want) } }