|
51 | 51 |
|
52 | 52 | # Strip path and content length because path may vary |
53 | 53 | RE_STRIP_UNCHECKABLE = b'MAP=[^"]+|Content-Length: \d+' |
54 | | -RE_ELEMENT = b'</*([^>\s]+)[ >]' |
55 | | -RE_ELEMENT_CONTENT = b'\>([^><]+)' |
| 54 | +RE_ELEMENT = b'</*([^>\[\s]+)[ >]' |
| 55 | +RE_ELEMENT_CONTENT = b'<[^>\[]+>(.+)</[^>\[\s]+>' |
56 | 56 | RE_ATTRIBUTES = rb'((?:(?!\s|=).)*)\s*?=\s*?["\']?((?:(?<=")(?:(?<=\\)"|[^"])*|(?<=\')(?:(?<=\\)\'|[^\'])*)|(?:(?!"|\')(?:(?!\/>|>|\s).)+))' |
57 | 57 |
|
58 | 58 |
|
@@ -82,17 +82,21 @@ def assertXMLEqual(self, response, expected, msg=''): |
82 | 82 | if len(expected_elements) == 2 and expected_elements[0] == expected_elements[1]: |
83 | 83 | expected_element_content = re.findall(RE_ELEMENT_CONTENT, expected_line) |
84 | 84 | response_element_content = re.findall(RE_ELEMENT_CONTENT, response_line) |
85 | | - self.assertEqual(expected_element_content[0], |
86 | | - response_element_content[0], msg=msg + "\nContent mismatch on line %s: %s != %s" % (line_no, expected_line, response_line)) |
| 85 | + self.assertEqual(len(expected_element_content), len(response_element_content), |
| 86 | + msg=msg + "\nContent mismatch on line %s: %s != %s" % (line_no, expected_line, response_line)) |
| 87 | + if len(expected_element_content): |
| 88 | + self.assertEqual(expected_element_content[0], |
| 89 | + response_element_content[0], msg=msg + "\nContent mismatch on line %s: %s != %s" % (line_no, expected_line, response_line)) |
87 | 90 | else: |
88 | 91 | self.assertEqual(expected_line, response_line, msg=msg + "\nTag line mismatch %s: %s != %s\n%s" % (line_no, expected_line, response_line, msg)) |
89 | 92 | # print("---->%s\t%s == %s" % (line_no, expected_line, response_line)) |
90 | 93 | # Compare attributes |
91 | 94 | if re.findall(RE_ATTRIBUTES, expected_line): # has attrs |
92 | 95 | expected_attrs, expected_values = zip(*sorted(re.findall(RE_ATTRIBUTES, expected_line))) |
| 96 | + self.assertTrue(re.findall(RE_ATTRIBUTES, response_line), msg=msg + "\nXML attributes differ at line {0}: {1} != {2}".format(line_no, expected_line, response_line)) |
93 | 97 | response_attrs, response_values = zip(*sorted(re.findall(RE_ATTRIBUTES, response_line))) |
94 | 98 | self.assertEqual(expected_attrs, response_attrs, msg=msg + "\nXML attributes differ at line {0}: {1} != {2}".format(line_no, expected_attrs, response_attrs)) |
95 | | - self.assertEqual(expected_values, response_values, msg=msg + "\nXML attribute values differ at line {0}: {1} != {2}".format(line_no, expected_attrs, response_attrs)) |
| 99 | + self.assertEqual(expected_values, response_values, msg=msg + "\nXML attribute values differ at line {0}: {1} != {2}".format(line_no, expected_values, response_values)) |
96 | 100 | line_no += 1 |
97 | 101 |
|
98 | 102 | @classmethod |
|
0 commit comments