|
@@ -468,96 +468,6 @@ loop:
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-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)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
func TestBufAPI(t *testing.T) {
|
|
func TestBufAPI(t *testing.T) {
|
|
|
s := "0<a>1</a>2<b>3<a>4<a>5</a>6</b>7</a>8<a/>9"
|
|
s := "0<a>1</a>2<b>3<a>4<a>5</a>6</b>7</a>8<a/>9"
|
|
|
z := NewTokenizer(bytes.NewBufferString(s))
|
|
z := NewTokenizer(bytes.NewBufferString(s))
|