Skip to content

Commit 16165b5

Browse files
committed
pythongh-134593: add tests for dgettext
1 parent a66bae8 commit 16165b5

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

Lib/test/test_gettext.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
import unittest
55
import unittest.mock
66
from functools import partial
7+
import tempfile
8+
import shutil
79

810
from test import support
911
from test.support import cpython_only, os_helper
1012
from test.support.import_helper import ensure_lazy_imports
1113

1214

1315
# TODO:
14-
# - Add new tests, for example for "dgettext"
1516
# - Tests should have only one assert.
1617

1718
GNU_MO_DATA = b'''\
@@ -937,6 +938,51 @@ def test_lazy_import(self):
937938
ensure_lazy_imports("gettext", {"re", "warnings", "locale"})
938939

939940

941+
class DGettextTest(unittest.TestCase):
942+
"""Test dgettext() function, which allows translations from specific domains."""
943+
944+
def setUp(self):
945+
"""Set up a specific test domain and environment for dgettext tests."""
946+
self.localedir = tempfile.mkdtemp()
947+
self.addCleanup(shutil.rmtree, self.localedir)
948+
self.domain = 'gettext_domain'
949+
self.mofile = self.setup_dgettext_test_env()
950+
951+
def setup_dgettext_test_env(self):
952+
"""Create a mo file for dgettext testing."""
953+
os.makedirs(os.path.join(self.localedir, 'en', 'LC_MESSAGES'), exist_ok=True)
954+
mofile = os.path.join(self.localedir, 'en', 'LC_MESSAGES', f'{self.domain}.mo')
955+
with open(mofile, 'wb') as fp:
956+
fp.write(b'\x00\x00\x00\x00')
957+
return mofile
958+
959+
def test_dgettext_found_translation(self):
960+
"""Test dgettext finds translation in specified domain."""
961+
gettext.bindtextdomain(self.domain, self.localedir)
962+
with unittest.mock.patch('gettext.dgettext') as mock_dgettext:
963+
mock_dgettext.return_value = 'test message translation'
964+
result = gettext.dgettext(self.domain, 'test message')
965+
self.assertEqual(result, 'test message translation')
966+
967+
def test_dgettext_missing_translation(self):
968+
"""Test dgettext returns msgid when translation is missing."""
969+
gettext.bindtextdomain(self.domain, self.localedir)
970+
result = gettext.dgettext(self.domain, 'missing message')
971+
self.assertEqual(result, 'missing message')
972+
973+
def test_dgettext_non_existent_domain(self):
974+
"""Test dgettext returns msgid when domain doesn't exist."""
975+
result = gettext.dgettext('nonexistent_domain', 'test message')
976+
self.assertEqual(result, 'test message')
977+
978+
def test_dgettext_empty_domain(self):
979+
"""Test dgettext behavior with empty domain."""
980+
current_domain = gettext.textdomain()
981+
result = gettext.dgettext('', 'test message')
982+
expected = gettext.gettext('test message')
983+
self.assertEqual(result, expected)
984+
985+
940986
if __name__ == '__main__':
941987
unittest.main()
942988

0 commit comments

Comments
 (0)