Skip to content

Commit 96ec4bb

Browse files
committedOct 12, 2017
[Server][Tests] Enhance assertXMLEqual
1 parent c7a396b commit 96ec4bb

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed
 

‎tests/src/python/test_qgsserver.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@
5151

5252
# Strip path and content length because path may vary
5353
RE_STRIP_UNCHECKABLE = b'MAP=[^"]+|Content-Length: \d+'
54-
RE_ATTRIBUTES = b'[^>\s]+=[^>\s]+'
54+
RE_ELEMENT = b'</*([^>\s]+)[ >]'
55+
RE_ELEMENT_CONTENT = b'\>([^><]+)'
56+
RE_ATTRIBUTES = rb'((?:(?!\s|=).)*)\s*?=\s*?["\']?((?:(?<=")(?:(?<=\\)"|[^"])*|(?<=\')(?:(?<=\\)\'|[^\'])*)|(?:(?!"|\')(?:(?!\/>|>|\s).)+))'
5557

5658

5759
class QgsServerTestBase(unittest.TestCase):
@@ -71,17 +73,26 @@ def assertXMLEqual(self, response, expected, msg=''):
7173
expected_line = expected_line.strip()
7274
response_line = response_lines[line_no - 1].strip()
7375
# Compare tag
74-
try:
75-
self.assertEqual(re.findall(b'<([^>\s]+)[ >]', expected_line)[0],
76-
re.findall(b'<([^>\s]+)[ >]', response_line)[0], msg=msg + "\nTag mismatch on line %s: %s != %s" % (line_no, expected_line, response_line))
77-
except IndexError:
76+
if re.match(RE_ELEMENT, expected_line):
77+
expected_elements = re.findall(RE_ELEMENT, expected_line)
78+
response_elements = re.findall(RE_ELEMENT, response_line)
79+
self.assertEqual(expected_elements[0],
80+
response_elements[0], msg=msg + "\nTag mismatch on line %s: %s != %s" % (line_no, expected_line, response_line))
81+
# Compare content
82+
if len(expected_elements) == 2 and expected_elements[0] == expected_elements[1]:
83+
expected_element_content = re.findall(RE_ELEMENT_CONTENT, expected_line)
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))
87+
else:
7888
self.assertEqual(expected_line, response_line, msg=msg + "\nTag line mismatch %s: %s != %s\n%s" % (line_no, expected_line, response_line, msg))
7989
# print("---->%s\t%s == %s" % (line_no, expected_line, response_line))
8090
# Compare attributes
81-
if re.match(RE_ATTRIBUTES, expected_line): # has attrs
82-
expected_attrs = sorted(re.findall(RE_ATTRIBUTES, expected_line))
83-
response_attrs = sorted(re.findall(RE_ATTRIBUTES, response_line))
91+
if re.findall(RE_ATTRIBUTES, expected_line): # has attrs
92+
expected_attrs, expected_values = zip(*sorted(re.findall(RE_ATTRIBUTES, expected_line)))
93+
response_attrs, response_values = zip(*sorted(re.findall(RE_ATTRIBUTES, response_line)))
8494
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))
8596
line_no += 1
8697

8798
@classmethod

0 commit comments

Comments
 (0)
Please sign in to comment.