[Checkins] SVN: zope.i18nmessageid/branches/tseaver-no_2to3/ Explicit unittest coverage.

Tres Seaver cvs-admin at zope.org
Fri Apr 6 22:49:06 UTC 2012


Log message for revision 125049:
  Explicit unittest coverage.
  
  Drop doctests, whose examples are now part of the narrative docs.

Changed:
  U   zope.i18nmessageid/branches/tseaver-no_2to3/CHANGES.txt
  U   zope.i18nmessageid/branches/tseaver-no_2to3/setup.py
  U   zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/message.py
  U   zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/tests.py

-=-
Modified: zope.i18nmessageid/branches/tseaver-no_2to3/CHANGES.txt
===================================================================
--- zope.i18nmessageid/branches/tseaver-no_2to3/CHANGES.txt	2012-04-06 22:48:59 UTC (rev 125048)
+++ zope.i18nmessageid/branches/tseaver-no_2to3/CHANGES.txt	2012-04-06 22:49:03 UTC (rev 125049)
@@ -5,6 +5,8 @@
 4.0.0 (unreleased)
 ------------------
 
+- Move doctest examples into Sphinx documentation.
+
 - Dropped explicit support for Python 2.4 / 2.5 / 3.1.
 
 - Added explicit support for PyPy.

Modified: zope.i18nmessageid/branches/tseaver-no_2to3/setup.py
===================================================================
--- zope.i18nmessageid/branches/tseaver-no_2to3/setup.py	2012-04-06 22:48:59 UTC (rev 125048)
+++ zope.i18nmessageid/branches/tseaver-no_2to3/setup.py	2012-04-06 22:49:03 UTC (rev 125049)
@@ -106,8 +106,6 @@
     description='Message Identifiers for internationalization',
     long_description=(
         read('README.txt')
-        + '\n\n.. contents::\n\n' +
-        read('src', 'zope', 'i18nmessageid', 'messages.txt')
         + '\n\n' +
         read('CHANGES.txt')
         ),

Modified: zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/message.py
===================================================================
--- zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/message.py	2012-04-06 22:48:59 UTC (rev 125048)
+++ zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/message.py	2012-04-06 22:49:03 UTC (rev 125049)
@@ -11,7 +11,7 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-"""I18n Messages
+"""I18n Messages and factories.
 """
 __docformat__ = "reStructuredText"
 
@@ -23,77 +23,6 @@
     display when there is no translation.  domain may be None meaning there is
     no translation domain.  default may also be None, in which case the
     message id itself implicitly serves as the default text.
-
-    These are the doc tests from message.txt. Note that we have to create the
-    message manually since MessageFactory would return the C implementation.
-
-    >>> from zope.i18nmessageid.message import Message
-    >>> robot = Message(u"robot-message", 'futurama', u"${name} is a robot.")
-
-    >>> robot == u'robot-message'
-    True
-    >>> isinstance(robot, unicode)
-    True
-
-    >>> robot.default == u'${name} is a robot.'
-    True
-    >>> robot.mapping
-
-    >>> robot.domain = "planetexpress"
-    Traceback (most recent call last):
-    ...
-    TypeError: readonly attribute
-
-    >>> robot.default = u"${name} is not a robot."
-    Traceback (most recent call last):
-    ...
-    TypeError: readonly attribute
-
-    >>> robot.mapping = {u'name': u'Bender'}
-    Traceback (most recent call last):
-    ...
-    TypeError: readonly attribute
-
-    >>> new_robot = Message(robot, mapping={u'name': u'Bender'})
-    >>> new_robot == u'robot-message'
-    True
-    >>> new_robot.domain == 'futurama'
-    True
-    >>> new_robot.default == u'${name} is a robot.'
-    True
-    >>> new_robot.mapping == {u'name': u'Bender'}
-    True
-
-    >>> callable, args = new_robot.__reduce__()
-    >>> callable is Message
-    True
-    >>> args == (u'robot-message',
-    ...          'futurama',
-    ...          u'${name} is a robot.',
-    ...          {u'name': u'Bender'})
-    True
-
-    >>> fembot = Message(u'fembot')
-    >>> callable, args = fembot.__reduce__()
-    >>> callable is Message
-    True
-    >>> args == (u'fembot', None, None, None)
-    True
-
-    Check if pickling and unpickling works
-    >>> from pickle import dumps, loads
-    >>> pystate = dumps(new_robot)
-    >>> pickle_bot = loads(pystate)
-    >>> (pickle_bot,
-    ...  pickle_bot.domain,
-    ...  pickle_bot.default,
-    ...  pickle_bot.mapping) == (u'robot-message',
-    ...                          'futurama',
-    ...                          u'${name} is a robot.',
-    ...                          {u'name': u'Bender'})
-    True
-    >>> pickle_bot.__reduce__()[0] is Message
-    True
     """
 
     __slots__ = ('domain', 'default', 'mapping', '_readonly')
@@ -125,13 +54,13 @@
         else:
             return unicode.__setattr__(self, key, value)
 
-    def __reduce__(self):
-        return self.__class__, self.__getstate__()
-
     def __getstate__(self):
         return unicode(self), self.domain, self.default, self.mapping
 
-# save a copy for the unit tests
+    def __reduce__(self):
+        return self.__class__, self.__getstate__()
+
+# Name the fallback Python implementation to make it easier to test.
 pyMessage = Message
 
 try:

