Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
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/.
5 import mozunit
6 from mozpack.packager.formats import (
7 FlatFormatter,
8 JarFormatter,
9 OmniJarFormatter,
10 )
11 from mozpack.copier import FileRegistry
12 from mozpack.files import GeneratedFile
13 from mozpack.chrome.manifest import (
14 ManifestContent,
15 ManifestResource,
16 ManifestBinaryComponent,
17 )
18 from mozpack.test.test_files import (
19 TestWithTmpDir,
20 foo_xpt,
21 bar_xpt,
22 read_interfaces,
23 )
26 class TestFlatFormatter(TestWithTmpDir):
27 def test_flat_formatter(self):
28 registry = FileRegistry()
29 formatter = FlatFormatter(registry)
30 formatter.add_base('app')
31 formatter.add('f/oo/bar', GeneratedFile('foobar'))
32 formatter.add('f/oo/baz', GeneratedFile('foobaz'))
33 formatter.add('f/oo/qux', GeneratedFile('fooqux'))
34 formatter.add_manifest(ManifestContent('f/oo', 'bar', 'bar'))
35 formatter.add_manifest(ManifestContent('f/oo', 'qux', 'qux'))
36 self.assertEqual(registry.paths(),
37 ['f/oo/bar', 'f/oo/baz', 'f/oo/qux',
38 'chrome.manifest', 'f/f.manifest',
39 'f/oo/oo.manifest'])
40 self.assertEqual(registry['chrome.manifest'].open().read(),
41 'manifest f/f.manifest\n')
42 self.assertEqual(registry['f/f.manifest'].open().read(),
43 'manifest oo/oo.manifest\n')
44 self.assertEqual(registry['f/oo/oo.manifest'].open().read(), ''.join([
45 'content bar bar\n',
46 'content qux qux\n',
47 ]))
49 formatter.add_interfaces('components/foo.xpt', foo_xpt)
50 formatter.add_interfaces('components/bar.xpt', bar_xpt)
51 self.assertEqual(registry.paths(),
52 ['f/oo/bar', 'f/oo/baz', 'f/oo/qux',
53 'chrome.manifest', 'f/f.manifest',
54 'f/oo/oo.manifest', 'components/components.manifest',
55 'components/interfaces.xpt'])
56 self.assertEqual(registry['chrome.manifest'].open().read(), ''.join([
57 'manifest f/f.manifest\n',
58 'manifest components/components.manifest\n',
59 ]))
60 self.assertEqual(
61 registry['components/components.manifest'].open().read(),
62 'interfaces interfaces.xpt\n'
63 )
65 registry['components/interfaces.xpt'] \
66 .copy(self.tmppath('interfaces.xpt'))
67 linked = read_interfaces(self.tmppath('interfaces.xpt'))
68 foo = read_interfaces(foo_xpt.open())
69 bar = read_interfaces(bar_xpt.open())
70 self.assertEqual(foo['foo'], linked['foo'])
71 self.assertEqual(bar['bar'], linked['bar'])
73 formatter.add_manifest(ManifestContent('app/chrome', 'content',
74 'foo/'))
75 self.assertEqual(registry['chrome.manifest'].open().read(), ''.join([
76 'manifest f/f.manifest\n',
77 'manifest components/components.manifest\n',
78 ]))
79 self.assertEqual(registry['app/chrome.manifest'].open().read(),
80 'manifest chrome/chrome.manifest\n')
81 self.assertEqual(registry['app/chrome/chrome.manifest'].open().read(),
82 'content content foo/\n')
84 def test_bases(self):
85 formatter = FlatFormatter(FileRegistry())
86 formatter.add_base('')
87 formatter.add_base('browser')
88 formatter.add_base('webapprt')
89 self.assertEqual(formatter._get_base('platform.ini'), '')
90 self.assertEqual(formatter._get_base('browser/application.ini'),
91 'browser')
92 self.assertEqual(formatter._get_base('webapprt/webapprt.ini'),
93 'webapprt')
96 class TestJarFormatter(TestWithTmpDir):
97 def test_jar_formatter(self):
98 registry = FileRegistry()
99 formatter = JarFormatter(registry)
100 formatter.add_manifest(ManifestContent('f', 'oo', 'oo/'))
101 formatter.add_manifest(ManifestContent('f', 'bar', 'oo/bar/'))
102 formatter.add('f/oo/bar/baz', GeneratedFile('foobarbaz'))
103 formatter.add('f/oo/qux', GeneratedFile('fooqux'))
105 self.assertEqual(registry.paths(),
106 ['chrome.manifest', 'f/f.manifest', 'f/oo.jar'])
107 self.assertEqual(registry['chrome.manifest'].open().read(),
108 'manifest f/f.manifest\n')
109 self.assertEqual(registry['f/f.manifest'].open().read(), ''.join([
110 'content oo jar:oo.jar!/\n',
111 'content bar jar:oo.jar!/bar/\n',
112 ]))
113 self.assertTrue(formatter.contains('f/oo/bar/baz'))
114 self.assertFalse(formatter.contains('foo/bar/baz'))
115 self.assertEqual(registry['f/oo.jar'].paths(), ['bar/baz', 'qux'])
117 formatter.add_manifest(ManifestResource('f', 'foo', 'resource://bar/'))
118 self.assertEqual(registry['f/f.manifest'].open().read(), ''.join([
119 'content oo jar:oo.jar!/\n',
120 'content bar jar:oo.jar!/bar/\n',
121 'resource foo resource://bar/\n',
122 ]))
125 class TestOmniJarFormatter(TestWithTmpDir):
126 def test_omnijar_formatter(self):
127 registry = FileRegistry()
128 formatter = OmniJarFormatter(registry, 'omni.foo')
129 formatter.add_base('app')
130 formatter.add('chrome/f/oo/bar', GeneratedFile('foobar'))
131 formatter.add('chrome/f/oo/baz', GeneratedFile('foobaz'))
132 formatter.add('chrome/f/oo/qux', GeneratedFile('fooqux'))
133 formatter.add_manifest(ManifestContent('chrome/f/oo', 'bar', 'bar'))
134 formatter.add_manifest(ManifestContent('chrome/f/oo', 'qux', 'qux'))
135 self.assertEqual(registry.paths(), ['omni.foo'])
136 self.assertEqual(registry['omni.foo'].paths(), [
137 'chrome/f/oo/bar',
138 'chrome/f/oo/baz',
139 'chrome/f/oo/qux',
140 'chrome.manifest',
141 'chrome/chrome.manifest',
142 'chrome/f/f.manifest',
143 'chrome/f/oo/oo.manifest',
144 ])
145 self.assertEqual(registry['omni.foo']['chrome.manifest']
146 .open().read(), 'manifest chrome/chrome.manifest\n')
147 self.assertEqual(registry['omni.foo']['chrome/chrome.manifest']
148 .open().read(), 'manifest f/f.manifest\n')
149 self.assertEqual(registry['omni.foo']['chrome/f/f.manifest']
150 .open().read(), 'manifest oo/oo.manifest\n')
151 self.assertEqual(registry['omni.foo']['chrome/f/oo/oo.manifest']
152 .open().read(), ''.join([
153 'content bar bar\n',
154 'content qux qux\n',
155 ]))
156 self.assertTrue(formatter.contains('chrome/f/oo/bar'))
157 self.assertFalse(formatter.contains('chrome/foo/bar'))
159 formatter.add_interfaces('components/foo.xpt', foo_xpt)
160 formatter.add_interfaces('components/bar.xpt', bar_xpt)
161 self.assertEqual(registry['omni.foo'].paths(), [
162 'chrome/f/oo/bar',
163 'chrome/f/oo/baz',
164 'chrome/f/oo/qux',
165 'chrome.manifest',
166 'chrome/chrome.manifest',
167 'chrome/f/f.manifest',
168 'chrome/f/oo/oo.manifest',
169 'components/components.manifest',
170 'components/interfaces.xpt',
171 ])
172 self.assertEqual(registry['omni.foo']['chrome.manifest']
173 .open().read(), ''.join([
174 'manifest chrome/chrome.manifest\n',
175 'manifest components/components.manifest\n'
176 ]))
177 self.assertEqual(registry['omni.foo']
178 ['components/components.manifest'].open().read(),
179 'interfaces interfaces.xpt\n')
181 registry['omni.foo'][
182 'components/interfaces.xpt'].copy(self.tmppath('interfaces.xpt'))
183 linked = read_interfaces(self.tmppath('interfaces.xpt'))
184 foo = read_interfaces(foo_xpt.open())
185 bar = read_interfaces(bar_xpt.open())
186 self.assertEqual(foo['foo'], linked['foo'])
187 self.assertEqual(bar['bar'], linked['bar'])
189 formatter.add('app/chrome/foo/baz', GeneratedFile('foobaz'))
190 formatter.add_manifest(ManifestContent('app/chrome', 'content',
191 'foo/'))
192 self.assertEqual(registry.paths(), ['omni.foo', 'app/omni.foo'])
193 self.assertEqual(registry['app/omni.foo'].paths(), [
194 'chrome/foo/baz',
195 'chrome.manifest',
196 'chrome/chrome.manifest',
197 ])
198 self.assertEqual(registry['app/omni.foo']['chrome.manifest']
199 .open().read(), 'manifest chrome/chrome.manifest\n')
200 self.assertEqual(registry['app/omni.foo']['chrome/chrome.manifest']
201 .open().read(), 'content content foo/\n')
203 formatter.add_manifest(ManifestBinaryComponent('components', 'foo.so'))
204 formatter.add('components/foo.so', GeneratedFile('foo'))
205 self.assertEqual(registry.paths(), [
206 'omni.foo', 'app/omni.foo', 'chrome.manifest',
207 'components/components.manifest', 'components/foo.so',
208 ])
209 self.assertEqual(registry['chrome.manifest'].open().read(),
210 'manifest components/components.manifest\n')
211 self.assertEqual(registry['components/components.manifest']
212 .open().read(), 'binary-component foo.so\n')
214 formatter.add_manifest(ManifestBinaryComponent('app/components',
215 'foo.so'))
216 formatter.add('app/components/foo.so', GeneratedFile('foo'))
217 self.assertEqual(registry.paths(), [
218 'omni.foo', 'app/omni.foo', 'chrome.manifest',
219 'components/components.manifest', 'components/foo.so',
220 'app/chrome.manifest', 'app/components/components.manifest',
221 'app/components/foo.so',
222 ])
223 self.assertEqual(registry['app/chrome.manifest'].open().read(),
224 'manifest components/components.manifest\n')
225 self.assertEqual(registry['app/components/components.manifest']
226 .open().read(), 'binary-component foo.so\n')
228 formatter.add('app/foo', GeneratedFile('foo'))
229 self.assertEqual(registry.paths(), [
230 'omni.foo', 'app/omni.foo', 'chrome.manifest',
231 'components/components.manifest', 'components/foo.so',
232 'app/chrome.manifest', 'app/components/components.manifest',
233 'app/components/foo.so', 'app/foo'
234 ])
236 def test_omnijar_is_resource(self):
237 registry = FileRegistry()
238 f = OmniJarFormatter(registry, 'omni.foo', non_resources=[
239 'defaults/messenger/mailViews.dat',
240 'defaults/foo/*',
241 '*/dummy',
242 ])
243 f.add_base('app')
244 for base in ['', 'app/']:
245 self.assertTrue(f.is_resource(base + 'chrome'))
246 self.assertTrue(
247 f.is_resource(base + 'chrome/foo/bar/baz.properties'))
248 self.assertFalse(f.is_resource(base + 'chrome/icons/foo.png'))
249 self.assertTrue(f.is_resource(base + 'components/foo.js'))
250 self.assertFalse(f.is_resource(base + 'components/foo.so'))
251 self.assertTrue(f.is_resource(base + 'res/foo.css'))
252 self.assertFalse(f.is_resource(base + 'res/cursors/foo.png'))
253 self.assertFalse(f.is_resource(base + 'res/MainMenu.nib/'))
254 self.assertTrue(f.is_resource(base + 'defaults/pref/foo.js'))
255 self.assertFalse(
256 f.is_resource(base + 'defaults/pref/channel-prefs.js'))
257 self.assertTrue(
258 f.is_resource(base + 'defaults/preferences/foo.js'))
259 self.assertFalse(
260 f.is_resource(base + 'defaults/preferences/channel-prefs.js'))
261 self.assertTrue(f.is_resource(base + 'modules/foo.jsm'))
262 self.assertTrue(f.is_resource(base + 'greprefs.js'))
263 self.assertTrue(f.is_resource(base + 'hyphenation/foo'))
264 self.assertTrue(f.is_resource(base + 'update.locale'))
265 self.assertTrue(
266 f.is_resource(base + 'jsloader/resource/gre/modules/foo.jsm'))
267 self.assertFalse(f.is_resource(base + 'foo'))
268 self.assertFalse(f.is_resource('foo/bar/greprefs.js'))
269 self.assertTrue(f.is_resource(base + 'defaults/messenger/foo.dat'))
270 self.assertFalse(
271 f.is_resource(base + 'defaults/messenger/mailViews.dat'))
272 self.assertTrue(f.is_resource(base + 'defaults/pref/foo.js'))
273 self.assertFalse(f.is_resource(base + 'defaults/foo/bar.dat'))
274 self.assertFalse(f.is_resource(base + 'defaults/foo/bar/baz.dat'))
275 self.assertTrue(f.is_resource(base + 'chrome/foo/bar/baz/dummy_'))
276 self.assertFalse(f.is_resource(base + 'chrome/foo/bar/baz/dummy'))
277 self.assertTrue(f.is_resource(base + 'chrome/foo/bar/dummy_'))
278 self.assertFalse(f.is_resource(base + 'chrome/foo/bar/dummy'))
281 if __name__ == '__main__':
282 mozunit.main()