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  }