summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Madden <jamadden@gmail.com>2017-12-17 09:44:29 -0600
committerJason Madden <jamadden@gmail.com>2017-12-17 09:44:29 -0600
commita4cf800dc23b5fc3072e26db539edc3c92891113 (patch)
tree1107fceb95b6ffa79846b191d27fba2a6ee38d5d
parentac16be8fed6cc840ad0f3244c883c8b7a672f643 (diff)
downloadzope-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.
-rw-r--r--CHANGES.rst4
-rw-r--r--src/zope/i18n/tests/test_itranslationdomain.py4
-rw-r--r--src/zope/i18n/tests/test_translationdomain.py45
-rw-r--r--src/zope/i18n/translationdomain.py11
4 files changed, 40 insertions, 24 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index 314cf19..2d2fe46 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -11,6 +11,10 @@
- Remove the private ``_compat`` module and its utility function ``_u``
in favor of Unicode literals.
+- ``TranslationDomain`` no longer extends ``SimpleTranslationDomain``.
+ It overrode every method and didn't properly initialize the super
+ class. ``TranslationDomain`` continues to implement ``ITranslationDomain``.
+
4.2.0 (2017-05-23)
==================
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