| 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 |