예제 #1
0
 def test_errors_context(self):
     with self.assertRaises(AccumulatedErrors):
         with errors.accumulate():
             self.assertEqual(errors.get_context(), None)
             with errors.context('foo', 1):
                 self.assertEqual(errors.get_context(), ('foo', 1))
                 errors.error('a')
                 with errors.context('bar', 2):
                     self.assertEqual(errors.get_context(), ('bar', 2))
                     errors.error('b')
                 self.assertEqual(errors.get_context(), ('foo', 1))
                 errors.error('c')
     self.assertEqual(self.get_output(), [
         'Error: foo:1: a',
         'Error: bar:2: b',
         'Error: foo:1: c',
     ])
예제 #2
0
 def execute(self):
     while True:
         try:
             context, function, args = self.popleft()
         except IndexError:
             return
         if context:
             with errors.context(context[0], context[1]):
                 function(*args)
         else:
             function(*args)
예제 #3
0
 def execute(self):
     while True:
         try:
             context, function, args = self.popleft()
         except IndexError:
             return
         if context:
             with errors.context(context[0], context[1]):
                 function(*args)
         else:
             function(*args)
예제 #4
0
 def test_errors_context(self):
     with self.assertRaises(AccumulatedErrors):
         with errors.accumulate():
             self.assertEqual(errors.get_context(), None)
             with errors.context("foo", 1):
                 self.assertEqual(errors.get_context(), ("foo", 1))
                 errors.error("a")
                 with errors.context("bar", 2):
                     self.assertEqual(errors.get_context(), ("bar", 2))
                     errors.error("b")
                 self.assertEqual(errors.get_context(), ("foo", 1))
                 errors.error("c")
     self.assertEqual(
         self.get_output(),
         [
             "Error: foo:1: a",
             "Error: bar:2: b",
             "Error: foo:1: c",
         ],
     )
예제 #5
0
def parse_manifest(root, path, fileobj=None):
    '''
    Parse a manifest file.
    '''
    base = mozpath.dirname(path)
    if root:
        path = os.path.normpath(os.path.abspath(os.path.join(root, path)))
    if not fileobj:
        fileobj = open(path)
    linenum = 0
    for line in fileobj:
        linenum += 1
        with errors.context(path, linenum):
            e = parse_manifest_line(base, line)
            if e:
                yield e
예제 #6
0
def parse_manifest(root, path, fileobj=None):
    '''
    Parse a manifest file.
    '''
    base = mozpath.dirname(path)
    if root:
        path = os.path.normpath(os.path.abspath(os.path.join(root, path)))
    if not fileobj:
        fileobj = open(path)
    linenum = 0
    for line in fileobj:
        linenum += 1
        with errors.context(path, linenum):
            e = parse_manifest_line(base, line)
            if e:
                yield e
예제 #7
0
def parse_manifest(root, path, fileobj=None):
    '''
    Parse a manifest file.
    '''
    base = mozpath.dirname(path)
    if root:
        path = os.path.normpath(os.path.abspath(os.path.join(root, path)))
    if not fileobj:
        try:
            fileobj = open(path)
        except Exception as e:
            print("File " + path + " can not be open.")
            return
    linenum = 0
    for line in fileobj:
        linenum += 1
        with errors.context(path, linenum):
            e = parse_manifest_line(base, line)
            if e:
                yield e
