1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/python/mozbuild/mozpack/test/test_packager_formats.py Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,282 @@ 1.4 +# This Source Code Form is subject to the terms of the Mozilla Public 1.5 +# License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 +# file, You can obtain one at http://mozilla.org/MPL/2.0/. 1.7 + 1.8 +import mozunit 1.9 +from mozpack.packager.formats import ( 1.10 + FlatFormatter, 1.11 + JarFormatter, 1.12 + OmniJarFormatter, 1.13 +) 1.14 +from mozpack.copier import FileRegistry 1.15 +from mozpack.files import GeneratedFile 1.16 +from mozpack.chrome.manifest import ( 1.17 + ManifestContent, 1.18 + ManifestResource, 1.19 + ManifestBinaryComponent, 1.20 +) 1.21 +from mozpack.test.test_files import ( 1.22 + TestWithTmpDir, 1.23 + foo_xpt, 1.24 + bar_xpt, 1.25 + read_interfaces, 1.26 +) 1.27 + 1.28 + 1.29 +class TestFlatFormatter(TestWithTmpDir): 1.30 + def test_flat_formatter(self): 1.31 + registry = FileRegistry() 1.32 + formatter = FlatFormatter(registry) 1.33 + formatter.add_base('app') 1.34 + formatter.add('f/oo/bar', GeneratedFile('foobar')) 1.35 + formatter.add('f/oo/baz', GeneratedFile('foobaz')) 1.36 + formatter.add('f/oo/qux', GeneratedFile('fooqux')) 1.37 + formatter.add_manifest(ManifestContent('f/oo', 'bar', 'bar')) 1.38 + formatter.add_manifest(ManifestContent('f/oo', 'qux', 'qux')) 1.39 + self.assertEqual(registry.paths(), 1.40 + ['f/oo/bar', 'f/oo/baz', 'f/oo/qux', 1.41 + 'chrome.manifest', 'f/f.manifest', 1.42 + 'f/oo/oo.manifest']) 1.43 + self.assertEqual(registry['chrome.manifest'].open().read(), 1.44 + 'manifest f/f.manifest\n') 1.45 + self.assertEqual(registry['f/f.manifest'].open().read(), 1.46 + 'manifest oo/oo.manifest\n') 1.47 + self.assertEqual(registry['f/oo/oo.manifest'].open().read(), ''.join([ 1.48 + 'content bar bar\n', 1.49 + 'content qux qux\n', 1.50 + ])) 1.51 + 1.52 + formatter.add_interfaces('components/foo.xpt', foo_xpt) 1.53 + formatter.add_interfaces('components/bar.xpt', bar_xpt) 1.54 + self.assertEqual(registry.paths(), 1.55 + ['f/oo/bar', 'f/oo/baz', 'f/oo/qux', 1.56 + 'chrome.manifest', 'f/f.manifest', 1.57 + 'f/oo/oo.manifest', 'components/components.manifest', 1.58 + 'components/interfaces.xpt']) 1.59 + self.assertEqual(registry['chrome.manifest'].open().read(), ''.join([ 1.60 + 'manifest f/f.manifest\n', 1.61 + 'manifest components/components.manifest\n', 1.62 + ])) 1.63 + self.assertEqual( 1.64 + registry['components/components.manifest'].open().read(), 1.65 + 'interfaces interfaces.xpt\n' 1.66 + ) 1.67 + 1.68 + registry['components/interfaces.xpt'] \ 1.69 + .copy(self.tmppath('interfaces.xpt')) 1.70 + linked = read_interfaces(self.tmppath('interfaces.xpt')) 1.71 + foo = read_interfaces(foo_xpt.open()) 1.72 + bar = read_interfaces(bar_xpt.open()) 1.73 + self.assertEqual(foo['foo'], linked['foo']) 1.74 + self.assertEqual(bar['bar'], linked['bar']) 1.75 + 1.76 + formatter.add_manifest(ManifestContent('app/chrome', 'content', 1.77 + 'foo/')) 1.78 + self.assertEqual(registry['chrome.manifest'].open().read(), ''.join([ 1.79 + 'manifest f/f.manifest\n', 1.80 + 'manifest components/components.manifest\n', 1.81 + ])) 1.82 + self.assertEqual(registry['app/chrome.manifest'].open().read(), 1.83 + 'manifest chrome/chrome.manifest\n') 1.84 + self.assertEqual(registry['app/chrome/chrome.manifest'].open().read(), 1.85 + 'content content foo/\n') 1.86 + 1.87 + def test_bases(self): 1.88 + formatter = FlatFormatter(FileRegistry()) 1.89 + formatter.add_base('') 1.90 + formatter.add_base('browser') 1.91 + formatter.add_base('webapprt') 1.92 + self.assertEqual(formatter._get_base('platform.ini'), '') 1.93 + self.assertEqual(formatter._get_base('browser/application.ini'), 1.94 + 'browser') 1.95 + self.assertEqual(formatter._get_base('webapprt/webapprt.ini'), 1.96 + 'webapprt') 1.97 + 1.98 + 1.99 +class TestJarFormatter(TestWithTmpDir): 1.100 + def test_jar_formatter(self): 1.101 + registry = FileRegistry() 1.102 + formatter = JarFormatter(registry) 1.103 + formatter.add_manifest(ManifestContent('f', 'oo', 'oo/')) 1.104 + formatter.add_manifest(ManifestContent('f', 'bar', 'oo/bar/')) 1.105 + formatter.add('f/oo/bar/baz', GeneratedFile('foobarbaz')) 1.106 + formatter.add('f/oo/qux', GeneratedFile('fooqux')) 1.107 + 1.108 + self.assertEqual(registry.paths(), 1.109 + ['chrome.manifest', 'f/f.manifest', 'f/oo.jar']) 1.110 + self.assertEqual(registry['chrome.manifest'].open().read(), 1.111 + 'manifest f/f.manifest\n') 1.112 + self.assertEqual(registry['f/f.manifest'].open().read(), ''.join([ 1.113 + 'content oo jar:oo.jar!/\n', 1.114 + 'content bar jar:oo.jar!/bar/\n', 1.115 + ])) 1.116 + self.assertTrue(formatter.contains('f/oo/bar/baz')) 1.117 + self.assertFalse(formatter.contains('foo/bar/baz')) 1.118 + self.assertEqual(registry['f/oo.jar'].paths(), ['bar/baz', 'qux']) 1.119 + 1.120 + formatter.add_manifest(ManifestResource('f', 'foo', 'resource://bar/')) 1.121 + self.assertEqual(registry['f/f.manifest'].open().read(), ''.join([ 1.122 + 'content oo jar:oo.jar!/\n', 1.123 + 'content bar jar:oo.jar!/bar/\n', 1.124 + 'resource foo resource://bar/\n', 1.125 + ])) 1.126 + 1.127 + 1.128 +class TestOmniJarFormatter(TestWithTmpDir): 1.129 + def test_omnijar_formatter(self): 1.130 + registry = FileRegistry() 1.131 + formatter = OmniJarFormatter(registry, 'omni.foo') 1.132 + formatter.add_base('app') 1.133 + formatter.add('chrome/f/oo/bar', GeneratedFile('foobar')) 1.134 + formatter.add('chrome/f/oo/baz', GeneratedFile('foobaz')) 1.135 + formatter.add('chrome/f/oo/qux', GeneratedFile('fooqux')) 1.136 + formatter.add_manifest(ManifestContent('chrome/f/oo', 'bar', 'bar')) 1.137 + formatter.add_manifest(ManifestContent('chrome/f/oo', 'qux', 'qux')) 1.138 + self.assertEqual(registry.paths(), ['omni.foo']) 1.139 + self.assertEqual(registry['omni.foo'].paths(), [ 1.140 + 'chrome/f/oo/bar', 1.141 + 'chrome/f/oo/baz', 1.142 + 'chrome/f/oo/qux', 1.143 + 'chrome.manifest', 1.144 + 'chrome/chrome.manifest', 1.145 + 'chrome/f/f.manifest', 1.146 + 'chrome/f/oo/oo.manifest', 1.147 + ]) 1.148 + self.assertEqual(registry['omni.foo']['chrome.manifest'] 1.149 + .open().read(), 'manifest chrome/chrome.manifest\n') 1.150 + self.assertEqual(registry['omni.foo']['chrome/chrome.manifest'] 1.151 + .open().read(), 'manifest f/f.manifest\n') 1.152 + self.assertEqual(registry['omni.foo']['chrome/f/f.manifest'] 1.153 + .open().read(), 'manifest oo/oo.manifest\n') 1.154 + self.assertEqual(registry['omni.foo']['chrome/f/oo/oo.manifest'] 1.155 + .open().read(), ''.join([ 1.156 + 'content bar bar\n', 1.157 + 'content qux qux\n', 1.158 + ])) 1.159 + self.assertTrue(formatter.contains('chrome/f/oo/bar')) 1.160 + self.assertFalse(formatter.contains('chrome/foo/bar')) 1.161 + 1.162 + formatter.add_interfaces('components/foo.xpt', foo_xpt) 1.163 + formatter.add_interfaces('components/bar.xpt', bar_xpt) 1.164 + self.assertEqual(registry['omni.foo'].paths(), [ 1.165 + 'chrome/f/oo/bar', 1.166 + 'chrome/f/oo/baz', 1.167 + 'chrome/f/oo/qux', 1.168 + 'chrome.manifest', 1.169 + 'chrome/chrome.manifest', 1.170 + 'chrome/f/f.manifest', 1.171 + 'chrome/f/oo/oo.manifest', 1.172 + 'components/components.manifest', 1.173 + 'components/interfaces.xpt', 1.174 + ]) 1.175 + self.assertEqual(registry['omni.foo']['chrome.manifest'] 1.176 + .open().read(), ''.join([ 1.177 + 'manifest chrome/chrome.manifest\n', 1.178 + 'manifest components/components.manifest\n' 1.179 + ])) 1.180 + self.assertEqual(registry['omni.foo'] 1.181 + ['components/components.manifest'].open().read(), 1.182 + 'interfaces interfaces.xpt\n') 1.183 + 1.184 + registry['omni.foo'][ 1.185 + 'components/interfaces.xpt'].copy(self.tmppath('interfaces.xpt')) 1.186 + linked = read_interfaces(self.tmppath('interfaces.xpt')) 1.187 + foo = read_interfaces(foo_xpt.open()) 1.188 + bar = read_interfaces(bar_xpt.open()) 1.189 + self.assertEqual(foo['foo'], linked['foo']) 1.190 + self.assertEqual(bar['bar'], linked['bar']) 1.191 + 1.192 + formatter.add('app/chrome/foo/baz', GeneratedFile('foobaz')) 1.193 + formatter.add_manifest(ManifestContent('app/chrome', 'content', 1.194 + 'foo/')) 1.195 + self.assertEqual(registry.paths(), ['omni.foo', 'app/omni.foo']) 1.196 + self.assertEqual(registry['app/omni.foo'].paths(), [ 1.197 + 'chrome/foo/baz', 1.198 + 'chrome.manifest', 1.199 + 'chrome/chrome.manifest', 1.200 + ]) 1.201 + self.assertEqual(registry['app/omni.foo']['chrome.manifest'] 1.202 + .open().read(), 'manifest chrome/chrome.manifest\n') 1.203 + self.assertEqual(registry['app/omni.foo']['chrome/chrome.manifest'] 1.204 + .open().read(), 'content content foo/\n') 1.205 + 1.206 + formatter.add_manifest(ManifestBinaryComponent('components', 'foo.so')) 1.207 + formatter.add('components/foo.so', GeneratedFile('foo')) 1.208 + self.assertEqual(registry.paths(), [ 1.209 + 'omni.foo', 'app/omni.foo', 'chrome.manifest', 1.210 + 'components/components.manifest', 'components/foo.so', 1.211 + ]) 1.212 + self.assertEqual(registry['chrome.manifest'].open().read(), 1.213 + 'manifest components/components.manifest\n') 1.214 + self.assertEqual(registry['components/components.manifest'] 1.215 + .open().read(), 'binary-component foo.so\n') 1.216 + 1.217 + formatter.add_manifest(ManifestBinaryComponent('app/components', 1.218 + 'foo.so')) 1.219 + formatter.add('app/components/foo.so', GeneratedFile('foo')) 1.220 + self.assertEqual(registry.paths(), [ 1.221 + 'omni.foo', 'app/omni.foo', 'chrome.manifest', 1.222 + 'components/components.manifest', 'components/foo.so', 1.223 + 'app/chrome.manifest', 'app/components/components.manifest', 1.224 + 'app/components/foo.so', 1.225 + ]) 1.226 + self.assertEqual(registry['app/chrome.manifest'].open().read(), 1.227 + 'manifest components/components.manifest\n') 1.228 + self.assertEqual(registry['app/components/components.manifest'] 1.229 + .open().read(), 'binary-component foo.so\n') 1.230 + 1.231 + formatter.add('app/foo', GeneratedFile('foo')) 1.232 + self.assertEqual(registry.paths(), [ 1.233 + 'omni.foo', 'app/omni.foo', 'chrome.manifest', 1.234 + 'components/components.manifest', 'components/foo.so', 1.235 + 'app/chrome.manifest', 'app/components/components.manifest', 1.236 + 'app/components/foo.so', 'app/foo' 1.237 + ]) 1.238 + 1.239 + def test_omnijar_is_resource(self): 1.240 + registry = FileRegistry() 1.241 + f = OmniJarFormatter(registry, 'omni.foo', non_resources=[ 1.242 + 'defaults/messenger/mailViews.dat', 1.243 + 'defaults/foo/*', 1.244 + '*/dummy', 1.245 + ]) 1.246 + f.add_base('app') 1.247 + for base in ['', 'app/']: 1.248 + self.assertTrue(f.is_resource(base + 'chrome')) 1.249 + self.assertTrue( 1.250 + f.is_resource(base + 'chrome/foo/bar/baz.properties')) 1.251 + self.assertFalse(f.is_resource(base + 'chrome/icons/foo.png')) 1.252 + self.assertTrue(f.is_resource(base + 'components/foo.js')) 1.253 + self.assertFalse(f.is_resource(base + 'components/foo.so')) 1.254 + self.assertTrue(f.is_resource(base + 'res/foo.css')) 1.255 + self.assertFalse(f.is_resource(base + 'res/cursors/foo.png')) 1.256 + self.assertFalse(f.is_resource(base + 'res/MainMenu.nib/')) 1.257 + self.assertTrue(f.is_resource(base + 'defaults/pref/foo.js')) 1.258 + self.assertFalse( 1.259 + f.is_resource(base + 'defaults/pref/channel-prefs.js')) 1.260 + self.assertTrue( 1.261 + f.is_resource(base + 'defaults/preferences/foo.js')) 1.262 + self.assertFalse( 1.263 + f.is_resource(base + 'defaults/preferences/channel-prefs.js')) 1.264 + self.assertTrue(f.is_resource(base + 'modules/foo.jsm')) 1.265 + self.assertTrue(f.is_resource(base + 'greprefs.js')) 1.266 + self.assertTrue(f.is_resource(base + 'hyphenation/foo')) 1.267 + self.assertTrue(f.is_resource(base + 'update.locale')) 1.268 + self.assertTrue( 1.269 + f.is_resource(base + 'jsloader/resource/gre/modules/foo.jsm')) 1.270 + self.assertFalse(f.is_resource(base + 'foo')) 1.271 + self.assertFalse(f.is_resource('foo/bar/greprefs.js')) 1.272 + self.assertTrue(f.is_resource(base + 'defaults/messenger/foo.dat')) 1.273 + self.assertFalse( 1.274 + f.is_resource(base + 'defaults/messenger/mailViews.dat')) 1.275 + self.assertTrue(f.is_resource(base + 'defaults/pref/foo.js')) 1.276 + self.assertFalse(f.is_resource(base + 'defaults/foo/bar.dat')) 1.277 + self.assertFalse(f.is_resource(base + 'defaults/foo/bar/baz.dat')) 1.278 + self.assertTrue(f.is_resource(base + 'chrome/foo/bar/baz/dummy_')) 1.279 + self.assertFalse(f.is_resource(base + 'chrome/foo/bar/baz/dummy')) 1.280 + self.assertTrue(f.is_resource(base + 'chrome/foo/bar/dummy_')) 1.281 + self.assertFalse(f.is_resource(base + 'chrome/foo/bar/dummy')) 1.282 + 1.283 + 1.284 +if __name__ == '__main__': 1.285 + mozunit.main()