python/mozbuild/mozpack/test/test_packager_formats.py

changeset 0
6474c204b198
     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()

mercurial