summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/test/action/test_langpack_manifest.py')
-rw-r--r--python/mozbuild/mozbuild/test/action/test_langpack_manifest.py269
1 files changed, 269 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py b/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py
new file mode 100644
index 0000000000..29e8642fc7
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/action/test_langpack_manifest.py
@@ -0,0 +1,269 @@
+# -*- coding: utf-8 -*-
+
+# Any copyright is dedicated to the Public Domain.
+# http://creativecommons.org/publicdomain/zero/1.0/
+
+import json
+import os
+import shutil
+import tempfile
+import unittest
+
+import mozunit
+
+from mozbuild.action import langpack_manifest
+
+
+class TestGenerateManifest(unittest.TestCase):
+ """
+ Unit tests for langpack_manifest.py.
+ """
+
+ def test_parse_flat_ftl(self):
+ src = """
+langpack-creator = bar {"bar"}
+langpack-contributors = { "" }
+"""
+ tmp = tempfile.NamedTemporaryFile(mode="wt", suffix=".ftl", delete=False)
+ try:
+ tmp.write(src)
+ tmp.close()
+ ftl = langpack_manifest.parse_flat_ftl(tmp.name)
+ self.assertEqual(ftl["langpack-creator"], "bar bar")
+ self.assertEqual(ftl["langpack-contributors"], "")
+ finally:
+ os.remove(tmp.name)
+
+ def test_parse_flat_ftl_missing(self):
+ ftl = langpack_manifest.parse_flat_ftl("./does-not-exist.ftl")
+ self.assertEqual(len(ftl), 0)
+
+ def test_manifest(self):
+ ctx = {
+ "langpack-creator": "Suomennosprojekti",
+ "langpack-contributors": "Joe Smith, Mary White",
+ }
+ os.environ["MOZ_BUILD_DATE"] = "20210928100000"
+ manifest = langpack_manifest.create_webmanifest(
+ "fi",
+ "57.0.1",
+ "57.0",
+ "57.0.*",
+ "Firefox",
+ "/var/vcs/l10n-central",
+ "langpack-fi@firefox.mozilla.og",
+ ctx,
+ {},
+ )
+
+ data = json.loads(manifest)
+ self.assertEqual(data["name"], "Language: Suomi (Finnish)")
+ self.assertEqual(
+ data["description"], "Firefox Language Pack for Suomi (fi) – Finnish"
+ )
+ self.assertEqual(
+ data["author"], "Suomennosprojekti (contributors: Joe Smith, Mary White)"
+ )
+ self.assertEqual(data["version"], "57.0.20210928.100000")
+
+ def test_manifest_truncated_name(self):
+ ctx = {
+ "langpack-creator": "Mozilla.org / Softcatalà",
+ "langpack-contributors": "Joe Smith, Mary White",
+ }
+ os.environ["MOZ_BUILD_DATE"] = "20210928100000"
+ manifest = langpack_manifest.create_webmanifest(
+ "ca-valencia",
+ "57.0.1",
+ "57.0",
+ "57.0.*",
+ "Firefox",
+ "/var/vcs/l10n-central",
+ "langpack-ca-valencia@firefox.mozilla.og",
+ ctx,
+ {},
+ )
+
+ data = json.loads(manifest)
+ self.assertEqual(data["name"], "Language: Català (Valencià)")
+ self.assertEqual(
+ data["description"],
+ "Firefox Language Pack for Català (Valencià) (ca-valencia) – Catalan, Valencian",
+ )
+
+ def test_manifest_name_untranslated(self):
+ ctx = {
+ "langpack-creator": "Mozilla.org",
+ "langpack-contributors": "Joe Smith, Mary White",
+ }
+ os.environ["MOZ_BUILD_DATE"] = "20210928100000"
+ manifest = langpack_manifest.create_webmanifest(
+ "en-US",
+ "57.0.1",
+ "57.0",
+ "57.0.*",
+ "Firefox",
+ "/var/vcs/l10n-central",
+ "langpack-ca-valencia@firefox.mozilla.og",
+ ctx,
+ {},
+ )
+
+ data = json.loads(manifest)
+ self.assertEqual(data["name"], "Language: English (US)")
+ self.assertEqual(
+ data["description"],
+ "Firefox Language Pack for English (US) (en-US)",
+ )
+
+ def test_manifest_without_contributors(self):
+ ctx = {
+ "langpack-creator": "Suomennosprojekti",
+ "langpack-contributors": "",
+ }
+ manifest = langpack_manifest.create_webmanifest(
+ "fi",
+ "57.0.1",
+ "57.0",
+ "57.0.*",
+ "Firefox",
+ "/var/vcs/l10n-central",
+ "langpack-fi@firefox.mozilla.og",
+ ctx,
+ {},
+ )
+
+ data = json.loads(manifest)
+ self.assertEqual(data["name"], "Language: Suomi (Finnish)")
+ self.assertEqual(
+ data["description"], "Firefox Language Pack for Suomi (fi) – Finnish"
+ )
+ self.assertEqual(data["author"], "Suomennosprojekti")
+
+ def test_manifest_truncation(self):
+ locale = (
+ "Long locale code that will be truncated and will cause both "
+ "the name and the description to exceed the maximum number of "
+ "characters allowed in manifest.json"
+ )
+ title, description = langpack_manifest.get_title_and_description(
+ "Firefox", locale
+ )
+
+ self.assertEqual(len(title), 45)
+ self.assertEqual(len(description), 132)
+
+ def test_get_version_maybe_buildid(self):
+ for (app_version, buildid, expected_version) in [
+ ("109", "", "109"),
+ ("109.0", "", "109.0"),
+ ("109.0.0", "", "109.0.0"),
+ ("109", "20210928", "109"), # buildid should be 14 chars
+ ("109", "20210928123456", "109.20210928.123456"),
+ ("109.0", "20210928123456", "109.0.20210928.123456"),
+ ("109.0.0", "20210928123456", "109.0.20210928.123456"),
+ ("109", "20230215023456", "109.20230215.23456"),
+ ("109.0", "20230215023456", "109.0.20230215.23456"),
+ ("109.0.0", "20230215023456", "109.0.20230215.23456"),
+ ("109", "20230215003456", "109.20230215.3456"),
+ ("109", "20230215000456", "109.20230215.456"),
+ ("109", "20230215000056", "109.20230215.56"),
+ ("109", "20230215000006", "109.20230215.6"),
+ ("109", "20230215000000", "109.20230215.0"),
+ ("109.1.2.3", "20230201000000", "109.1.20230201.0"),
+ ("109.0a1", "", "109.0"),
+ ("109a0.0b0", "", "109.0"),
+ ("109.0.0b1", "", "109.0.0"),
+ ("109.0.b1", "", "109.0.0"),
+ ("109..1", "", "109.0.1"),
+ ]:
+ os.environ["MOZ_BUILD_DATE"] = buildid
+ version = langpack_manifest.get_version_maybe_buildid(app_version)
+ self.assertEqual(version, expected_version)
+
+ def test_main(self):
+ # We set this env variable so that the manifest.json version string
+ # uses a "buildid", see: `get_version_maybe_buildid()` for more
+ # information.
+ os.environ["MOZ_BUILD_DATE"] = "20210928100000"
+
+ TEST_CASES = [
+ {
+ "app_version": "112.0.1",
+ "max_app_version": "112.*",
+ "expected_version": "112.0.20210928.100000",
+ "expected_min_version": "112.0",
+ "expected_max_version": "112.*",
+ },
+ {
+ "app_version": "112.1.0",
+ "max_app_version": "112.*",
+ "expected_version": "112.1.20210928.100000",
+ # We expect the second part to be "0" even if the app version
+ # has a minor part equal to "1".
+ "expected_min_version": "112.0",
+ "expected_max_version": "112.*",
+ },
+ {
+ "app_version": "114.0a1",
+ "max_app_version": "114.*",
+ "expected_version": "114.0.20210928.100000",
+ # We expect the min version to be equal to the app version
+ # because we don't change alpha versions.
+ "expected_min_version": "114.0a1",
+ "expected_max_version": "114.*",
+ },
+ ]
+
+ tmpdir = tempfile.mkdtemp()
+ try:
+ # These files are required by the `main()` function.
+ for file in ["chrome.manifest", "empty-metadata.ftl"]:
+ langpack_manifest.write_file(os.path.join(tmpdir, file), "")
+
+ for tc in TEST_CASES:
+ extension_id = "some@extension-id"
+ locale = "fr"
+
+ args = [
+ "--input",
+ tmpdir,
+ # This file has been created right above.
+ "--metadata",
+ "empty-metadata.ftl",
+ "--app-name",
+ "Firefox",
+ "--l10n-basedir",
+ "/var/vcs/l10n-central",
+ "--locales",
+ locale,
+ "--langpack-eid",
+ extension_id,
+ "--app-version",
+ tc["app_version"],
+ "--max-app-ver",
+ tc["max_app_version"],
+ ]
+ langpack_manifest.main(args)
+
+ with open(os.path.join(tmpdir, "manifest.json")) as manifest_file:
+ manifest = json.load(manifest_file)
+ self.assertEqual(manifest["version"], tc["expected_version"])
+ self.assertEqual(manifest["langpack_id"], locale)
+ self.assertEqual(
+ manifest["browser_specific_settings"],
+ {
+ "gecko": {
+ "id": extension_id,
+ "strict_min_version": tc["expected_min_version"],
+ "strict_max_version": tc["expected_max_version"],
+ }
+ },
+ )
+ finally:
+ shutil.rmtree(tmpdir, ignore_errors=True)
+ del os.environ["MOZ_BUILD_DATE"]
+
+
+if __name__ == "__main__":
+ mozunit.main()