xml: move invalid xml tests to their own file
diff --git a/invalid_xml_test.go b/invalid_xml_test.go new file mode 100644 index 0000000..2901308 --- /dev/null +++ b/invalid_xml_test.go
@@ -0,0 +1,53 @@ +package plist + +import ( + "bytes" + "testing" +) + +var InvalidXMLPlists = []struct { + Name string + Data string +}{ + {"Mismatched tag at root level", "<plist></dict>"}, + {"Mismatched tag in string", "<string>hello</world>"}, + {"Mismatched tag in dictionary", "<dict><key>key</key></what>"}, + {"Truncated integer", `<plist version="1.0"><integer>0x</integer></plist>`}, + {"Mismatched tag closing dict", "<plist><doct><key>helo</key><string></string></doct></plist>"}, + {"Dict without key", "<plist><dict><string>helo</string></dict></plist>"}, + {"Dict without value", "<plist><dict><key>helo</key></dict></plist>"}, + {"Empty integer", "<plist><integer></integer></plist>"}, + {"Unparseable integer", "<plist><integer>helo</integer></plist>"}, + {"Unparseable real", "<plist><real>helo</real></plist>"}, + {"Unparseable data", "<plist><data>*@&%#helo</data></plist>"}, + {"Unparseable date", "<plist><date>*@&%#helo</date></plist>"}, + {"Mismatched tag closing string", "<plist><string></strong></plist>"}, + {"Unexpected directive in string", "<plist><string><!directive!></string></plist>"}, + {"Unclosed integer", "<plist><integer>10</plist>"}, + {"Unclosed real", "<plist><real>10</plist>"}, + {"Unclosed string", "<plist><string>10</plist>"}, + {"Unclosed dict", "<plist><dict>10</plist>"}, + {"Unclosed dict key", "<plist><dict><key>10</plist>"}, + {"Unclosed plist", "<plist>"}, + {"Unclosed data", "<plist><data>"}, + {"Unclosed date", "<plist><date>"}, + {"Unclosed array", "<plist><array>"}, + {"Empty document", "<plist/>"}, + {"Incomplete tag", "<pl"}, + {"Not an XML document", "bplist00"}, +} + +func TestInvalidXMLPlists(t *testing.T) { + for _, test := range InvalidXMLPlists { + subtest(t, test.Name, func(t *testing.T) { + buf := bytes.NewReader([]byte(test.Data)) + d := newXMLPlistParser(buf) + obj, err := d.parseDocument() + if err == nil { + t.Fatalf("invalid plist failed to throw error; deserialized %v", obj) + } else { + t.Log(err) + } + }) + } +}
diff --git a/xml_test.go b/xml_test.go index 0ad2b8f..71f1fbb 100644 --- a/xml_test.go +++ b/xml_test.go
@@ -24,42 +24,3 @@ buf.Seek(0, 0) } } - -func TestVariousIllegalXMLPlists(t *testing.T) { - plists := []string{ - `<plist version="1.0"><integer>0x</integer></plist>`, - "<plist><doct><key>helo</key><string></string></doct></plist>", - "<plist><dict><string>helo</string></dict></plist>", - "<plist><dict><key>helo</key></dict></plist>", - "<plist><integer>helo</integer></plist>", - "<plist><integer></integer></plist>", - "<plist><real>helo</real></plist>", - "<plist><data>*@&%#helo</data></plist>", - "<plist><date>*@&%#helo</date></plist>", - "<plist><date>*@&%#helo</date></plist>", - "<plist><integer>10</plist>", - "<plist><real>10</plist>", - "<plist><string>10</plist>", - "<plist><string></strong></plist>", - "<plist><string><!directive!></string></plist>", - "<plist><dict>10</plist>", - "<plist><dict><key>10</plist>", - "<plist>", - "<plist><data>", - "<plist><date>", - "<plist><array>", - "<plist/>", - "<pl", - "bplist00", - } - - for _, plist := range plists { - buf := bytes.NewReader([]byte(plist)) - d := newXMLPlistParser(buf) - obj, err := d.parseDocument() - t.Logf("Error: %v", err) - if obj != nil && err == nil { - t.Error("Expected error, received nothing.") - } - } -}