diff options
Diffstat (limited to 'libgo/go/html/token_test.go')
-rw-r--r-- | libgo/go/html/token_test.go | 79 |
1 files changed, 74 insertions, 5 deletions
diff --git a/libgo/go/html/token_test.go b/libgo/go/html/token_test.go index 5759476eab4..e07999ca5ad 100644 --- a/libgo/go/html/token_test.go +++ b/libgo/go/html/token_test.go @@ -88,7 +88,7 @@ loop: for _, tt := range tokenTests { z := NewTokenizer(bytes.NewBuffer([]byte(tt.html))) for i, s := range tt.tokens { - if z.Next() == Error { + if z.Next() == ErrorToken { t.Errorf("%s token %d: want %q got error %v", tt.desc, i, s, z.Error()) continue loop } @@ -105,6 +105,75 @@ 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{ ``, @@ -134,19 +203,19 @@ loop: for { tt := z.Next() switch tt { - case Error: + case ErrorToken: if z.Error() != os.EOF { t.Error(z.Error()) } break loop - case Text: + case TextToken: if depth > 0 { result.Write(z.Text()) } - case StartTag, EndTag: + case StartTagToken, EndTagToken: tn, _ := z.TagName() if len(tn) == 1 && tn[0] == 'a' { - if tt == StartTag { + if tt == StartTagToken { depth++ } else { depth-- |