| OLD | NEW | 
|---|
|  | (Empty) | 
| 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 |  | 
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |  | 
| 4 |  | 
| 5 import xml.etree.ElementTree as ET |  | 
| 6 |  | 
| 7 import pytest |  | 
| 8 |  | 
| 9 from buildtools import packager, packagerEdge |  | 
| 10 |  | 
| 11 |  | 
| 12 @pytest.fixture |  | 
| 13 def files(): |  | 
| 14     """Minimal Files() for testing blockmap.""" |  | 
| 15     str500 = b''.join(chr(i % 200 + 30) for i in range(500)) |  | 
| 16     files = packager.Files(set(), set()) |  | 
| 17     files['Extension/foo.xml'] = str500 |  | 
| 18     files['Extension/bar.png'] = str500 * 200 |  | 
| 19     return files |  | 
| 20 |  | 
| 21 |  | 
| 22 def blockmap2dict(xml_data): |  | 
| 23     """Convert AppxBlockMap.xml to a dict of dicts easier to inspect.""" |  | 
| 24     return { |  | 
| 25         file.get('Name'): { |  | 
| 26             'size': file.get('Size'), |  | 
| 27             'lfhsize': file.get('LfhSize'), |  | 
| 28             'blocks': [b.get('Hash') for b in file], |  | 
| 29         } |  | 
| 30         for file in ET.fromstring(xml_data) |  | 
| 31     } |  | 
| 32 |  | 
| 33 |  | 
| 34 def test_create_appx_blockmap(files): |  | 
| 35     blockmap = blockmap2dict(packagerEdge.create_appx_blockmap(files)) |  | 
| 36     assert blockmap['Extension\\foo.xml'] == { |  | 
| 37         'size': '500', |  | 
| 38         'lfhsize': '47', |  | 
| 39         'blocks': ['Vhwfmzss1Ney+j/ssR2QVISvFyMNBQeS2P+UjeE/di0='], |  | 
| 40     } |  | 
| 41     assert blockmap['Extension\\bar.png'] == { |  | 
| 42         'size': '100000', |  | 
| 43         'lfhsize': '47', |  | 
| 44         'blocks': [ |  | 
| 45             'KPW2SxeEikUEGhoKmKxruUSexKun0bGXMppOqUFrX5E=', |  | 
| 46             'KQHnov1SZ1z34ttdDUjX2leYtpIIGndUVoUteieS2cw=', |  | 
| 47         ], |  | 
| 48     } |  | 
| 49 |  | 
| 50 |  | 
| 51 def ctm2dict(content_types_map): |  | 
| 52     """Convert content type map to a dict.""" |  | 
| 53     ret = {'defaults': {}, 'overrides': {}} |  | 
| 54     for node in ET.fromstring(content_types_map): |  | 
| 55         ct = node.get('ContentType') |  | 
| 56         if node.tag.endswith('Default'): |  | 
| 57             ret['defaults'][node.get('Extension')] = ct |  | 
| 58         elif node.tag.endswith('Override'): |  | 
| 59             ret['overrides'][node.get('PartName')] = ct |  | 
| 60         else: |  | 
| 61             raise ValueError('Unrecognised tag in content map: ' + node.tag) |  | 
| 62     return ret |  | 
| 63 |  | 
| 64 |  | 
| 65 def test_empty_content_types_map(): |  | 
| 66     ctm_dict = ctm2dict(packagerEdge.create_content_types_map([])) |  | 
| 67     assert ctm_dict['defaults'] == {} |  | 
| 68     assert ctm_dict['overrides'] == {} |  | 
| 69 |  | 
| 70 |  | 
| 71 def test_full_content_types_map(): |  | 
| 72     filenames = ['no-extension', packagerEdge.MANIFEST, packagerEdge.BLOCKMAP] |  | 
| 73     filenames += ['file.' + x for x in 'json html js png css git otf'.split()] |  | 
| 74     ctm_dict = ctm2dict(packagerEdge.create_content_types_map(filenames)) |  | 
| 75     assert ctm_dict['defaults'] == { |  | 
| 76         'css': 'text/css', |  | 
| 77         'html': 'text/html', |  | 
| 78         'js': 'application/javascript', |  | 
| 79         'json': 'application/json', |  | 
| 80         'otf': 'application/octet-stream', |  | 
| 81         'png': 'image/png', |  | 
| 82         'xml': 'application/xml', |  | 
| 83     } |  | 
| 84     assert ctm_dict['overrides'] == { |  | 
| 85         '/AppxBlockMap.xml': 'application/vnd.ms-appx.blockmap+xml', |  | 
| 86         '/AppxManifest.xml': 'application/vnd.ms-appx.manifest+xml', |  | 
| 87     } |  | 
| OLD | NEW | 
|---|