//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: ``,
actualXML: ``,
},
"MapWithFirstDiff": {
expectedXML: ``,
actualXML: ``,
expectErr: "XML mismatch",
},
"MapWithSecondDiff": {
expectedXML: ``,
actualXML: ``,
expectErr: "XML mismatch",
},
"MapWithMixedDiff": {
expectedXML: ``,
actualXML: ``,
},
"MismatchCheckforKeyValue": {
expectedXML: ``,
actualXML: ``,
expectErr: "XML mismatch",
},
"MixMapAndListNestedXML": {
expectedXML: `mem1
mem2
`,
actualXML: `mem1
mem2
`,
},
"MixMapAndListNestedXMLWithDiff": {
expectedXML: `mem1
mem2
`,
actualXML: `mem1
mem2
`,
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: `mem1mem2`,
actualXML: `mem1mem2`,
},
"NestedWithNamespaceAndAttributesWithDiff": {
expectedXML: `mem2
mem2`,
actualXML: `mem1
mem2`,
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)
}
})
}
}