summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozpack/test/test_chrome_manifest.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozpack/test/test_chrome_manifest.py')
-rw-r--r--python/mozbuild/mozpack/test/test_chrome_manifest.py176
1 files changed, 176 insertions, 0 deletions
diff --git a/python/mozbuild/mozpack/test/test_chrome_manifest.py b/python/mozbuild/mozpack/test/test_chrome_manifest.py
new file mode 100644
index 0000000000..c1d5826bbc
--- /dev/null
+++ b/python/mozbuild/mozpack/test/test_chrome_manifest.py
@@ -0,0 +1,176 @@
+# 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 os
+import unittest
+
+import mozunit
+
+from mozpack.chrome.manifest import (
+ MANIFESTS_TYPES,
+ Manifest,
+ ManifestBinaryComponent,
+ ManifestCategory,
+ ManifestComponent,
+ ManifestContent,
+ ManifestContract,
+ ManifestInterfaces,
+ ManifestLocale,
+ ManifestOverlay,
+ ManifestOverride,
+ ManifestResource,
+ ManifestSkin,
+ ManifestStyle,
+ parse_manifest,
+ parse_manifest_line,
+)
+from mozpack.errors import AccumulatedErrors, errors
+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",
+ "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/viewSource.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/viewSource.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()