package text import ( "bytes" "io" "strings" "testing" "pkg.jfrech.com/brief/internal/testutils" ) func testcasesLf() map[string]string { return map[string]string{ "": "", "Wakka\r\nWuk\r\n": "Wakka\nWuk\n", "X: y\r\nY: xx\r\n\r\nBody": "X: y\nY: xx\n\nBody\n", "X: y\r\nY: xx\r\n\r\nBody\n": "X: y\nY: xx\n\nBody\n", "\n": "\n", "\n\n": "\n\n", "\n\r\n": "\n\n", "\n\r\r\r": "\n\n\n\n", "\r": "\n", "\r\n": "\n", "\r\n\n": "\n\n", "\r\n\r": "\n\n", "\r\r\n": "\n\n", "\r\r\n\r": "\n\n\n", "\r\r\r": "\n\n\n", } } func TestCrlf2l(t *testing.T) { for test, want := range testcasesLf() { got := string(ToLf([]byte(test))) if got != want { t.Errorf("ToLf(%q)\n == %q\n != %q", test, got, want) } } } func TestToLfReader(t *testing.T) { rng := testutils.Rng(t) for test, want := range testcasesLf() { buf := new(bytes.Buffer) _, err := io.Copy(buf, ToLfReader(&testutils.SmallPReader{rng, strings.NewReader(test)})) if err != nil { t.Errorf("test %q: %v", test, err) } if got := buf.String(); got != want { t.Errorf("test %q: got %q, want %q", test, got, want) } } } func testcasesCrlf() map[string]string { return map[string]string{ "": "", "Wakka\nWuk\n": "Wakka\r\nWuk\r\n", "X: y\nY: xx\n\nBody\n": "X: y\r\nY: xx\r\n\r\nBody\r\n", "\n": "\r\n", "\n\n": "\r\n\r\n", "\n\n\n": "\r\n\r\n\r\n", "\r": "\r\n", // old Mac OS style "\r\n": "\r\n", // mail style "\r\n\r": "\r\n\r\n", // mail-style, old Mac OS style } } func TestToCrlf(t *testing.T) { for test, want := range testcasesCrlf() { got := string(ToCrlf([]byte(test))) if got != want { t.Errorf("ToCrlf(%q)\n == %q\n != %q", test, got, want) } } } func TestToCrlfReader(t *testing.T) { rng := testutils.Rng(t) for test, want := range testcasesCrlf() { buf := new(bytes.Buffer) _, err := io.Copy(buf, ToCrlfReader(&testutils.SmallPReader{rng, strings.NewReader(test)})) if err != nil { t.Errorf("test %q: %v", test, err) } if got := buf.String(); got != want { t.Errorf("test %q: got %q, want %q", test, got, want) } } }