github.com/aavshr/aws-sdk-go@v1.41.3/internal/smithytesting/document_test.go (about) 1 //go:build go1.9 2 // +build go1.9 3 4 package smithytesting 5 6 import ( 7 "strings" 8 "testing" 9 ) 10 11 func TestEqualXMLUtil(t *testing.T) { 12 cases := map[string]struct { 13 expectedXML string 14 actualXML string 15 expectErr string 16 }{ 17 "empty": { 18 expectedXML: ``, 19 actualXML: ``, 20 }, 21 "emptyWithDiff": { 22 expectedXML: ``, 23 actualXML: `<Root></Root>`, 24 expectErr: "XML mismatch", 25 }, 26 "simpleXML": { 27 expectedXML: `<Root></Root>`, 28 actualXML: `<Root></Root>`, 29 }, 30 "simpleXMLWithDiff": { 31 expectedXML: `<Root></Root>`, 32 actualXML: `<Root>abc</Root>`, 33 expectErr: "XML mismatch", 34 }, 35 "nestedXML": { 36 expectedXML: `<Root><abc>123</abc><cde>xyz</cde></Root>`, 37 actualXML: `<Root><abc>123</abc><cde>xyz</cde></Root>`, 38 }, 39 "nestedXMLWithExpectedDiff": { 40 expectedXML: `<Root><abc>123</abc><cde>xyz</cde><pqr>234</pqr></Root>`, 41 actualXML: `<Root><abc>123</abc><cde>xyz</cde></Root>`, 42 expectErr: "XML mismatch", 43 }, 44 "nestedXMLWithActualDiff": { 45 expectedXML: `<Root><abc>123</abc><cde>xyz</cde></Root>`, 46 actualXML: `<Root><abc>123</abc><cde>xyz</cde><pqr>234</pqr></Root>`, 47 expectErr: "XML mismatch", 48 }, 49 "Array": { 50 expectedXML: `<Root><list><member><nested>xyz</nested></member><member><nested>abc</nested></member></list></Root>`, 51 actualXML: `<Root><list><member><nested>xyz</nested></member><member><nested>abc</nested></member></list></Root>`, 52 }, 53 "ArrayWithSecondDiff": { 54 expectedXML: `<Root><list><member><nested>xyz</nested></member><member><nested>123</nested></member></list></Root>`, 55 actualXML: `<Root><list><member><nested>xyz</nested></member><member><nested>345</nested></member></list></Root>`, 56 expectErr: "XML mismatch", 57 }, 58 "ArrayWithFirstDiff": { 59 expectedXML: `<Root><list><member><nested>abc</nested></member><member><nested>345</nested></member></list></Root>`, 60 actualXML: `<Root><list><member><nested>xyz</nested></member><member><nested>345</nested></member></list></Root>`, 61 expectErr: "XML mismatch", 62 }, 63 "ArrayWithMixedDiff": { 64 expectedXML: `<Root><list><member><nested>345</nested></member><member><nested>xyz</nested></member></list></Root>`, 65 actualXML: `<Root><list><member><nested>xyz</nested></member><member><nested>345</nested></member></list></Root>`, 66 }, 67 "ArrayWithRepetitiveMembers": { 68 expectedXML: `<Root><list><member><nested>xyz</nested></member><member><nested>xyz</nested></member></list></Root>`, 69 actualXML: `<Root><list><member><nested>xyz</nested></member><member><nested>xyz</nested></member></list></Root>`, 70 }, 71 "Map": { 72 expectedXML: `<Root><map><entry><key>abc</key><value>123</value></entry><entry><key>cde</key><value>356</value></entry></map></Root>`, 73 actualXML: `<Root><map><entry><key>abc</key><value>123</value></entry><entry><key>cde</key><value>356</value></entry></map></Root>`, 74 }, 75 "MapWithFirstDiff": { 76 expectedXML: `<Root><map><entry><key>bcf</key><value>123</value></entry><entry><key>cde</key><value>356</value></entry></map></Root>`, 77 actualXML: `<Root><map><entry><key>abc</key><value>123</value></entry><entry><key>cde</key><value>356</value></entry></map></Root>`, 78 expectErr: "XML mismatch", 79 }, 80 "MapWithSecondDiff": { 81 expectedXML: `<Root><map><entry><key>abc</key><value>123</value></entry><entry><key>cde</key><value>abc</value></entry></map></Root>`, 82 actualXML: `<Root><map><entry><key>abc</key><value>123</value></entry><entry><key>cde</key><value>356</value></entry></map></Root>`, 83 expectErr: "XML mismatch", 84 }, 85 "MapWithMixedDiff": { 86 expectedXML: `<Root><map><entry><key>cde</key><value>356</value></entry><entry><key>abc</key><value>123</value></entry></map></Root>`, 87 actualXML: `<Root><map><entry><key>abc</key><value>123</value></entry><entry><key>cde</key><value>356</value></entry></map></Root>`, 88 }, 89 "MismatchCheckforKeyValue": { 90 expectedXML: `<Root><map><entry><key>cde</key><value>abc</value></entry><entry><key>abc</key><value>356</value></entry></map></Root>`, 91 actualXML: `<Root><map><entry><key>abc</key><value>123</value></entry><entry><key>cde</key><value>356</value></entry></map></Root>`, 92 expectErr: "XML mismatch", 93 }, 94 "MixMapAndListNestedXML": { 95 expectedXML: `<Root><list>mem1</list><list>mem2</list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><alpha><x>gamma</x></alpha></nested></v></map></Root>`, 96 actualXML: `<Root><list>mem1</list><list>mem2</list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><alpha><x>gamma</x></alpha></nested></v></map></Root>`, 97 }, 98 "MixMapAndListNestedXMLWithDiff": { 99 expectedXML: `<Root><list>mem1</list><list>mem2</list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><alpha><x>gamma</x></alpha></nested></v></map></Root>`, 100 actualXML: `<Root><list>mem1</list><list>mem2</list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><beta><x>gamma</x></beta></nested></v></map></Root>`, 101 expectErr: "XML mismatch", 102 }, 103 "xmlWithNamespaceAndAttr": { 104 expectedXML: `<Root xmlns:ab="https://example.com" attr="apple">value</Root>`, 105 actualXML: `<Root xmlns:ab="https://example.com" attr="apple">value</Root>`, 106 }, 107 "xmlUnorderedAttributes": { 108 expectedXML: `<Root atr="banana" attrNew="apple">v</Root>`, 109 actualXML: `<Root attrNew="apple" atr="banana">v</Root>`, 110 }, 111 "xmlAttributesWithDiff": { 112 expectedXML: `<Root atr="someAtr" attrNew="apple">v</Root>`, 113 actualXML: `<Root attrNew="apple" atr="banana">v</Root>`, 114 expectErr: "XML mismatch", 115 }, 116 "xmlUnorderedNamespaces": { 117 expectedXML: `<Root xmlns:ab="https://example.com" xmlns:baz="https://example2.com">v</Root>`, 118 actualXML: `<Root xmlns:baz="https://example2.com" xmlns:ab="https://example.com">v</Root>`, 119 }, 120 "xmlNamespaceWithDiff": { 121 expectedXML: `<Root xmlns:ab="https://example-diff.com" xmlns:baz="https://example2.com">v</Root>`, 122 actualXML: `<Root xmlns:baz="https://example2.com" xmlns:ab="https://example.com">v</Root>`, 123 expectErr: "XML mismatch", 124 }, 125 "NestedWithNamespaceAndAttributes": { 126 expectedXML: `<Root xmlns:ab="https://example.com" xmlns:un="https://example2.com" attr="test" attr2="test2"><ab:list>mem1</ab:list><ab:list>mem2</ab:list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><alpha><x>gamma</x></alpha></nested></v></map></Root>`, 127 actualXML: `<Root xmlns:ab="https://example.com" xmlns:un="https://example2.com" attr="test" attr2="test2"><ab:list>mem1</ab:list><ab:list>mem2</ab:list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><alpha><x>gamma</x></alpha></nested></v></map></Root>`, 128 }, 129 "NestedWithNamespaceAndAttributesWithDiff": { 130 expectedXML: `<Root xmlns:ab="https://example.com" xmlns:un="https://example2.com" attr="test" attr2="test2"><list>mem2</list><ab:list>mem2</ab:list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><alpha><x>gamma</x></alpha></nested></v></map></Root>`, 131 actualXML: `<Root xmlns:ab="https://example.com" xmlns:un="https://example2.com" attr="test" attr2="test2"><list>mem1</list><ab:list>mem2</ab:list><map><k>abc</k><v><nested><enorm>abc</enorm></nested></v><k>xyz</k><v><nested><alpha><x>gamma</x></alpha></nested></v></map></Root>`, 132 expectErr: "XML mismatch", 133 }, 134 "MalformedXML": { 135 expectedXML: `<Root><fmap><key>a</key><key2>a2</key2><value>v</value></fmap><fmap><key>b</key><key2>b2</key2><value>w</value></fmap></Root>`, 136 actualXML: `<Root><fmap><key>a</key><key2>a2</key2><value>v</value></fmap><fmap><key>b</key><key2>b2</key2><value>w</value></fmap></Root>`, 137 expectErr: "malformed xml", 138 }, 139 } 140 141 for name, c := range cases { 142 t.Run(name, func(t *testing.T) { 143 actual := []byte(c.actualXML) 144 expected := []byte(c.expectedXML) 145 146 err := XMLEqual(actual, expected) 147 if err != nil { 148 if len(c.expectErr) == 0 { 149 t.Fatalf("expected no error while parsing xml, got %v", err) 150 } else if !strings.Contains(err.Error(), c.expectErr) { 151 t.Fatalf("expected expected XML err to contain %s, got %s", c.expectErr, err.Error()) 152 } 153 } else if len(c.expectErr) != 0 { 154 t.Fatalf("expected error %s, got none", c.expectErr) 155 } 156 }) 157 } 158 }