98 lines
1.8 KiB
Go
98 lines
1.8 KiB
Go
|
// Copyright 2013 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package html
|
||
|
|
||
|
import "testing"
|
||
|
|
||
|
type unescapeTest struct {
|
||
|
// A short description of the test case.
|
||
|
desc string
|
||
|
// The HTML text.
|
||
|
html string
|
||
|
// The unescaped text.
|
||
|
unescaped string
|
||
|
}
|
||
|
|
||
|
var unescapeTests = []unescapeTest{
|
||
|
// Handle no entities.
|
||
|
{
|
||
|
"copy",
|
||
|
"A\ttext\nstring",
|
||
|
"A\ttext\nstring",
|
||
|
},
|
||
|
// Handle simple named entities.
|
||
|
{
|
||
|
"simple",
|
||
|
"& > <",
|
||
|
"& > <",
|
||
|
},
|
||
|
// Handle hitting the end of the string.
|
||
|
{
|
||
|
"stringEnd",
|
||
|
"& &",
|
||
|
"& &",
|
||
|
},
|
||
|
// Handle entities with two codepoints.
|
||
|
{
|
||
|
"multiCodepoint",
|
||
|
"text ⋛︀ blah",
|
||
|
"text \u22db\ufe00 blah",
|
||
|
},
|
||
|
// Handle decimal numeric entities.
|
||
|
{
|
||
|
"decimalEntity",
|
||
|
"Delta = Δ ",
|
||
|
"Delta = Δ ",
|
||
|
},
|
||
|
// Handle hexadecimal numeric entities.
|
||
|
{
|
||
|
"hexadecimalEntity",
|
||
|
"Lambda = λ = λ ",
|
||
|
"Lambda = λ = λ ",
|
||
|
},
|
||
|
// Handle numeric early termination.
|
||
|
{
|
||
|
"numericEnds",
|
||
|
"&# &#x €43 © = ©f = ©",
|
||
|
"&# &#x €43 © = ©f = ©",
|
||
|
},
|
||
|
// Handle numeric ISO-8859-1 entity replacements.
|
||
|
{
|
||
|
"numericReplacements",
|
||
|
"Footnote‡",
|
||
|
"Footnote‡",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
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)
|
||
|
}
|
||
|
}
|
||
|
}
|