예제 #8
0
    def test_simple_packager(self):
        class GeneratedFileWithPath(GeneratedFile):
            def __init__(self, path, content):
                GeneratedFile.__init__(self, content)
                self.path = path

        formatter = MockFormatter()
        packager = SimplePackager(formatter)
        curdir = os.path.abspath(os.curdir)
        file = GeneratedFileWithPath(
            os.path.join(curdir, 'foo', 'bar.manifest'),
            'resource bar bar/\ncontent bar bar/')
        with errors.context('manifest', 1):
            packager.add('foo/bar.manifest', file)

        file = GeneratedFileWithPath(
            os.path.join(curdir, 'foo', 'baz.manifest'), 'resource baz baz/')
        with errors.context('manifest', 2):
            packager.add('bar/baz.manifest', file)

        with errors.context('manifest', 3):
            packager.add('qux/qux.manifest',
                         GeneratedFile('resource qux qux/'))
        bar_xpt = GeneratedFile('bar.xpt')
        qux_xpt = GeneratedFile('qux.xpt')
        foo_html = GeneratedFile('foo_html')
        bar_html = GeneratedFile('bar_html')
        with errors.context('manifest', 4):
            packager.add('foo/bar.xpt', bar_xpt)
        with errors.context('manifest', 5):
            packager.add('foo/bar/foo.html', foo_html)
            packager.add('foo/bar/bar.html', bar_html)

        file = GeneratedFileWithPath(
            os.path.join(curdir, 'foo.manifest'), ''.join([
                'manifest foo/bar.manifest\n',
                'manifest bar/baz.manifest\n',
            ]))
        with errors.context('manifest', 6):
            packager.add('foo.manifest', file)
        with errors.context('manifest', 7):
            packager.add('foo/qux.xpt', qux_xpt)

        self.assertEqual(formatter.log, [])

        with errors.context('dummy', 1):
            packager.close()
        self.maxDiff = None
        self.assertEqual(formatter.log, [
            (('dummy', 1), 'add_base', 'qux'),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 1), 'add_manifest',
             ManifestResource('foo', 'bar', 'bar/')),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 2), 'add_manifest',
             ManifestContent('foo', 'bar', 'bar/')),
            (('bar/baz.manifest', 1), 'add_manifest',
             ManifestResource('bar', 'baz', 'baz/')),
            (('qux/qux.manifest', 1), 'add_manifest',
             ManifestResource('qux', 'qux', 'qux/')),
            (('manifest', 4), 'add_interfaces', 'foo/bar.xpt', bar_xpt),
            (('manifest', 7), 'add_interfaces', 'foo/qux.xpt', qux_xpt),
            (('manifest', 5), 'add', 'foo/bar/foo.html', foo_html),
            (('manifest', 5), 'add', 'foo/bar/bar.html', bar_html),
        ])

        self.assertEqual(packager.get_bases(), set(['', 'qux']))
예제 #9
0
 def write(self, str):
     with errors.context(self._pp.context['FILE'],
                         self._pp.context['LINE']):
         self._parser.handle_line(str)
