package util_test; import ( "io" "nonsense-time/util" "strings" "testing" ) type stringReadCloser struct { *strings.Reader } func newStringReadCloser(s string) stringReadCloser { rc := stringReadCloser{} rc.Reader = strings.NewReader(s) return rc } func (stringReadCloser) Close() error { return nil } func testAnsiStripper(t *testing.T, input string, expected string) { reader := newStringReadCloser(input) cleanReader := util.NewAnsiStripper(reader) defer cleanReader.Close() buf := new(strings.Builder) n, err := io.Copy(buf, cleanReader) if err != nil { t.Fatal("Error while copying cleaned text to output", err) } result := buf.String() if n != int64(len(expected)) { t.Errorf("Expected to write %d characters but wrote %d\n", 3, n) } if result != expected { t.Errorf("Expected string `%s` but wrote `%s`", "abc", result) } } func TestStripAnsiColors(t *testing.T) { testAnsiStripper(t, "a\x1b[31mbc", "abc") testAnsiStripper(t, "[\x1b[32minfo\x1b[39m]", "[info]") }