|
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 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 ) |
|
24 |
|
25 |
|
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 ])) |
|
48 |
|
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 ) |
|
64 |
|
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']) |
|
72 |
|
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') |
|
83 |
|
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') |
|
94 |
|
95 |
|
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')) |
|
104 |
|
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']) |
|
116 |
|
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 ])) |
|
123 |
|
124 |
|
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')) |
|
158 |
|
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') |
|
180 |
|
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']) |
|
188 |
|
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') |
|
202 |
|
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') |
|
213 |
|
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') |
|
227 |
|
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 ]) |
|
235 |
|
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')) |
|
279 |
|
280 |
|
281 if __name__ == '__main__': |
|
282 mozunit.main() |