Modified: zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/tests.py
===================================================================
--- zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/tests.py	2012-04-06 22:48:59 UTC (rev 125048)
+++ zope.i18nmessageid/branches/tseaver-no_2to3/src/zope/i18nmessageid/tests.py	2012-04-06 22:49:03 UTC (rev 125049)
@@ -14,20 +14,110 @@
 """Message ID tests.
 """
 import unittest
-from doctest import DocFileSuite
-from doctest import DocTestSuite
 
-class PickleEqualityTests(unittest.TestCase):
-    def setUp(self):
-        # set the C version up as the used version
-        import zope.i18nmessageid.message
-        self.oldMessage = zope.i18nmessageid.message.Message
+class PyMessageTests(unittest.TestCase):
 
-    def tearDown(self):
-        # set the original version back up as the used version
-        import zope.i18nmessageid.message
-        zope.i18nmessageid.message.Message = self.oldMessage
+    _TEST_REAOONLY = True
 
+    def _getTargetClass(self):
+        from zope.i18nmessageid.message import pyMessage
+        return pyMessage
+
+    def _makeOne(self, *args, **kw):
+        return self._getTargetClass()(*args, **kw)
+
+    def test_ctor_defaults(self):
+        message = self._makeOne('testing')
+        self.assertEqual(message, 'testing')
+        self.assertEqual(message.domain, None)
+        self.assertEqual(message.default, None)
+        self.assertEqual(message.mapping, None)
+        if self._TEST_REAOONLY:
+            self.assertTrue(message._readonly)
+
+    def test_ctor_explicit(self):
+        mapping = {'key': 'value'}
+        message = self._makeOne('testing', 'domain', 'default', mapping)
+        self.assertEqual(message, 'testing')
+        self.assertEqual(message.domain, 'domain')
+        self.assertEqual(message.default, 'default')
+        self.assertEqual(message.mapping, mapping)
+        if self._TEST_REAOONLY:
+            self.assertTrue(message._readonly)
+
+    def test_ctor_copy(self):
+        mapping = {'key': 'value'}
+        source = self._makeOne('testing', 'domain', 'default', mapping)
+        message = self._makeOne(source)
+        self.assertEqual(message, 'testing')
+        self.assertEqual(message.domain, 'domain')
+        self.assertEqual(message.default, 'default')
+        self.assertEqual(message.mapping, mapping)
+        if self._TEST_REAOONLY:
+            self.assertTrue(message._readonly)
+
+    def test_ctor_copy_w_overrides(self):
+        mapping = {'key': 'value'}
+        source = self._makeOne('testing')
+        message = self._makeOne(source, 'domain', 'default', mapping)
+        self.assertEqual(message, 'testing')
+        self.assertEqual(message.domain, 'domain')
+        self.assertEqual(message.default, 'default')
+        self.assertEqual(message.mapping, mapping)
+        if self._TEST_REAOONLY:
+            self.assertTrue(message._readonly)
+
+    def test_domain_immutable(self):
+        message = self._makeOne('testing')
+        def _try():
+            message.domain = 'domain'
+        self.assertRaises(TypeError, _try)
+
+    def test_default_immutable(self):
+        message = self._makeOne('testing')
+        def _try():
+            message.default = 'default'
+        self.assertRaises(TypeError, _try)
+
+    def test_mapping_immutable(self):
+        mapping = {'key': 'value'}
+        message = self._makeOne('testing')
+        def _try():
+            message.mapping = mapping
+        self.assertRaises(TypeError, _try)
+
+    def test_unknown_immutable(self):
+        message = self._makeOne('testing')
+        def _try():
+            message.unknown = 'unknown'
+        self.assertRaises(TypeError, _try)
+
+    def test___getstate__(self):
+        mapping = {'key': 'value'}
+        source = self._makeOne('testing')
+        message = self._makeOne(source, 'domain', 'default', mapping)
+        state = message.__getstate__()
+        self.assertEqual(state, ('testing', 'domain', 'default', mapping))
+
+    def test___reduce__(self):
+        mapping = {'key': 'value'}
+        source = self._makeOne('testing')
+        message = self._makeOne(source, 'domain', 'default', mapping)
+        klass, state = message.__reduce__()
+        self.assertTrue(klass is self._getTargetClass())
+        self.assertEqual(state, ('testing', 'domain', 'default', mapping))
+
+class MessageTests(PyMessageTests):
+
+    _TEST_REAOONLY = False
+
+    def _getTargetClass(self):
+        from zope.i18nmessageid.message import Message
+        return Message
+
+
+class Functional(unittest.TestCase):
+
     def test_message_pickling(self):
         from zope.i18nmessageid.message import pyMessage as Message
         robot = Message(u"robot-message", 'futurama', u"${name} is a robot.")
@@ -117,23 +207,8 @@
         # Both pickle states should be equal
         self.assertEqual(pystate, cstate)
 
-try:
-    from zope.i18nmessageid._zope_i18nmessageid_message import (
-                                                    Message as import_test)
-    def test_suite():
-        return unittest.TestSuite((
-	    DocTestSuite('zope.i18nmessageid.message'),
-	    DocFileSuite('messages.txt', package='zope.i18nmessageid'),
-            unittest.makeSuite(PickleEqualityTests),
-	    ))
-except ImportError, e: # pragma: no cover
-    print '=' * 80
-    print "Could not import C version:"
-    print e
-    print '=' * 80
-    def test_suite():
-        return unittest.TestSuite((
-	    DocTestSuite('zope.i18nmessageid.message'),
-	    DocFileSuite('messages.txt', package='zope.i18nmessageid'),
-	    ))
-    
+
+def test_suite():
+    return unittest.TestSuite((
+        unittest.makeSuite(PyMessageTests),
+    ))



More information about the checkins mailing list