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