| | |
| | |
| | |
| |
|
| | package html |
| |
|
| | import ( |
| | "strings" |
| | "testing" |
| | ) |
| |
|
| | type unescapeTest struct { |
| | |
| | desc string |
| | |
| | html string |
| | |
| | unescaped string |
| | } |
| |
|
| | var unescapeTests = []unescapeTest{ |
| | |
| | { |
| | "copy", |
| | "A\ttext\nstring", |
| | "A\ttext\nstring", |
| | }, |
| | |
| | { |
| | "simple", |
| | "& > <", |
| | "& > <", |
| | }, |
| | |
| | { |
| | "stringEnd", |
| | "& &", |
| | "& &", |
| | }, |
| | |
| | { |
| | "multiCodepoint", |
| | "text ⋛︀ blah", |
| | "text \u22db\ufe00 blah", |
| | }, |
| | |
| | { |
| | "decimalEntity", |
| | "Delta = Δ ", |
| | "Delta = Δ ", |
| | }, |
| | |
| | { |
| | "hexadecimalEntity", |
| | "Lambda = λ = λ ", |
| | "Lambda = λ = λ ", |
| | }, |
| | |
| | { |
| | "numericEnds", |
| | "&# &#x €43 © = ©f = ©", |
| | "&# &#x €43 © = ©f = ©", |
| | }, |
| | |
| | { |
| | "numericReplacements", |
| | "Footnote‡", |
| | "Footnote‡", |
| | }, |
| | |
| | { |
| | "copySingleAmpersand", |
| | "&", |
| | "&", |
| | }, |
| | |
| | { |
| | "copyAmpersandNonEntity", |
| | "text &test", |
| | "text &test", |
| | }, |
| | |
| | { |
| | "copyAmpersandHash", |
| | "text &#", |
| | "text &#", |
| | }, |
| | } |
| |
|
| | func TestUnescape(t *testing.T) { |
| | for _, tt := range unescapeTests { |
| | unescaped := UnescapeString(tt.html) |
| | if unescaped != tt.unescaped { |
| | t.Errorf("TestUnescape %s: want %q, got %q", tt.desc, tt.unescaped, unescaped) |
| | } |
| | } |
| | } |
| |
|
| | func TestUnescapeEscape(t *testing.T) { |
| | ss := []string{ |
| | ``, |
| | `abc def`, |
| | `a & b`, |
| | `a&b`, |
| | `a & b`, |
| | `"`, |
| | `"`, |
| | `"<&>"`, |
| | `"<&>"`, |
| | `3&5==1 && 0<1, "0<1", a+acute=á`, |
| | `The special characters are: <, >, &, ' and "`, |
| | } |
| | for _, s := range ss { |
| | if got := UnescapeString(EscapeString(s)); got != s { |
| | t.Errorf("got %q want %q", got, s) |
| | } |
| | } |
| | } |
| |
|
| | var ( |
| | benchEscapeData = strings.Repeat("AAAAA < BBBBB > CCCCC & DDDDD ' EEEEE \" ", 100) |
| | benchEscapeNone = strings.Repeat("AAAAA x BBBBB x CCCCC x DDDDD x EEEEE x ", 100) |
| | benchUnescapeSparse = strings.Repeat(strings.Repeat("AAAAA x BBBBB x CCCCC x DDDDD x EEEEE x ", 10)+"&", 10) |
| | benchUnescapeDense = strings.Repeat("&< & <", 100) |
| | ) |
| |
|
| | func BenchmarkEscape(b *testing.B) { |
| | n := 0 |
| | for i := 0; i < b.N; i++ { |
| | n += len(EscapeString(benchEscapeData)) |
| | } |
| | } |
| |
|
| | func BenchmarkEscapeNone(b *testing.B) { |
| | n := 0 |
| | for i := 0; i < b.N; i++ { |
| | n += len(EscapeString(benchEscapeNone)) |
| | } |
| | } |
| |
|
| | func BenchmarkUnescape(b *testing.B) { |
| | s := EscapeString(benchEscapeData) |
| | n := 0 |
| | for i := 0; i < b.N; i++ { |
| | n += len(UnescapeString(s)) |
| | } |
| | } |
| |
|
| | func BenchmarkUnescapeNone(b *testing.B) { |
| | s := EscapeString(benchEscapeNone) |
| | n := 0 |
| | for i := 0; i < b.N; i++ { |
| | n += len(UnescapeString(s)) |
| | } |
| | } |
| |
|
| | func BenchmarkUnescapeSparse(b *testing.B) { |
| | n := 0 |
| | for i := 0; i < b.N; i++ { |
| | n += len(UnescapeString(benchUnescapeSparse)) |
| | } |
| | } |
| |
|
| | func BenchmarkUnescapeDense(b *testing.B) { |
| | n := 0 |
| | for i := 0; i < b.N; i++ { |
| | n += len(UnescapeString(benchUnescapeDense)) |
| | } |
| | } |
| |
|