diff options
author | Jason Madden <jamadden@gmail.com> | 2017-12-17 09:44:29 -0600 |
---|---|---|
committer | Jason Madden <jamadden@gmail.com> | 2017-12-17 09:44:29 -0600 |
commit | a4cf800dc23b5fc3072e26db539edc3c92891113 (patch) | |
tree | 1107fceb95b6ffa79846b191d27fba2a6ee38d5d /src | |
parent | ac16be8fed6cc840ad0f3244c883c8b7a672f643 (diff) | |
download | zope-i18n-a4cf800dc23b5fc3072e26db539edc3c92891113.tar.gz |
100% coverage for translationdomain.py
Make TranslationDomain not extend SimpleTranslationDomain. The two had no relationship because TranslationDomain didn't initialize the super (so they didn't share attributes) and it overrode every method. Inheriting from SimpleTranslationDomain would mask any failures to properly implement a changed interface.
Diffstat (limited to 'src')
-rw-r--r-- | src/zope/i18n/tests/test_itranslationdomain.py | 4 | ||||
-rw-r--r-- | src/zope/i18n/tests/test_translationdomain.py | 45 | ||||
-rw-r--r-- | src/zope/i18n/translationdomain.py | 11 |
3 files changed, 36 insertions, 24 deletions
diff --git a/src/zope/i18n/tests/test_itranslationdomain.py b/src/zope/i18n/tests/test_itranslationdomain.py index d585be6..79c385f 100644 --- a/src/zope/i18n/tests/test_itranslationdomain.py +++ b/src/zope/i18n/tests/test_itranslationdomain.py @@ -20,6 +20,8 @@ from zope.interface import implementer import zope.component from zope.component.testing import PlacelessSetup +from zope.schema import getValidationErrors + from zope.i18n.negotiator import negotiator from zope.i18n.interfaces import INegotiator, IUserPreferredLanguages from zope.i18n.interfaces import ITranslationDomain @@ -51,6 +53,8 @@ class TestITranslationDomain(PlacelessSetup): def testInterface(self): verifyObject(ITranslationDomain, self._domain) + errors = getValidationErrors(ITranslationDomain, self._domain) + self.assertFalse(errors) def testSimpleTranslate(self): translate = self._domain.translate diff --git a/src/zope/i18n/tests/test_translationdomain.py b/src/zope/i18n/tests/test_translationdomain.py index 1851a39..f206d5b 100644 --- a/src/zope/i18n/tests/test_translationdomain.py +++ b/src/zope/i18n/tests/test_translationdomain.py @@ -24,27 +24,20 @@ from zope.i18n.interfaces import ITranslationDomain import zope.component -def testdir(): - from zope.i18n import tests - return os.path.dirname(tests.__file__) +testdir = os.path.dirname(__file__) +en_file = os.path.join(testdir, 'en-default.mo') +de_file = os.path.join(testdir, 'de-default.mo') -class TestGlobalTranslationDomain(unittest.TestCase, TestITranslationDomain): - def setUp(self): - TestITranslationDomain.setUp(self) - - def tearDown(self): - TestITranslationDomain.tearDown(self) +class TestGlobalTranslationDomain(TestITranslationDomain, unittest.TestCase): def _getTranslationDomain(self): domain = TranslationDomain('default') - path = testdir() en_catalog = GettextMessageCatalog('en', 'default', - os.path.join(path, 'en-default.mo')) + en_file) de_catalog = GettextMessageCatalog('de', 'default', - os.path.join(path, 'de-default.mo')) - + de_file) domain.addCatalog(en_catalog) domain.addCatalog(de_catalog) return domain @@ -140,7 +133,7 @@ class TestGlobalTranslationDomain(unittest.TestCase, TestITranslationDomain): "Message: oohhh") # provide the domain domain = TranslationDomain('alt') - path = testdir() + path = testdir en_catalog = GettextMessageCatalog('en', 'alt', os.path.join(path, 'en-alt.mo')) domain.addCatalog(en_catalog) @@ -150,12 +143,9 @@ class TestGlobalTranslationDomain(unittest.TestCase, TestITranslationDomain): translate(msgid, target_language='en', default="default"), "Message: Wow") - - - def testMessageIDTranslateForDifferentDomain(self): domain = TranslationDomain('alt') - path = testdir() + path = testdir en_catalog = GettextMessageCatalog('en', 'alt', os.path.join(path, 'en-alt.mo')) domain.addCatalog(en_catalog) @@ -186,3 +176,22 @@ class TestGlobalTranslationDomain(unittest.TestCase, TestITranslationDomain): default="this ${that} the other", mapping={"that": "THAT"}), "this THAT the other") + + def test_getCatalogInfos(self): + cats = self._domain.getCatalogsInfo() + self.assertEqual( + cats, + {'en': [en_file], + 'de': [de_file]}) + + def test_releoadCatalogs(self): + # It uses the keys we pass + # so this does nothing + self._domain.reloadCatalogs(()) + + # The catalogNames, somewhat confusingly, are + # the paths to the files. + self._domain.reloadCatalogs((en_file, de_file)) + + with self.assertRaises(KeyError): + self._domain.reloadCatalogs(('dne',)) diff --git a/src/zope/i18n/translationdomain.py b/src/zope/i18n/translationdomain.py index ab8f241..274b744 100644 --- a/src/zope/i18n/translationdomain.py +++ b/src/zope/i18n/translationdomain.py @@ -15,9 +15,10 @@ """ import zope.component +import zope.interface + from zope.i18nmessageid import Message from zope.i18n import translate, interpolate -from zope.i18n.simpletranslationdomain import SimpleTranslationDomain from zope.i18n.interfaces import ITranslationDomain, INegotiator @@ -33,8 +34,8 @@ LANGUAGE_FALLBACKS = ['en'] text_type = str if bytes is not str else unicode - -class TranslationDomain(SimpleTranslationDomain): +@zope.interface.implementer(ITranslationDomain) +class TranslationDomain(object): def __init__(self, domain, fallbacks=None): self.domain = domain @@ -44,9 +45,7 @@ class TranslationDomain(SimpleTranslationDomain): self._data = {} # What languages to fallback to, if there is no catalog for the # requested language (no fallback on individual messages) - if fallbacks is None: - fallbacks = LANGUAGE_FALLBACKS - self._fallbacks = fallbacks + self.setLanguageFallbacks(fallbacks) def _registerMessageCatalog(self, language, catalog_name): key = language |