package html_test import ( "bytes" "code.squareroundforest.org/arpio/html" . "code.squareroundforest.org/arpio/html/tags" "testing" ) func TestEscape(t *testing.T) { t.Run("attribute escape", func(t *testing.T) { var buf bytes.Buffer if err := html.Render(&buf, Div(Attr("foo", "\"bar\" & \"baz\""))); err != nil { t.Fatal(err) } if buf.String() != "
" { t.Fatal(buf.String()) } }) t.Run("failing writer", func(t *testing.T) { ew := &errorWriter{} if err := html.Render(ew, Span("foo bar baz")); err == nil { t.Fatal("failed to fail") } }) t.Run("broken unicode", func(t *testing.T) { b := []byte{'f', 0xc2, 'o', 'o'} var buf bytes.Buffer if err := html.Render(&buf, Span(string(b))); err != nil { t.Fatal(err) } if buf.String() != "foo" { t.Fatal(buf.String()) } }) t.Run("multiple spaces", func(t *testing.T) { var buf bytes.Buffer if err := html.Render(&buf, Span("foo bar")); err != nil { t.Fatal(err) } if buf.String() != "foo   bar" { t.Fatal(buf.String()) } }) t.Run("single space", func(t *testing.T) { var buf bytes.Buffer if err := html.Render(&buf, Span("foo bar")); err != nil { t.Fatal(err) } if buf.String() != "foo bar" { t.Fatal(buf.String()) } }) t.Run("tailing space", func(t *testing.T) { var buf bytes.Buffer if err := html.Render(&buf, Span("foo ")); err != nil { t.Fatal(err) } if buf.String() != "foo " { t.Fatal(buf.String()) } }) t.Run("unicode non-break space", func(t *testing.T) { var buf bytes.Buffer if err := html.Render(&buf, Span(string([]rune{0xa0}))); err != nil { t.Fatal(err) } if buf.String() != " " { t.Fatal(buf.String()) } }) t.Run("html characters", func(t *testing.T) { var buf bytes.Buffer if err := html.Render(&buf, Span("")); err != nil { t.Fatal(err) } if buf.String() != "<foo&bar>" { t.Fatal(buf.String()) } }) }