1
0
html/escape_test.go

97 lines
2.1 KiB
Go
Raw Normal View History

2025-10-05 20:06:39 +02:00
package html_test
import (
2025-10-05 21:25:53 +02:00
"bytes"
2025-10-05 20:06:39 +02:00
"code.squareroundforest.org/arpio/html"
2025-10-06 00:37:10 +02:00
. "code.squareroundforest.org/arpio/html/tag"
2025-10-05 20:06:39 +02:00
"testing"
)
func TestEscape(t *testing.T) {
t.Run("attribute escape", func(t *testing.T) {
var buf bytes.Buffer
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(&buf, Div(Attr("foo", "\"bar\" & \"baz\""))); err != nil {
2025-10-05 20:06:39 +02:00
t.Fatal(err)
}
if buf.String() != "<div foo=\"&quot;bar&quot; &amp; &quot;baz&quot;\"></div>" {
t.Fatal(buf.String())
}
})
t.Run("failing writer", func(t *testing.T) {
ew := &errorWriter{}
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(ew, Span("foo bar baz")); err == nil {
2025-10-05 20:06:39 +02:00
t.Fatal("failed to fail")
}
})
t.Run("broken unicode", func(t *testing.T) {
b := []byte{'f', 0xc2, 'o', 'o'}
var buf bytes.Buffer
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(&buf, Span(string(b))); err != nil {
2025-10-05 20:06:39 +02:00
t.Fatal(err)
}
if buf.String() != "<span>foo</span>" {
t.Fatal(buf.String())
}
})
t.Run("multiple spaces", func(t *testing.T) {
var buf bytes.Buffer
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(&buf, Span("foo bar")); err != nil {
2025-10-05 20:06:39 +02:00
t.Fatal(err)
}
if buf.String() != "<span>foo&nbsp;&nbsp;&nbsp;bar</span>" {
t.Fatal(buf.String())
}
})
t.Run("single space", func(t *testing.T) {
var buf bytes.Buffer
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(&buf, Span("foo bar")); err != nil {
2025-10-05 20:06:39 +02:00
t.Fatal(err)
}
if buf.String() != "<span>foo bar</span>" {
t.Fatal(buf.String())
}
})
t.Run("tailing space", func(t *testing.T) {
var buf bytes.Buffer
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(&buf, Span("foo ")); err != nil {
2025-10-05 20:06:39 +02:00
t.Fatal(err)
}
if buf.String() != "<span>foo </span>" {
t.Fatal(buf.String())
}
})
t.Run("unicode non-break space", func(t *testing.T) {
var buf bytes.Buffer
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(&buf, Span(string([]rune{0xa0}))); err != nil {
2025-10-05 20:06:39 +02:00
t.Fatal(err)
}
if buf.String() != "<span>&nbsp;</span>" {
t.Fatal(buf.String())
}
})
t.Run("html characters", func(t *testing.T) {
var buf bytes.Buffer
2025-10-29 21:04:07 +01:00
if err := html.WriteRaw(&buf, Span("<foo&bar>")); err != nil {
2025-10-05 20:06:39 +02:00
t.Fatal(err)
}
if buf.String() != "<span>&lt;foo&amp;bar&gt;</span>" {
t.Fatal(buf.String())
}
})
}