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,