diff --git a/src/encoding/xml/marshal_test.go b/src/encoding/xml/marshal_test.go
index 31309ef2ca8c5a..56347e1212c27b 100644
--- a/src/encoding/xml/marshal_test.go
+++ b/src/encoding/xml/marshal_test.go
@@ -133,6 +133,14 @@ type Service struct {
Extra2 interface{} `xml:"host>extra2"`
}
+type ServiceErrorNameConflict struct {
+ XMLName struct{} `xml:"service"`
+ Domain *Domain `xml:"host>domain"`
+ Port *Port `xml:"host>portZZZ"`
+ Extra1 interface{}
+ Extra2 interface{} `xml:"host>extra2"`
+}
+
var nilStruct *Ship
type EmbedA struct {
@@ -189,6 +197,10 @@ type NameInField struct {
Foo Name `xml:"ns foo"`
}
+type NameInFieldError struct {
+ Foo Name `xml:"ns "`
+}
+
type AttrTest struct {
Int int `xml:",attr"`
Named int `xml:"int,attr"`
@@ -320,9 +332,22 @@ type MyMarshalerTest struct {
var _ Marshaler = (*MyMarshalerTest)(nil)
func (m *MyMarshalerTest) MarshalXML(e *Encoder, start StartElement) error {
+ return e.EncodeElement("hello world", start)
+}
+
+type MyMarshalerTestErrorMissingName struct {
+}
+
+func (m *MyMarshalerTestErrorMissingName) MarshalXML(e *Encoder, _ StartElement) error {
+ return e.EncodeElement("hello world", StartElement{Name{"", ""}, nil})
+}
+
+type MyMarshalerTestErrorNotClosed struct {
+}
+
+func (m *MyMarshalerTestErrorNotClosed) MarshalXML(e *Encoder, start StartElement) error {
e.EncodeToken(start)
- e.EncodeToken(CharData([]byte("hello world")))
- e.EncodeToken(EndElement{start.Name})
+ e.EncodeToken(CharData("hello world"))
return nil
}
@@ -791,6 +816,12 @@ var marshalTests = []struct {
``,
MarshalOnly: true,
},
+ {
+ Value: &ServiceErrorNameConflict{Port: &Port{Number: "80"}},
+ ExpectXML: `
Foo
\n\n
Bar>\n" - d := NewDecoder(strings.NewReader(testInput)) - var err error - for _, err = d.Token(); err == nil; _, err = d.Token() { - } - synerr, ok := err.(*SyntaxError) - if !ok { - t.Error("Expected SyntaxError.") +func TestCopyTokenDefaultCase(t *testing.T) { + data := []byte("same data") + var tok1 = Token(data) + tok2 := CopyToken(data) + if !reflect.DeepEqual(tok1, tok2) { + t.Error("CopyToken(Token]) != Token") } - if synerr.Line != 3 { - t.Error("SyntaxError didn't have correct line number.") + data[1] = 'o' + if !reflect.DeepEqual(tok1, tok2) { + t.Error("CopyToken(CharData) uses different buffer.") } } @@ -677,7 +852,6 @@ var characterTests = []struct { } func TestDisallowedCharacters(t *testing.T) { - for i, tt := range characterTests { d := NewDecoder(strings.NewReader(tt.in)) var err error @@ -778,18 +952,44 @@ func TestEscapeTextIOErrors(t *testing.T) { } } -func TestEscapeTextInvalidChar(t *testing.T) { - input := []byte("A \x00 terminated string.") - expected := "A \uFFFD terminated string." +var escapeTextTests = []struct { + input []byte + expected string +}{ + {[]byte("A \" terminated string."), "A " terminated string."}, + {[]byte(`A ' terminated string.`), "A ' terminated string."}, + {[]byte("A & terminated string."), "A & terminated string."}, + {[]byte("A < terminated string."), "A < terminated string."}, + {[]byte("A > terminated string."), "A > terminated string."}, + {[]byte("A \t terminated string."), "A terminated string."}, + {[]byte("A \n terminated string."), "A terminated string."}, + {[]byte("A \r terminated string."), "A terminated string."}, + {[]byte("A \x00 terminated string."), "A \uFFFD terminated string."}, +} - buff := new(bytes.Buffer) - if err := EscapeText(buff, input); err != nil { - t.Fatalf("have %v, want nil", err) +func TestEscapeText(t *testing.T) { + for _, test := range escapeTextTests { + buff := new(bytes.Buffer) + if err := EscapeText(buff, test.input); err != nil { + t.Fatalf("have %v, want nil", err) + } + + text := buff.String() + if text != test.expected { + t.Errorf("have %v, want %v", text, test.expected) + } } - text := buff.String() +} + +func TestEscape(t *testing.T) { + for _, test := range escapeTextTests { + buff := new(bytes.Buffer) + Escape(buff, test.input) - if text != expected { - t.Errorf("have %v, want %v", text, expected) + text := buff.String() + if text != test.expected { + t.Errorf("have %v, want %v", text, test.expected) + } } }