mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
encoding/xml: add decode wrapper
Fixes #19480 Change-Id: I5a621507279d5bb1f3991b7a412d9a63039d464b Reviewed-on: https://go-review.googlesource.com/38791 Run-TryBot: Sam Whited <sam@samwhited.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
a696277243
commit
9593b74a3c
2 changed files with 101 additions and 0 deletions
|
|
@ -797,3 +797,67 @@ func TestIssue12417(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func tokenMap(mapping func(t Token) Token) func(TokenReader) TokenReader {
|
||||
return func(src TokenReader) TokenReader {
|
||||
return mapper{
|
||||
t: src,
|
||||
f: mapping,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type mapper struct {
|
||||
t TokenReader
|
||||
f func(Token) Token
|
||||
}
|
||||
|
||||
func (m mapper) Token() (Token, error) {
|
||||
tok, err := m.t.Token()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m.f(tok), nil
|
||||
}
|
||||
|
||||
func TestNewTokenDecoderIdempotent(t *testing.T) {
|
||||
d := NewDecoder(strings.NewReader(`<br/>`))
|
||||
d2 := NewTokenDecoder(d)
|
||||
if d != d2 {
|
||||
t.Error("NewTokenDecoder did not detect underlying Decoder")
|
||||
}
|
||||
}
|
||||
|
||||
func TestWrapDecoder(t *testing.T) {
|
||||
d := NewDecoder(strings.NewReader(`<quote>[Re-enter Clown with a letter, and FABIAN]</quote>`))
|
||||
m := tokenMap(func(t Token) Token {
|
||||
switch tok := t.(type) {
|
||||
case StartElement:
|
||||
if tok.Name.Local == "quote" {
|
||||
tok.Name.Local = "blocking"
|
||||
return tok
|
||||
}
|
||||
case EndElement:
|
||||
if tok.Name.Local == "quote" {
|
||||
tok.Name.Local = "blocking"
|
||||
return tok
|
||||
}
|
||||
}
|
||||
return t
|
||||
})
|
||||
|
||||
d = NewTokenDecoder(m(d))
|
||||
|
||||
o := struct {
|
||||
XMLName Name `xml:"blocking"`
|
||||
Chardata string `xml:",chardata"`
|
||||
}{}
|
||||
|
||||
if err := d.Decode(&o); err != nil {
|
||||
t.Fatal("Got unexpected error while decoding:", err)
|
||||
}
|
||||
|
||||
if o.Chardata != "[Re-enter Clown with a letter, and FABIAN]" {
|
||||
t.Fatalf("Got unexpected chardata: `%s`\n", o.Chardata)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue