| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
| 2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| 4 | 4 |
| 5 import difflib | 5 import difflib |
| 6 import json | 6 import json |
| 7 import os | 7 import os |
| 8 import re | 8 import re |
| 9 import shutil | 9 import shutil |
| 10 import zipfile | 10 import zipfile |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 233 files['ext/c.js'] = 'var this_is_c;' | 233 files['ext/c.js'] = 'var this_is_c;' |
| 234 | 234 |
| 235 tmpdir.mkdir('lib').join('b.js').write(files['lib/b.js']) | 235 tmpdir.mkdir('lib').join('b.js').write(files['lib/b.js']) |
| 236 ext_dir = tmpdir.mkdir('ext') | 236 ext_dir = tmpdir.mkdir('ext') |
| 237 ext_dir.join('a.js').write(files['ext/a.js']) | 237 ext_dir.join('a.js').write(files['ext/a.js']) |
| 238 ext_dir.join('c.js').write(files['ext/c.js']) | 238 ext_dir.join('c.js').write(files['ext/c.js']) |
| 239 | 239 |
| 240 return files | 240 return files |
| 241 | 241 |
| 242 | 242 |
| 243 def comparable_json(json_string): | 243 def comparable_json(json_data): |
| 244 """Create a nonambiguous representation of a given JSON string.""" | 244 """Create a nonambiguous representation of the given JSON data.""" |
| 245 if isinstance(json_data, basestring): | |
| 246 json_data = json.loads(json_data) | |
| 245 return json.dumps( | 247 return json.dumps( |
| 246 json.loads(json_string), sort_keys=True, indent=0 | 248 json_data, sort_keys=True, indent=0 |
| 247 ).split('\n') | 249 ).split('\n') |
| 248 | 250 |
| 249 | 251 |
| 250 def comparable_xml(xml): | 252 def comparable_xml(xml): |
| 251 """Create a nonambiguous representation of a given XML tree.""" | 253 """Create a nonambiguous representation of a given XML tree.""" |
| 252 def strip(s): | 254 def strip(s): |
| 253 if s is None: | 255 if s is None: |
| 254 return '' | 256 return '' |
| 255 return s.strip() | 257 return s.strip() |
| 256 | 258 |
| 257 def transform(elt): | 259 def transform(elt): |
| 258 subs = sorted(transform(s) for s in elt) | 260 subs = sorted(transform(s) for s in elt) |
| 259 attrs = tuple('{}={}'.format(k, v) for k, v in elt.attrib.items()) | 261 return (elt.tag, strip(elt.tail), strip(elt.text), elt.attrib, subs) |
|
Vasily Kuznetsov
2017/10/23 12:48:20
Since you're doing a `comparable_json` later, we c
tlucas
2017/10/23 13:21:36
Good point - Done.
| |
| 260 return (elt.tag, strip(elt.tail), strip(elt.text), attrs, subs) | 262 |
| 261 | 263 return comparable_json(transform(ElementTree.fromstring(xml))) |
| 262 return comparable_json(json.dumps(transform(ElementTree.fromstring(xml)))) | |
|
Vasily Kuznetsov
2017/10/23 12:48:20
Its kind of a pity that we're doing `json.dumps` h
tlucas
2017/10/23 13:21:36
No, you are right - dumps(loads(dumps())) is defin
| |
| 263 | 264 |
| 264 | 265 |
| 265 def assert_manifest_content(manifest, expected_path): | 266 def assert_manifest_content(manifest, expected_path): |
| 266 extension = os.path.basename(expected_path).split('.')[-1] | 267 extension = os.path.basename(expected_path).split('.')[-1] |
| 267 | 268 |
| 268 with open(expected_path, 'r') as fp: | 269 with open(expected_path, 'r') as fp: |
| 269 if extension == 'xml': | 270 if extension == 'xml': |
| 270 generated = comparable_xml(manifest) | 271 generated = comparable_xml(manifest) |
| 271 expected = comparable_xml(fp.read()) | 272 expected = comparable_xml(fp.read()) |
| 272 else: | 273 else: |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 458 expected = os.path.join( | 459 expected = os.path.join( |
| 459 os.path.dirname(__file__), | 460 os.path.dirname(__file__), |
| 460 'expecteddata', | 461 'expecteddata', |
| 461 filename.format(name, ext), | 462 filename.format(name, ext), |
| 462 ) | 463 ) |
| 463 | 464 |
| 464 assert_manifest_content( | 465 assert_manifest_content( |
| 465 package.read(os.path.join(folder, '{}.{}'.format(name, ext))), | 466 package.read(os.path.join(folder, '{}.{}'.format(name, ext))), |
| 466 expected, | 467 expected, |
| 467 ) | 468 ) |
| LEFT | RIGHT |