//go:build go1.9 // +build go1.9 package smithytesting import ( "strings" "testing" ) func TestEqualXMLUtil(t *testing.T) { cases := map[string]struct { expectedXML string actualXML string expectErr string }{ "empty": { expectedXML: ``, actualXML: ``, }, "emptyWithDiff": { expectedXML: ``, actualXML: ``, expectErr: "XML mismatch", }, "simpleXML": { expectedXML: ``, actualXML: ``, }, "simpleXMLWithDiff": { expectedXML: ``, actualXML: `abc`, expectErr: "XML mismatch", }, "nestedXML": { expectedXML: `123xyz`, actualXML: `123xyz`, }, "nestedXMLWithExpectedDiff": { expectedXML: `123xyz234`, actualXML: `123xyz`, expectErr: "XML mismatch", }, "nestedXMLWithActualDiff": { expectedXML: `123xyz`, actualXML: `123xyz234`, expectErr: "XML mismatch", }, "Array": { expectedXML: `xyzabc`, actualXML: `xyzabc`, }, "ArrayWithSecondDiff": { expectedXML: `xyz123`, actualXML: `xyz345`, expectErr: "XML mismatch", }, "ArrayWithFirstDiff": { expectedXML: `abc345`, actualXML: `xyz345`, expectErr: "XML mismatch", }, "ArrayWithMixedDiff": { expectedXML: `345xyz`, actualXML: `xyz345`, }, "ArrayWithRepetitiveMembers": { expectedXML: `xyzxyz`, actualXML: `xyzxyz`, }, "Map": { expectedXML: `abc123cde356`, actualXML: `abc123cde356`, }, "MapWithFirstDiff": { expectedXML: `bcf123cde356`, actualXML: `abc123cde356`, expectErr: "XML mismatch", }, "MapWithSecondDiff": { expectedXML: `abc123cdeabc`, actualXML: `abc123cde356`, expectErr: "XML mismatch", }, "MapWithMixedDiff": { expectedXML: `cde356abc123`, actualXML: `abc123cde356`, }, "MismatchCheckforKeyValue": { expectedXML: `cdeabcabc356`, actualXML: `abc123cde356`, expectErr: "XML mismatch", }, "MixMapAndListNestedXML": { expectedXML: `mem1mem2abcabcxyzgamma`, actualXML: `mem1mem2abcabcxyzgamma`, }, "MixMapAndListNestedXMLWithDiff": { expectedXML: `mem1mem2abcabcxyzgamma`, actualXML: `mem1mem2abcabcxyzgamma`, expectErr: "XML mismatch", }, "xmlWithNamespaceAndAttr": { expectedXML: `value`, actualXML: `value`, }, "xmlUnorderedAttributes": { expectedXML: `v`, actualXML: `v`, }, "xmlAttributesWithDiff": { expectedXML: `v`, actualXML: `v`, expectErr: "XML mismatch", }, "xmlUnorderedNamespaces": { expectedXML: `v`, actualXML: `v`, }, "xmlNamespaceWithDiff": { expectedXML: `v`, actualXML: `v`, expectErr: "XML mismatch", }, "NestedWithNamespaceAndAttributes": { expectedXML: `mem1mem2abcabcxyzgamma`, actualXML: `mem1mem2abcabcxyzgamma`, }, "NestedWithNamespaceAndAttributesWithDiff": { expectedXML: `mem2mem2abcabcxyzgamma`, actualXML: `mem1mem2abcabcxyzgamma`, expectErr: "XML mismatch", }, "MalformedXML": { expectedXML: `aa2vbb2w`, actualXML: `aa2vbb2w`, expectErr: "malformed xml", }, } for name, c := range cases { t.Run(name, func(t *testing.T) { actual := []byte(c.actualXML) expected := []byte(c.expectedXML) err := XMLEqual(actual, expected) if err != nil { if len(c.expectErr) == 0 { t.Fatalf("expected no error while parsing xml, got %v", err) } else if !strings.Contains(err.Error(), c.expectErr) { t.Fatalf("expected expected XML err to contain %s, got %s", c.expectErr, err.Error()) } } else if len(c.expectErr) != 0 { t.Fatalf("expected error %s, got none", c.expectErr) } }) } }