mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
150 lines
6.5 KiB
Python
150 lines
6.5 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import unittest
|
|
import mozunit
|
|
import os
|
|
from mozpack.chrome.manifest import (
|
|
ManifestContent,
|
|
ManifestLocale,
|
|
ManifestSkin,
|
|
Manifest,
|
|
ManifestResource,
|
|
ManifestOverride,
|
|
ManifestComponent,
|
|
ManifestContract,
|
|
ManifestInterfaces,
|
|
ManifestBinaryComponent,
|
|
ManifestCategory,
|
|
ManifestStyle,
|
|
ManifestOverlay,
|
|
MANIFESTS_TYPES,
|
|
parse_manifest,
|
|
parse_manifest_line,
|
|
)
|
|
from mozpack.errors import errors, AccumulatedErrors
|
|
from test_errors import TestErrors
|
|
|
|
|
|
class TestManifest(unittest.TestCase):
|
|
def test_parse_manifest(self):
|
|
manifest = [
|
|
'content global content/global/',
|
|
'content global content/global/ application=foo application=bar' +
|
|
' platform',
|
|
'locale global en-US content/en-US/',
|
|
'locale global en-US content/en-US/ application=foo',
|
|
'skin global classic/1.0 content/skin/classic/',
|
|
'skin global classic/1.0 content/skin/classic/ application=foo' +
|
|
' os=WINNT',
|
|
'',
|
|
'manifest pdfjs/chrome.manifest',
|
|
'resource gre-resources toolkit/res/',
|
|
'override chrome://global/locale/netError.dtd' +
|
|
' chrome://browser/locale/netError.dtd',
|
|
'# Comment',
|
|
'component {b2bba4df-057d-41ea-b6b1-94a10a8ede68} foo.js',
|
|
'contract @mozilla.org/foo;1' +
|
|
' {b2bba4df-057d-41ea-b6b1-94a10a8ede68}',
|
|
'interfaces foo.xpt # Inline comment',
|
|
'binary-component bar.so',
|
|
'category command-line-handler m-browser' +
|
|
' @mozilla.org/browser/clh;1' +
|
|
' application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}',
|
|
'style chrome://global/content/customizeToolbar.xul' +
|
|
' chrome://browser/skin/',
|
|
'overlay chrome://global/content/viewSource.xul' +
|
|
' chrome://browser/content/viewSourceOverlay.xul',
|
|
]
|
|
other_manifest = [
|
|
'content global content/global/'
|
|
]
|
|
expected_result = [
|
|
ManifestContent('', 'global', 'content/global/'),
|
|
ManifestContent('', 'global', 'content/global/', 'application=foo',
|
|
'application=bar', 'platform'),
|
|
ManifestLocale('', 'global', 'en-US', 'content/en-US/'),
|
|
ManifestLocale('', 'global', 'en-US', 'content/en-US/',
|
|
'application=foo'),
|
|
ManifestSkin('', 'global', 'classic/1.0', 'content/skin/classic/'),
|
|
ManifestSkin('', 'global', 'classic/1.0', 'content/skin/classic/',
|
|
'application=foo', 'os=WINNT'),
|
|
Manifest('', 'pdfjs/chrome.manifest'),
|
|
ManifestResource('', 'gre-resources', 'toolkit/res/'),
|
|
ManifestOverride('', 'chrome://global/locale/netError.dtd',
|
|
'chrome://browser/locale/netError.dtd'),
|
|
ManifestComponent('', '{b2bba4df-057d-41ea-b6b1-94a10a8ede68}',
|
|
'foo.js'),
|
|
ManifestContract('', '@mozilla.org/foo;1',
|
|
'{b2bba4df-057d-41ea-b6b1-94a10a8ede68}'),
|
|
ManifestInterfaces('', 'foo.xpt'),
|
|
ManifestBinaryComponent('', 'bar.so'),
|
|
ManifestCategory('', 'command-line-handler', 'm-browser',
|
|
'@mozilla.org/browser/clh;1', 'application=' +
|
|
'{ec8030f7-c20a-464f-9b0e-13a3a9e97384}'),
|
|
ManifestStyle('', 'chrome://global/content/customizeToolbar.xul',
|
|
'chrome://browser/skin/'),
|
|
ManifestOverlay('', 'chrome://global/content/viewSource.xul',
|
|
'chrome://browser/content/viewSourceOverlay.xul'),
|
|
]
|
|
with mozunit.MockedOpen({'manifest': '\n'.join(manifest),
|
|
'other/manifest': '\n'.join(other_manifest)}):
|
|
# Ensure we have tests for all types of manifests.
|
|
self.assertEqual(set(type(e) for e in expected_result),
|
|
set(MANIFESTS_TYPES.values()))
|
|
self.assertEqual(list(parse_manifest(os.curdir, 'manifest')),
|
|
expected_result)
|
|
self.assertEqual(list(parse_manifest(os.curdir, 'other/manifest')),
|
|
[ManifestContent('other', 'global',
|
|
'content/global/')])
|
|
|
|
def test_manifest_rebase(self):
|
|
m = parse_manifest_line('chrome', 'content global content/global/')
|
|
m = m.rebase('')
|
|
self.assertEqual(str(m), 'content global chrome/content/global/')
|
|
m = m.rebase('chrome')
|
|
self.assertEqual(str(m), 'content global content/global/')
|
|
|
|
m = parse_manifest_line('chrome/foo', 'content global content/global/')
|
|
m = m.rebase('chrome')
|
|
self.assertEqual(str(m), 'content global foo/content/global/')
|
|
m = m.rebase('chrome/foo')
|
|
self.assertEqual(str(m), 'content global content/global/')
|
|
|
|
m = parse_manifest_line('modules/foo', 'resource foo ./')
|
|
m = m.rebase('modules')
|
|
self.assertEqual(str(m), 'resource foo foo/')
|
|
m = m.rebase('modules/foo')
|
|
self.assertEqual(str(m), 'resource foo ./')
|
|
|
|
m = parse_manifest_line('chrome', 'content browser browser/content/')
|
|
m = m.rebase('chrome/browser').move('jar:browser.jar!').rebase('')
|
|
self.assertEqual(str(m), 'content browser jar:browser.jar!/content/')
|
|
|
|
|
|
class TestManifestErrors(TestErrors, unittest.TestCase):
|
|
def test_parse_manifest_errors(self):
|
|
manifest = [
|
|
'skin global classic/1.0 content/skin/classic/ platform',
|
|
'',
|
|
'binary-component bar.so',
|
|
'unsupported foo',
|
|
]
|
|
with mozunit.MockedOpen({'manifest': '\n'.join(manifest)}):
|
|
with self.assertRaises(AccumulatedErrors):
|
|
with errors.accumulate():
|
|
list(parse_manifest(os.curdir, 'manifest'))
|
|
out = self.get_output()
|
|
# Expecting 2 errors
|
|
self.assertEqual(len(out), 2)
|
|
path = os.path.abspath('manifest')
|
|
# First on line 1
|
|
self.assertTrue(out[0].startswith('Error: %s:1: ' % path))
|
|
# Second on line 4
|
|
self.assertTrue(out[1].startswith('Error: %s:4: ' % path))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
mozunit.main()
|