From c6755ece4e4bd24a433e20f3882aa28460b1e913 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> Date: Wed, 19 Mar 2025 10:52:03 +0000 Subject: [PATCH] gh-130655: Add tests for `gettext.find()` (GH-130691) (cherry picked from commit 3118693a1a3db0da96c565a2de015a806c892625) Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> Co-authored-by: Tomas R. --- Lib/test/test_gettext.py | 70 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py index a0d77dcceeff61..3d38ccf6cbba50 100644 --- a/Lib/test/test_gettext.py +++ b/Lib/test/test_gettext.py @@ -768,6 +768,76 @@ def test_expand_lang(self): self.assertEqual(gettext._expand_lang(locale), expanded) +class FindTestCase(unittest.TestCase): + + def setUp(self): + self.env = self.enterContext(os_helper.EnvironmentVarGuard()) + self.tempdir = self.enterContext(os_helper.temp_cwd()) + + for key in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'): + self.env.unset(key) + + def create_mo_file(self, lang): + locale_dir = os.path.join(self.tempdir, "locale") + mofile_dir = os.path.join(locale_dir, lang, "LC_MESSAGES") + os.makedirs(mofile_dir) + mo_file = os.path.join(mofile_dir, "mofile.mo") + with open(mo_file, "wb") as f: + f.write(GNU_MO_DATA) + return mo_file + + def test_find_with_env_vars(self): + # test that find correctly finds the environment variables + # when languages are not supplied + mo_file = self.create_mo_file("ga_IE") + for var in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'): + self.env.set(var, 'ga_IE') + result = gettext.find("mofile", + localedir=os.path.join(self.tempdir, "locale")) + self.assertEqual(result, mo_file) + self.env.unset(var) + + def test_find_with_languages(self): + # test that passed languages are used + self.env.set('LANGUAGE', 'pt_BR') + mo_file = self.create_mo_file("ga_IE") + + result = gettext.find("mofile", + localedir=os.path.join(self.tempdir, "locale"), + languages=['ga_IE']) + self.assertEqual(result, mo_file) + + @unittest.mock.patch('gettext._expand_lang') + def test_find_with_no_lang(self, patch_expand_lang): + # no language can be found + gettext.find('foo') + patch_expand_lang.assert_called_with('C') + + @unittest.mock.patch('gettext._expand_lang') + def test_find_with_c(self, patch_expand_lang): + # 'C' is already in languages + self.env.set('LANGUAGE', 'C') + gettext.find('foo') + patch_expand_lang.assert_called_with('C') + + def test_find_all(self): + # test that all are returned when all is set + paths = [] + for lang in ["ga_IE", "es_ES"]: + paths.append(self.create_mo_file(lang)) + result = gettext.find('mofile', + localedir=os.path.join(self.tempdir, "locale"), + languages=["ga_IE", "es_ES"], all=True) + self.assertEqual(sorted(result), sorted(paths)) + + def test_find_deduplication(self): + # test that find removes duplicate languages + mo_file = [self.create_mo_file('ga_IE')] + result = gettext.find("mofile", localedir=os.path.join(self.tempdir, "locale"), + languages=['ga_IE', 'ga_IE'], all=True) + self.assertEqual(result, mo_file) + + class MiscTestCase(unittest.TestCase): def test__all__(self): support.check__all__(self, gettext,