| Index: tests/test_packagerWebExt.py |
| diff --git a/tests/test_packagerWebExt.py b/tests/test_packagerWebExt.py |
| index f13ab10ac164a9055d06340d1d9b02c08339b598..8b56b0d7441e0fcdfc5a8ba2f554b4704b432417 100644 |
| --- a/tests/test_packagerWebExt.py |
| +++ b/tests/test_packagerWebExt.py |
| @@ -240,44 +240,27 @@ def lib_files(tmpdir): |
| return files |
| -def comparable_xml(xml): |
| - """Create a nonambiguous representation of a given XML tree. |
| - |
| - Note that this function is not safe against ambiguous tags |
| - containing differently distributed children, e.g.: |
| - |
| - '<a><b><c/></b><b><d/></b></a>' |
| - vs. |
| - '<a><b/><b><c/><d/></b></a>' |
| - |
| - This is irrelevant for comparing the XML used by the tests of this |
| - module. |
| - """ |
| - def get_leafs_string(tree): |
| - """Recursively build a string representing all xml leaf-nodes.""" |
| - root_str = '{}|{}|{}'.format(tree.tag, tree.tail, tree.text).strip() |
| - result = [] |
| +def comparable_json(json_data): |
| + """Create a nonambiguous representation of the given JSON data.""" |
| + if isinstance(json_data, basestring): |
| + json_data = json.loads(json_data) |
| + return json.dumps( |
| + json_data, sort_keys=True, indent=0 |
| + ).split('\n') |
| - if len(tree) > 0: |
| - for subtree in tree: |
| - for leaf in get_leafs_string(subtree): |
| - result.append('{}__{}'.format(root_str, leaf)) |
| - for k, v in tree.attrib.items(): |
| - result.append('{}__{}:{}'.format(root_str, k, v)) |
| - else: |
| - result.append(root_str) |
| - return result |
| - # XML data itself shall not be sorted, hence we can safely sort |
| - # our string representations in order to produce a valid unified diff. |
| - return sorted(get_leafs_string(ElementTree.fromstring(xml))) |
| +def comparable_xml(xml): |
| + """Create a nonambiguous representation of a given XML tree.""" |
| + def strip(s): |
| + if s is None: |
| + return '' |
| + return s.strip() |
| + def transform(elt): |
| + subs = sorted(transform(s) for s in elt) |
| + return (elt.tag, strip(elt.tail), strip(elt.text), elt.attrib, subs) |
| -def comparable_json(json_string): |
| - """Create a nonambiguous representation of a given JSON string.""" |
| - return json.dumps( |
| - json.loads(json_string), sort_keys=True, indent=0 |
| - ).split('\n') |
| + return comparable_json(transform(ElementTree.fromstring(xml))) |
| def assert_manifest_content(manifest, expected_path): |