예제 #10
0
    def test_simple_packager(self):
        class GeneratedFileWithPath(GeneratedFile):
            def __init__(self, path, content):
                GeneratedFile.__init__(self, content)
                self.path = path

        formatter = MockFormatter()
        packager = SimplePackager(formatter)
        curdir = os.path.abspath(os.curdir)
        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'bar.manifest'),
                                     'resource bar bar/\ncontent bar bar/')
        with errors.context('manifest', 1):
            packager.add('foo/bar.manifest', file)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'baz.manifest'),
                                     'resource baz baz/')
        with errors.context('manifest', 2):
            packager.add('bar/baz.manifest', file)

        with errors.context('manifest', 3):
            packager.add('qux/qux.manifest',
                         GeneratedFile('resource qux qux/'))
        bar_xpt = GeneratedFile('bar.xpt')
        qux_xpt = GeneratedFile('qux.xpt')
        foo_html = GeneratedFile('foo_html')
        bar_html = GeneratedFile('bar_html')
        with errors.context('manifest', 4):
            packager.add('foo/bar.xpt', bar_xpt)
        with errors.context('manifest', 5):
            packager.add('foo/bar/foo.html', foo_html)
            packager.add('foo/bar/bar.html', bar_html)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo.manifest'),
                                     ''.join([
                                         'manifest foo/bar.manifest\n',
                                         'manifest bar/baz.manifest\n',
                                     ]))
        with errors.context('manifest', 6):
            packager.add('foo.manifest', file)
        with errors.context('manifest', 7):
            packager.add('foo/qux.xpt', qux_xpt)

        file = GeneratedFileWithPath(os.path.join(curdir, 'addon',
                                                  'chrome.manifest'),
                                     'resource hoge hoge/')
        with errors.context('manifest', 8):
            packager.add('addon/chrome.manifest', file)

        install_rdf = GeneratedFile('<RDF></RDF>')
        with errors.context('manifest', 9):
            packager.add('addon/install.rdf', install_rdf)

        self.assertEqual(formatter.log, [])

        with errors.context('dummy', 1):
            packager.close()
        self.maxDiff = None
        # The formatter is expected to reorder the manifest entries so that
        # chrome entries appear before the others.
        self.assertEqual(formatter.log, [
            (('dummy', 1), 'add_base', 'qux', False),
            (('dummy', 1), 'add_base', 'addon', True),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 2),
             'add_manifest', ManifestContent('foo', 'bar', 'bar/')),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 1),
             'add_manifest', ManifestResource('foo', 'bar', 'bar/')),
            (('bar/baz.manifest', 1),
             'add_manifest', ManifestResource('bar', 'baz', 'baz/')),
            (('qux/qux.manifest', 1),
             'add_manifest', ManifestResource('qux', 'qux', 'qux/')),
            (('manifest', 4), 'add_interfaces', 'foo/bar.xpt', bar_xpt),
            (('manifest', 7), 'add_interfaces', 'foo/qux.xpt', qux_xpt),
            ((os.path.join(curdir, 'addon', 'chrome.manifest'), 1),
             'add_manifest', ManifestResource('addon', 'hoge', 'hoge/')),
            (('manifest', 5), 'add', 'foo/bar/foo.html', foo_html),
            (('manifest', 5), 'add', 'foo/bar/bar.html', bar_html),
            (('manifest', 9), 'add', 'addon/install.rdf', install_rdf),
        ])

        self.assertEqual(packager.get_bases(), set(['', 'addon', 'qux']))
        self.assertEqual(packager.get_bases(addons=False), set(['', 'qux']))
예제 #11
0
 def write(self, str):
     file = os.path.normpath(os.path.abspath(self._pp.context['FILE']))
     with errors.context(file, self._pp.context['LINE']):
         self._parser.handle_line(str)
