python/mozbuild/mozpack/test/test_packager_formats.py

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

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()

mercurial