package textedit_test import ( "bytes" "code.squareroundforest.org/arpio/textedit" "testing" ) func TestIndent(t *testing.T) { t.Run("no indent no wrap", func(t *testing.T) { t.Run("empty", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("", "")) w.Write(nil) w.Flush() if b.String() != "" { t.Fatal(b.String()) } }) t.Run("new line", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("", "")) w.Write([]byte("\n")) w.Flush() if b.String() != "\n" { t.Fatal(b.String()) } }) t.Run("basic", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("", "")) w.Write([]byte("foo bar\n baz\nqux quux")) w.Flush() if b.String() != "foo bar\n baz\nqux quux" { t.Fatal(b.String()) } }) t.Run("closing new line", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("", "")) w.Write([]byte("foo bar\n baz\nqux quux\n")) w.Flush() if b.String() != "foo bar\n baz\nqux quux\n" { t.Fatal(b.String()) } }) t.Run("word mid line", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("", "")) w.Write([]byte("foo bar bar foo\n baz\nqux quux\n")) w.Flush() if b.String() != "foo bar bar foo\n baz\nqux quux\n" { t.Fatal(b.String()) } }) }) t.Run("indent no wrap", func(t *testing.T) { t.Run("first and rest same", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("xx", "xx")) w.Write([]byte("foo bar\n baz\nqux quux\n")) w.Flush() if b.String() != "xxfoo bar\nxx baz\nxxqux quux\n" { t.Fatal(b.String()) } }) t.Run("indent last word", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("xxxx", "xxxx")) w.Write([]byte("foo bar bar foo\n baz\nqux quux\nfoo")) w.Flush() if b.String() != "xxxxfoo bar bar foo\nxxxx baz\nxxxxqux quux\nxxxxfoo" { t.Fatal(b.String()) } }) t.Run("first out", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("", "xx")) w.Write([]byte("foo bar\n baz\nqux quux\n")) w.Flush() if b.String() != "foo bar\nxx baz\nxxqux quux\n" { t.Fatal(b.String()) } }) t.Run("first in", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("xx", "")) w.Write([]byte("foo bar\n baz\nqux quux\n")) w.Flush() if b.String() != "xxfoo bar\n baz\nqux quux\n" { t.Fatal(b.String()) } }) t.Run("first out offset", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("xx", "xxxx")) w.Write([]byte("foo bar\n baz\nqux quux\n")) w.Flush() if b.String() != "xxfoo bar\nxxxx baz\nxxxxqux quux\n" { t.Fatal(b.String()) } }) t.Run("first in offset", func(t *testing.T) { var b bytes.Buffer w := textedit.New(&b, textedit.Indent("xxxx", "xx")) w.Write([]byte("foo bar\n baz\nqux quux\n")) w.Flush() if b.String() != "xxxxfoo bar\nxx baz\nxxqux quux\n" { t.Fatal(b.String()) } }) }) }