예제 #12
0
    def test_simple_packager(self):
        class GeneratedFileWithPath(GeneratedFile):
            def __init__(self, path, content):
                GeneratedFile.__init__(self, content)
                self.path = path

        formatter = MockFormatter()
        packager = SimplePackager(formatter)
        curdir = os.path.abspath(os.curdir)
        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'bar.manifest'),
                                     'resource bar bar/\ncontent bar bar/')
        with errors.context('manifest', 1):
            packager.add('foo/bar.manifest', file)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'baz.manifest'),
                                     'resource baz baz/')
        with errors.context('manifest', 2):
            packager.add('bar/baz.manifest', file)

        with errors.context('manifest', 3):
            packager.add('qux/qux.manifest',
                         GeneratedFile(''.join([
                            'resource qux qux/\n',
                            'binary-component qux.so\n',
                         ])))
        bar_xpt = GeneratedFile('bar.xpt')
        qux_xpt = GeneratedFile('qux.xpt')
        foo_html = GeneratedFile('foo_html')
        bar_html = GeneratedFile('bar_html')
        with errors.context('manifest', 4):
            packager.add('foo/bar.xpt', bar_xpt)
        with errors.context('manifest', 5):
            packager.add('foo/bar/foo.html', foo_html)
            packager.add('foo/bar/bar.html', bar_html)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo.manifest'),
                                     ''.join([
                                         'manifest foo/bar.manifest\n',
                                         'manifest bar/baz.manifest\n',
                                     ]))
        with errors.context('manifest', 6):
            packager.add('foo.manifest', file)
        with errors.context('manifest', 7):
            packager.add('foo/qux.xpt', qux_xpt)

        file = GeneratedFileWithPath(os.path.join(curdir, 'addon',
                                                  'chrome.manifest'),
                                     'resource hoge hoge/')
        with errors.context('manifest', 8):
            packager.add('addon/chrome.manifest', file)

        install_rdf = GeneratedFile('<RDF></RDF>')
        with errors.context('manifest', 9):
            packager.add('addon/install.rdf', install_rdf)

        with errors.context('manifest', 10):
            packager.add('addon2/install.rdf', install_rdf)
            packager.add('addon2/chrome.manifest',
                         GeneratedFile('binary-component addon2.so'))

        with errors.context('manifest', 11):
            packager.add('addon3/install.rdf', install_rdf)
            packager.add('addon3/chrome.manifest', GeneratedFile(
                'manifest components/components.manifest'))
            packager.add('addon3/components/components.manifest',
                         GeneratedFile('binary-component addon3.so'))

        with errors.context('manifest', 12):
            install_rdf_addon4 = GeneratedFile(
                '<RDF>\n<...>\n<em:unpack>true</em:unpack>\n<...>\n</RDF>')
            packager.add('addon4/install.rdf', install_rdf_addon4)

        with errors.context('manifest', 13):
            install_rdf_addon5 = GeneratedFile(
                '<RDF>\n<...>\n<em:unpack>false</em:unpack>\n<...>\n</RDF>')
            packager.add('addon5/install.rdf', install_rdf_addon5)

        with errors.context('manifest', 14):
            install_rdf_addon6 = GeneratedFile(
                '<RDF>\n<... em:unpack=true>\n<...>\n</RDF>')
            packager.add('addon6/install.rdf', install_rdf_addon6)

        with errors.context('manifest', 15):
            install_rdf_addon7 = GeneratedFile(
                '<RDF>\n<... em:unpack=false>\n<...>\n</RDF>')
            packager.add('addon7/install.rdf', install_rdf_addon7)

        with errors.context('manifest', 16):
            install_rdf_addon8 = GeneratedFile(
                '<RDF>\n<... em:unpack="true">\n<...>\n</RDF>')
            packager.add('addon8/install.rdf', install_rdf_addon8)

        with errors.context('manifest', 17):
            install_rdf_addon9 = GeneratedFile(
                '<RDF>\n<... em:unpack="false">\n<...>\n</RDF>')
            packager.add('addon9/install.rdf', install_rdf_addon9)

        with errors.context('manifest', 18):
            install_rdf_addon10 = GeneratedFile(
                '<RDF>\n<... em:unpack=\'true\'>\n<...>\n</RDF>')
            packager.add('addon10/install.rdf', install_rdf_addon10)

        with errors.context('manifest', 19):
            install_rdf_addon11 = GeneratedFile(
                '<RDF>\n<... em:unpack=\'false\'>\n<...>\n</RDF>')
            packager.add('addon11/install.rdf', install_rdf_addon11)

        we_manifest = GeneratedFile(
            '{"manifest_version": 2, "name": "Test WebExtension", "version": "1.0"}')
        # hybrid and hybrid2 are both bootstrapped extensions with
        # embedded webextensions, they differ in the order in which
        # the manifests are added to the packager.
        with errors.context('manifest', 20):
            packager.add('hybrid/install.rdf', install_rdf)

        with errors.context('manifest', 21):
            packager.add('hybrid/webextension/manifest.json', we_manifest)

        with errors.context('manifest', 22):
            packager.add('hybrid2/webextension/manifest.json', we_manifest)

        with errors.context('manifest', 23):
            packager.add('hybrid2/install.rdf', install_rdf)

        with errors.context('manifest', 24):
            packager.add('webextension/manifest.json', we_manifest)

        non_we_manifest = GeneratedFile('{"not a webextension": true}')
        with errors.context('manifest', 25):
            packager.add('nonwebextension/manifest.json', non_we_manifest)

        self.assertEqual(formatter.log, [])

        with errors.context('dummy', 1):
            packager.close()
        self.maxDiff = None
        # The formatter is expected to reorder the manifest entries so that
        # chrome entries appear before the others.
        self.assertEqual(formatter.log, [
            (('dummy', 1), 'add_base', '', False),
            (('dummy', 1), 'add_base', 'addon', True),
            (('dummy', 1), 'add_base', 'addon10', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon11', True),
            (('dummy', 1), 'add_base', 'addon2', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon3', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon4', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon5', True),
            (('dummy', 1), 'add_base', 'addon6', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon7', True),
            (('dummy', 1), 'add_base', 'addon8', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon9', True),
            (('dummy', 1), 'add_base', 'hybrid', True),
            (('dummy', 1), 'add_base', 'hybrid2', True),
            (('dummy', 1), 'add_base', 'qux', False),
            (('dummy', 1), 'add_base', 'webextension', True),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 2),
             'add_manifest', ManifestContent('foo', 'bar', 'bar/')),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 1),
             'add_manifest', ManifestResource('foo', 'bar', 'bar/')),
            (('bar/baz.manifest', 1),
             'add_manifest', ManifestResource('bar', 'baz', 'baz/')),
            (('qux/qux.manifest', 1),
             'add_manifest', ManifestResource('qux', 'qux', 'qux/')),
            (('qux/qux.manifest', 2),
             'add_manifest', ManifestBinaryComponent('qux', 'qux.so')),
            (('manifest', 4), 'add_interfaces', 'foo/bar.xpt', bar_xpt),
            (('manifest', 7), 'add_interfaces', 'foo/qux.xpt', qux_xpt),
            ((os.path.join(curdir, 'addon', 'chrome.manifest'), 1),
             'add_manifest', ManifestResource('addon', 'hoge', 'hoge/')),
            (('addon2/chrome.manifest', 1), 'add_manifest',
             ManifestBinaryComponent('addon2', 'addon2.so')),
            (('addon3/components/components.manifest', 1), 'add_manifest',
             ManifestBinaryComponent('addon3/components', 'addon3.so')),
            (('manifest', 5), 'add', 'foo/bar/foo.html', foo_html),
            (('manifest', 5), 'add', 'foo/bar/bar.html', bar_html),
            (('manifest', 9), 'add', 'addon/install.rdf', install_rdf),
            (('manifest', 10), 'add', 'addon2/install.rdf', install_rdf),
            (('manifest', 11), 'add', 'addon3/install.rdf', install_rdf),
            (('manifest', 12), 'add', 'addon4/install.rdf',
             install_rdf_addon4),
            (('manifest', 13), 'add', 'addon5/install.rdf',
             install_rdf_addon5),
            (('manifest', 14), 'add', 'addon6/install.rdf',
             install_rdf_addon6),
            (('manifest', 15), 'add', 'addon7/install.rdf',
             install_rdf_addon7),
            (('manifest', 16), 'add', 'addon8/install.rdf',
             install_rdf_addon8),
            (('manifest', 17), 'add', 'addon9/install.rdf',
             install_rdf_addon9),
            (('manifest', 18), 'add', 'addon10/install.rdf',
             install_rdf_addon10),
            (('manifest', 19), 'add', 'addon11/install.rdf',
             install_rdf_addon11),
            (('manifest', 20), 'add', 'hybrid/install.rdf', install_rdf),
            (('manifest', 21),
             'add', 'hybrid/webextension/manifest.json', we_manifest),
            (('manifest', 22),
             'add', 'hybrid2/webextension/manifest.json', we_manifest),
            (('manifest', 23), 'add', 'hybrid2/install.rdf', install_rdf),
            (('manifest', 24),
             'add', 'webextension/manifest.json', we_manifest),
            (('manifest', 25),
             'add', 'nonwebextension/manifest.json', non_we_manifest),
        ])

        self.assertEqual(packager.get_bases(),
                         set(['', 'addon', 'addon2', 'addon3', 'addon4',
                              'addon5', 'addon6', 'addon7', 'addon8',
                              'addon9', 'addon10', 'addon11', 'qux',
                              'hybrid', 'hybrid2', 'webextension']))
        self.assertEqual(packager.get_bases(addons=False), set(['', 'qux']))
