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 |