package html_test import ( "bytes" "code.squareroundforest.org/arpio/html" . "code.squareroundforest.org/arpio/html/tag" "testing" ) func TestWrap(t *testing.T) { t.Run("write error", func(t *testing.T) { ew := &errorWriter{failAfter: 9} if err := html.WriteIndent( ew, html.Indentation{Indent: "\t", PWidth: 12}, Span(Span("foo"), Span("bar"), Span("baz")), ); err == nil { t.Fatal() } }) t.Run("write error in text", func(t *testing.T) { ew := &errorWriter{} if err := html.WriteIndent( ew, html.Indentation{Indent: "\t", PWidth: 2}, Span("foo", "bar", "baz"), ); err == nil { t.Fatal() } }) t.Run("write error on line feed", func(t *testing.T) { ew := &errorWriter{failAfter: 7} if err := html.WriteIndent( ew, html.Indentation{Indent: "\t", PWidth: 3}, Span("foo"), ); err == nil { t.Fatal() } }) t.Run("write error on indentation", func(t *testing.T) { ew := &errorWriter{failAfter: 15} if err := html.WriteIndent( ew, html.Indentation{Indent: "\t", PWidth: 3}, Div(Span("foo")), ); err == nil { t.Fatal() } }) t.Run("write error on flush", func(t *testing.T) { ew := &errorWriter{} if err := html.Write( ew, Span(Span("foo"), Span("bar"), Span("baz")), ); err == nil { t.Fatal() } }) t.Run("write error on flush during line feed", func(t *testing.T) { ew := &errorWriter{} if err := html.WriteIndent( ew, html.Indentation{Indent: "\t", PWidth: 10}, Span("foo bar", Div), ); err == nil { t.Fatal() } }) t.Run("null write", func(t *testing.T) { var buf bytes.Buffer if err := html.WriteRaw(&buf, Div("")); err != nil { t.Fatal(err) } if buf.String() != "
" { t.Fatal(buf.String()) } }) t.Run("multiple words", func(t *testing.T) { span := Span("foo bar baz") var buf bytes.Buffer if err := html.WriteIndent(&buf, html.Indentation{Indent: "\t", PWidth: 2}, span); err != nil { t.Fatal(err) } expect := "\nfoo\nbar\nbaz\n" if buf.String() != expect { printBytes(buf.String(), expect) t.Fatal(buf.String()) } }) t.Run("tag not split", func(t *testing.T) { span := Span("foo ", Span("bar", Attr("qux", 42)), " baz") var buf bytes.Buffer if err := html.WriteIndent(&buf, html.Indentation{Indent: "X", PWidth: 2}, span); err != nil { t.Fatal(err) } if buf.String() != "\nfoo\n\nbar\n\nbaz\n" { t.Fatal(buf.String()) } }) t.Run("normal text", func(t *testing.T) { div := Div(Span("foo bar baz qux quux corge")) var buf bytes.Buffer if err := html.WriteIndent(&buf, html.Indentation{Indent: "\t", PWidth: 15}, div); err != nil { t.Fatal(err) } if buf.String() != "
\n\t\n\tfoo bar\n\tbaz qux\n\tquux\n\tcorge\n\t\n
" { t.Fatal(buf.String()) } }) t.Run("inline space preserved", func(t *testing.T) { div := Div(Span("foo"), " ", Span("bar")) var buf bytes.Buffer if err := html.Write(&buf, div); err != nil { t.Fatal(err) } if buf.String() != "
\n\tfoo bar\n
" { t.Fatal(buf.String()) } }) t.Run("special whitespace characters", func(t *testing.T) { div := Div("foo\nbar\tbaz") var buf bytes.Buffer if err := html.Write(&buf, div); err != nil { t.Fatal(err) } if buf.String() != "
\n\tfoo bar baz\n
" { t.Fatal(buf.String()) } }) }