diff options
author | Jason Madden <jamadden@gmail.com> | 2017-05-01 16:35:14 -0500 |
---|---|---|
committer | Jason Madden <jamadden@gmail.com> | 2017-05-01 16:43:06 -0500 |
commit | 5954f86733df49920427de4a931b23f8c5db9c95 (patch) | |
tree | d4816cc4a225c052e00de1da46f685d8607e2934 /src/zope/i18nmessageid | |
parent | ceb5981168a9b5b6c07b307cdf7fa11c96bb8fc7 (diff) | |
download | zope-i18nmessageid-5954f86733df49920427de4a931b23f8c5db9c95.tar.gz |
Use C extension in Python 3, and make Python version handle ``default`` the sameissue4
Fixes #4 and fixes #5.
Add a specific test case for both of these things.
Enabling the C extension on Python 3 revealed more places where
readonly attributes can raise different exceptions so fix those tests.
Also add Python 3.6 to the supported list, and use zope.testrunner to
workaround the namespace package issue.
Diffstat (limited to 'src/zope/i18nmessageid')
-rw-r--r-- | src/zope/i18nmessageid/message.py | 8 | ||||
-rw-r--r-- | src/zope/i18nmessageid/tests.py | 33 |
2 files changed, 25 insertions, 16 deletions
diff --git a/src/zope/i18nmessageid/message.py b/src/zope/i18nmessageid/message.py index e46cad6..0e62408 100644 --- a/src/zope/i18nmessageid/message.py +++ b/src/zope/i18nmessageid/message.py @@ -41,11 +41,7 @@ class Message(unicode): mapping = ustr.mapping and ustr.mapping.copy() or mapping ustr = unicode(ustr) self.domain = domain - if default is None: - # MessageID does: self.default = ustr - self.default = default - else: - self.default = unicode(default) + self.default = default self.mapping = mapping self._readonly = True return self @@ -70,7 +66,7 @@ class Message(unicode): pyMessage = Message try: - from _zope_i18nmessageid_message import Message + from ._zope_i18nmessageid_message import Message except ImportError: # pragma: no cover pass diff --git a/src/zope/i18nmessageid/tests.py b/src/zope/i18nmessageid/tests.py index 560750b..0e8f6b4 100644 --- a/src/zope/i18nmessageid/tests.py +++ b/src/zope/i18nmessageid/tests.py @@ -13,15 +13,17 @@ ############################################################################## """Message ID tests. """ +import sys import unittest +from zope.i18nmessageid import message as messageid + class PyMessageTests(unittest.TestCase): _TEST_REAOONLY = True def _getTargetClass(self): - from zope.i18nmessageid.message import pyMessage - return pyMessage + return messageid.pyMessage def _makeOne(self, *args, **kw): return self._getTargetClass()(*args, **kw) @@ -71,20 +73,23 @@ class PyMessageTests(unittest.TestCase): message = self._makeOne('testing') def _try(): message.domain = 'domain' - self.assertRaises(TypeError, _try) + # C version raises AttributeError, Python version TypeError + self.assertRaises((TypeError, AttributeError), _try) def test_default_immutable(self): message = self._makeOne('testing') def _try(): message.default = 'default' - self.assertRaises(TypeError, _try) + # C version raises AttributeError, Python version TypeError + self.assertRaises((TypeError, AttributeError), _try) def test_mapping_immutable(self): mapping = {'key': 'value'} message = self._makeOne('testing') def _try(): message.mapping = mapping - self.assertRaises(TypeError, _try) + # C version raises AttributeError, Python version TypeError + self.assertRaises((TypeError, AttributeError), _try) def test_unknown_immutable(self): message = self._makeOne('testing') @@ -101,15 +106,25 @@ class PyMessageTests(unittest.TestCase): self.assertTrue(klass is self._getTargetClass()) self.assertEqual(state, ('testing', 'domain', 'default', mapping)) + def test_non_unicode_default(self): + message = self._makeOne(u'str', default=123) + self.assertEqual(message.default, 123) +@unittest.skipIf(messageid.Message is messageid.pyMessage, + "Duplicate tests") class MessageTests(PyMessageTests): _TEST_REAOONLY = False def _getTargetClass(self): - from zope.i18nmessageid.message import Message - return Message + return messageid.Message + +@unittest.skipIf('java' in sys.platform or hasattr(sys, 'pypy_version_info'), + "We don't expect the C implementation here") +class OptimizationTests(unittest.TestCase): + def test_optimizations_available(self): + self.assertIsNot(messageid.Message, messageid.pyMessage) class MessageFactoryTests(unittest.TestCase): @@ -144,7 +159,5 @@ class MessageFactoryTests(unittest.TestCase): def test_suite(): return unittest.TestSuite(( - unittest.makeSuite(PyMessageTests), - unittest.makeSuite(MessageTests), - unittest.makeSuite(MessageFactoryTests), + unittest.defaultTestLoader.loadTestsFromName(__name__), )) |