예제 #13
0
 def write(self, str):
     file = os.path.normpath(os.path.abspath(self._pp.context['FILE']))
     with errors.context(file, self._pp.context['LINE']):
         self._parser.handle_line(str)
    def test_simple_packager(self):
        class GeneratedFileWithPath(GeneratedFile):
            def __init__(self, path, content):
                GeneratedFile.__init__(self, content)
                self.path = path

        formatter = MockFormatter()
        packager = SimplePackager(formatter)
        curdir = os.path.abspath(os.curdir)
        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'bar.manifest'),
                                     'resource bar bar/\ncontent bar bar/')
        with errors.context('manifest', 1):
            packager.add('foo/bar.manifest', file)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'baz.manifest'),
                                     'resource baz baz/')
        with errors.context('manifest', 2):
            packager.add('bar/baz.manifest', file)

        with errors.context('manifest', 3):
            packager.add('qux/qux.manifest',
                         GeneratedFile('resource qux qux/'))
        bar_xpt = GeneratedFile('bar.xpt')
        qux_xpt = GeneratedFile('qux.xpt')
        foo_html = GeneratedFile('foo_html')
        bar_html = GeneratedFile('bar_html')
        with errors.context('manifest', 4):
            packager.add('foo/bar.xpt', bar_xpt)
        with errors.context('manifest', 5):
            packager.add('foo/bar/foo.html', foo_html)
            packager.add('foo/bar/bar.html', bar_html)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo.manifest'),
                                     ''.join([
                                         'manifest foo/bar.manifest\n',
                                         'manifest bar/baz.manifest\n',
                                     ]))
        with errors.context('manifest', 6):
            packager.add('foo.manifest', file)
        with errors.context('manifest', 7):
            packager.add('foo/qux.xpt', qux_xpt)

        self.assertEqual(formatter.log, [])

        with errors.context('dummy', 1):
            packager.close()
        self.maxDiff = None
        self.assertEqual(formatter.log, [
            (('dummy', 1), 'add_base', 'qux'),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 1),
             'add_manifest', ManifestResource('foo', 'bar', 'bar/')),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 2),
             'add_manifest', ManifestContent('foo', 'bar', 'bar/')),
            (('bar/baz.manifest', 1),
             'add_manifest', ManifestResource('bar', 'baz', 'baz/')),
            (('qux/qux.manifest', 1),
             'add_manifest', ManifestResource('qux', 'qux', 'qux/')),
            (('manifest', 4), 'add_interfaces', 'foo/bar.xpt', bar_xpt),
            (('manifest', 7), 'add_interfaces', 'foo/qux.xpt', qux_xpt),
            (('manifest', 5), 'add', 'foo/bar/foo.html', foo_html),
            (('manifest', 5), 'add', 'foo/bar/bar.html', bar_html),
        ])

        self.assertEqual(packager.get_bases(), set(['', 'qux']))
