summaryrefslogtreecommitdiff
path: root/src/zope/i18nmessageid
diff options
context:
space:
mode:
authorJason Madden <jamadden@gmail.com>2017-05-01 16:35:14 -0500
committerJason Madden <jamadden@gmail.com>2017-05-01 16:43:06 -0500
commit5954f86733df49920427de4a931b23f8c5db9c95 (patch)
treed4816cc4a225c052e00de1da46f685d8607e2934 /src/zope/i18nmessageid
parentceb5981168a9b5b6c07b307cdf7fa11c96bb8fc7 (diff)
downloadzope-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.py8
-rw-r--r--src/zope/i18nmessageid/tests.py33
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__),
))