# 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 six from mozpack.chrome.manifest import Manifest, ManifestContent, ManifestLocale from mozpack.copier import FileRegistry from mozpack.files import GeneratedFile, ManifestFile from mozpack.packager import l10n from test_packager import MockFinder class TestL10NRepack(unittest.TestCase): def test_l10n_repack(self): foo = GeneratedFile(b"foo") foobar = GeneratedFile(b"foobar") qux = GeneratedFile(b"qux") bar = GeneratedFile(b"bar") baz = GeneratedFile(b"baz") dict_aa = GeneratedFile(b"dict_aa") dict_bb = GeneratedFile(b"dict_bb") dict_cc = GeneratedFile(b"dict_cc") barbaz = GeneratedFile(b"barbaz") lst = GeneratedFile(b"foo\nbar") app_finder = MockFinder( { "bar/foo": foo, "chrome/foo/foobar": foobar, "chrome/qux/qux.properties": qux, "chrome/qux/baz/baz.properties": baz, "chrome/chrome.manifest": ManifestFile( "chrome", [ ManifestContent("chrome", "foo", "foo/"), ManifestLocale("chrome", "qux", "en-US", "qux/"), ], ), "chrome.manifest": ManifestFile( "", [Manifest("", "chrome/chrome.manifest")] ), "dict/aa": dict_aa, "app/chrome/bar/barbaz.dtd": barbaz, "app/chrome/chrome.manifest": ManifestFile( "app/chrome", [ManifestLocale("app/chrome", "bar", "en-US", "bar/")] ), "app/chrome.manifest": ManifestFile( "app", [Manifest("app", "chrome/chrome.manifest")] ), "app/dict/bb": dict_bb, "app/dict/cc": dict_cc, "app/chrome/bar/search/foo.xml": foo, "app/chrome/bar/search/bar.xml": bar, "app/chrome/bar/search/lst.txt": lst, "META-INF/foo": foo, # Stripped. "inner/META-INF/foo": foo, # Not stripped. "app/META-INF/foo": foo, # Stripped. "app/inner/META-INF/foo": foo, # Not stripped. } ) app_finder.jarlogs = {} app_finder.base = "app" foo_l10n = GeneratedFile(b"foo_l10n") qux_l10n = GeneratedFile(b"qux_l10n") baz_l10n = GeneratedFile(b"baz_l10n") barbaz_l10n = GeneratedFile(b"barbaz_l10n") lst_l10n = GeneratedFile(b"foo\nqux") l10n_finder = MockFinder( { "chrome/qux-l10n/qux.properties": qux_l10n, "chrome/qux-l10n/baz/baz.properties": baz_l10n, "chrome/chrome.manifest": ManifestFile( "chrome", [ ManifestLocale("chrome", "qux", "x-test", "qux-l10n/"), ], ), "chrome.manifest": ManifestFile( "", [Manifest("", "chrome/chrome.manifest")] ), "dict/bb": dict_bb, "dict/cc": dict_cc, "app/chrome/bar-l10n/barbaz.dtd": barbaz_l10n, "app/chrome/chrome.manifest": ManifestFile( "app/chrome", [ManifestLocale("app/chrome", "bar", "x-test", "bar-l10n/")], ), "app/chrome.manifest": ManifestFile( "app", [Manifest("app", "chrome/chrome.manifest")] ), "app/dict/aa": dict_aa, "app/chrome/bar-l10n/search/foo.xml": foo_l10n, "app/chrome/bar-l10n/search/qux.xml": qux_l10n, "app/chrome/bar-l10n/search/lst.txt": lst_l10n, } ) l10n_finder.base = "l10n" copier = FileRegistry() formatter = l10n.FlatFormatter(copier) l10n._repack( app_finder, l10n_finder, copier, formatter, ["dict", "chrome/**/search/*.xml"], ) self.maxDiff = None repacked = { "bar/foo": foo, "chrome/foo/foobar": foobar, "chrome/qux-l10n/qux.properties": qux_l10n, "chrome/qux-l10n/baz/baz.properties": baz_l10n, "chrome/chrome.manifest": ManifestFile( "chrome", [ ManifestContent("chrome", "foo", "foo/"), ManifestLocale("chrome", "qux", "x-test", "qux-l10n/"), ], ), "chrome.manifest": ManifestFile( "", [Manifest("", "chrome/chrome.manifest")] ), "dict/bb": dict_bb, "dict/cc": dict_cc, "app/chrome/bar-l10n/barbaz.dtd": barbaz_l10n, "app/chrome/chrome.manifest": ManifestFile( "app/chrome", [ManifestLocale("app/chrome", "bar", "x-test", "bar-l10n/")], ), "app/chrome.manifest": ManifestFile( "app", [Manifest("app", "chrome/chrome.manifest")] ), "app/dict/aa": dict_aa, "app/chrome/bar-l10n/search/foo.xml": foo_l10n, "app/chrome/bar-l10n/search/qux.xml": qux_l10n, "app/chrome/bar-l10n/search/lst.txt": lst_l10n, "inner/META-INF/foo": foo, "app/inner/META-INF/foo": foo, } self.assertEqual( dict((p, f.open().read()) for p, f in copier), dict((p, f.open().read()) for p, f in six.iteritems(repacked)), ) if __name__ == "__main__": mozunit.main()