예제 #15
0
    def test_simple_packager(self):
        class GeneratedFileWithPath(GeneratedFile):
            def __init__(self, path, content):
                GeneratedFile.__init__(self, content)
                self.path = path

        formatter = MockFormatter()
        packager = SimplePackager(formatter)
        curdir = os.path.abspath(os.curdir)
        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'bar.manifest'),
                                     'resource bar bar/\ncontent bar bar/')
        with errors.context('manifest', 1):
            packager.add('foo/bar.manifest', file)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo',
                                                  'baz.manifest'),
                                     'resource baz baz/')
        with errors.context('manifest', 2):
            packager.add('bar/baz.manifest', file)

        with errors.context('manifest', 3):
            packager.add('qux/qux.manifest',
                         GeneratedFile(''.join([
                            'resource qux qux/\n',
                            'binary-component qux.so\n',
                         ])))
        bar_xpt = GeneratedFile('bar.xpt')
        qux_xpt = GeneratedFile('qux.xpt')
        foo_html = GeneratedFile('foo_html')
        bar_html = GeneratedFile('bar_html')
        with errors.context('manifest', 4):
            packager.add('foo/bar.xpt', bar_xpt)
        with errors.context('manifest', 5):
            packager.add('foo/bar/foo.html', foo_html)
            packager.add('foo/bar/bar.html', bar_html)

        file = GeneratedFileWithPath(os.path.join(curdir, 'foo.manifest'),
                                     ''.join([
                                         'manifest foo/bar.manifest\n',
                                         'manifest bar/baz.manifest\n',
                                     ]))
        with errors.context('manifest', 6):
            packager.add('foo.manifest', file)
        with errors.context('manifest', 7):
            packager.add('foo/qux.xpt', qux_xpt)

        file = GeneratedFileWithPath(os.path.join(curdir, 'addon',
                                                  'chrome.manifest'),
                                     'resource hoge hoge/')
        with errors.context('manifest', 8):
            packager.add('addon/chrome.manifest', file)

        install_rdf = GeneratedFile('<RDF></RDF>')
        with errors.context('manifest', 9):
            packager.add('addon/install.rdf', install_rdf)

        with errors.context('manifest', 10):
            packager.add('addon2/install.rdf', install_rdf)
            packager.add('addon2/chrome.manifest',
                         GeneratedFile('binary-component addon2.so'))

        with errors.context('manifest', 11):
            packager.add('addon3/install.rdf', install_rdf)
            packager.add('addon3/chrome.manifest', GeneratedFile(
                'manifest components/components.manifest'))
            packager.add('addon3/components/components.manifest',
                         GeneratedFile('binary-component addon3.so'))

        with errors.context('manifest', 12):
            install_rdf_addon4 = GeneratedFile(
                '<RDF>\n<...>\n<em:unpack>true</em:unpack>\n<...>\n</RDF>')
            packager.add('addon4/install.rdf', install_rdf_addon4)

        with errors.context('manifest', 13):
            install_rdf_addon5 = GeneratedFile(
                '<RDF>\n<...>\n<em:unpack>false</em:unpack>\n<...>\n</RDF>')
            packager.add('addon5/install.rdf', install_rdf_addon5)

        with errors.context('manifest', 14):
            install_rdf_addon6 = GeneratedFile(
                '<RDF>\n<... em:unpack=true>\n<...>\n</RDF>')
            packager.add('addon6/install.rdf', install_rdf_addon6)

        with errors.context('manifest', 15):
            install_rdf_addon7 = GeneratedFile(
                '<RDF>\n<... em:unpack=false>\n<...>\n</RDF>')
            packager.add('addon7/install.rdf', install_rdf_addon7)

        with errors.context('manifest', 16):
            install_rdf_addon8 = GeneratedFile(
                '<RDF>\n<... em:unpack="true">\n<...>\n</RDF>')
            packager.add('addon8/install.rdf', install_rdf_addon8)

        with errors.context('manifest', 17):
            install_rdf_addon9 = GeneratedFile(
                '<RDF>\n<... em:unpack="false">\n<...>\n</RDF>')
            packager.add('addon9/install.rdf', install_rdf_addon9)

        with errors.context('manifest', 18):
            install_rdf_addon10 = GeneratedFile(
                '<RDF>\n<... em:unpack=\'true\'>\n<...>\n</RDF>')
            packager.add('addon10/install.rdf', install_rdf_addon10)

        with errors.context('manifest', 19):
            install_rdf_addon11 = GeneratedFile(
                '<RDF>\n<... em:unpack=\'false\'>\n<...>\n</RDF>')
            packager.add('addon11/install.rdf', install_rdf_addon11)

        self.assertEqual(formatter.log, [])

        with errors.context('dummy', 1):
            packager.close()
        self.maxDiff = None
        # The formatter is expected to reorder the manifest entries so that
        # chrome entries appear before the others.
        self.assertEqual(formatter.log, [
            (('dummy', 1), 'add_base', '', False),
            (('dummy', 1), 'add_base', 'addon', True),
            (('dummy', 1), 'add_base', 'addon10', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon11', True),
            (('dummy', 1), 'add_base', 'addon2', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon3', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon4', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon5', True),
            (('dummy', 1), 'add_base', 'addon6', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon7', True),
            (('dummy', 1), 'add_base', 'addon8', 'unpacked'),
            (('dummy', 1), 'add_base', 'addon9', True),
            (('dummy', 1), 'add_base', 'qux', False),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 2),
             'add_manifest', ManifestContent('foo', 'bar', 'bar/')),
            ((os.path.join(curdir, 'foo', 'bar.manifest'), 1),
             'add_manifest', ManifestResource('foo', 'bar', 'bar/')),
            (('bar/baz.manifest', 1),
             'add_manifest', ManifestResource('bar', 'baz', 'baz/')),
            (('qux/qux.manifest', 1),
             'add_manifest', ManifestResource('qux', 'qux', 'qux/')),
            (('qux/qux.manifest', 2),
             'add_manifest', ManifestBinaryComponent('qux', 'qux.so')),
            (('manifest', 4), 'add_interfaces', 'foo/bar.xpt', bar_xpt),
            (('manifest', 7), 'add_interfaces', 'foo/qux.xpt', qux_xpt),
            ((os.path.join(curdir, 'addon', 'chrome.manifest'), 1),
             'add_manifest', ManifestResource('addon', 'hoge', 'hoge/')),
            (('addon2/chrome.manifest', 1), 'add_manifest',
             ManifestBinaryComponent('addon2', 'addon2.so')),
            (('addon3/components/components.manifest', 1), 'add_manifest',
             ManifestBinaryComponent('addon3/components', 'addon3.so')),
            (('manifest', 5), 'add', 'foo/bar/foo.html', foo_html),
            (('manifest', 5), 'add', 'foo/bar/bar.html', bar_html),
            (('manifest', 9), 'add', 'addon/install.rdf', install_rdf),
            (('manifest', 10), 'add', 'addon2/install.rdf', install_rdf),
            (('manifest', 11), 'add', 'addon3/install.rdf', install_rdf),
            (('manifest', 12), 'add', 'addon4/install.rdf',
             install_rdf_addon4),
            (('manifest', 13), 'add', 'addon5/install.rdf',
             install_rdf_addon5),
            (('manifest', 14), 'add', 'addon6/install.rdf',
             install_rdf_addon6),
            (('manifest', 15), 'add', 'addon7/install.rdf',
             install_rdf_addon7),
            (('manifest', 16), 'add', 'addon8/install.rdf',
             install_rdf_addon8),
            (('manifest', 17), 'add', 'addon9/install.rdf',
             install_rdf_addon9),
            (('manifest', 18), 'add', 'addon10/install.rdf',
             install_rdf_addon10),
            (('manifest', 19), 'add', 'addon11/install.rdf',
             install_rdf_addon11),
        ])

        self.assertEqual(packager.get_bases(),
                         set(['', 'addon', 'addon2', 'addon3', 'addon4',
                              'addon5', 'addon6', 'addon7', 'addon8',
                              'addon9', 'addon10', 'addon11', 'qux']))
        self.assertEqual(packager.get_bases(addons=False), set(['', 'qux']))
예제 #16
0
 def write(self, str):
     with errors.context(self._pp.context["FILE"],
                         self._pp.context["LINE"]):
         self._parser.handle_line(str)