[Checkins] SVN: zope.lifecycleevent/trunk/ Added Python 3 and PyPy support and brought test coverage up to 100%.

Stephen Richter cvs-admin at zope.org
Mon Feb 11 16:59:30 UTC 2013


Log message for revision 129267:
  Added Python 3 and PyPy support and brought test coverage up to 100%.
  
  

Changed:
  _U  zope.lifecycleevent/trunk/
  U   zope.lifecycleevent/trunk/CHANGES.txt
  A   zope.lifecycleevent/trunk/MANIFEST.in
  U   zope.lifecycleevent/trunk/setup.py
  U   zope.lifecycleevent/trunk/src/zope/lifecycleevent/README.txt
  U   zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py
  U   zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py
  A   zope.lifecycleevent/trunk/tox.ini

-=-

Property changes on: zope.lifecycleevent/trunk
___________________________________________________________________
Modified: svn:ignore
   - bin
build
develop-eggs
dist
eggs
lib
parts
.installed.cfg

   + .coverage
.installed.cfg
.tox
bin
build
develop-eggs
dist
eggs
lib
parts
*.xml



Modified: zope.lifecycleevent/trunk/CHANGES.txt
===================================================================
--- zope.lifecycleevent/trunk/CHANGES.txt	2013-02-11 16:15:40 UTC (rev 129266)
+++ zope.lifecycleevent/trunk/CHANGES.txt	2013-02-11 16:59:30 UTC (rev 129267)
@@ -5,6 +5,10 @@
 4.0.0 (unreleased)
 ------------------
 
+- Test coverage at 100%.
+
+- Added support for Python 3.3 and PyPy.
+
 - Replaced deprecated ``zope.interface.implements`` usage with equivalent
   ``zope.interface.implementer`` decorator.
 

Added: zope.lifecycleevent/trunk/MANIFEST.in
===================================================================
--- zope.lifecycleevent/trunk/MANIFEST.in	                        (rev 0)
+++ zope.lifecycleevent/trunk/MANIFEST.in	2013-02-11 16:59:30 UTC (rev 129267)
@@ -0,0 +1,6 @@
+include *.rst
+include *.txt
+
+recursive-include src *
+
+global-exclude *.pyc

Modified: zope.lifecycleevent/trunk/setup.py
===================================================================
--- zope.lifecycleevent/trunk/setup.py	2013-02-11 16:15:40 UTC (rev 129266)
+++ zope.lifecycleevent/trunk/setup.py	2013-02-11 16:59:30 UTC (rev 129267)
@@ -39,6 +39,8 @@
         "Programming Language :: Python :: 2",
         "Programming Language :: Python :: 2.6",
         "Programming Language :: Python :: 2.7",
+        "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.3",
         'Operating System :: OS Independent',
         'Topic :: Internet :: WWW/HTTP',
         'Topic :: Software Development',
@@ -58,10 +60,8 @@
                       'zope.component',
                       'zope.event'],
     extras_require=dict(
-        test = [
-            'zope.component [test]',
-            'zope.container',
-            ]
+        test = []
         ),
+    test_suite='zope.lifecycleevent.tests.test_suite',
     zip_safe=False,
     )

Modified: zope.lifecycleevent/trunk/src/zope/lifecycleevent/README.txt
===================================================================
--- zope.lifecycleevent/trunk/src/zope/lifecycleevent/README.txt	2013-02-11 16:15:40 UTC (rev 129266)
+++ zope.lifecycleevent/trunk/src/zope/lifecycleevent/README.txt	2013-02-11 16:59:30 UTC (rev 129267)
@@ -16,7 +16,7 @@
 
     >>> obj = Sample()
     >>> notify(ObjectCreatedEvent(obj))
-    
+
     >>> obj.modified = True
     >>> notify(ObjectModifiedEvent(obj))
 
@@ -29,7 +29,7 @@
     >>> from zope.interface import Interface, Attribute, implementer
     >>> class IFile(Interface):
     ...     data = Attribute("Data")
-    ... 
+    ...
 
     >>> @implementer(IFile)
     ... class File(object):

Modified: zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py
===================================================================
--- zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py	2013-02-11 16:15:40 UTC (rev 129266)
+++ zope.lifecycleevent/trunk/src/zope/lifecycleevent/__init__.py	2013-02-11 16:59:30 UTC (rev 129267)
@@ -37,26 +37,14 @@
 class ObjectCreatedEvent(ObjectEvent):
     """An object has been created"""
 
-
-
 def created(object):
     notify(ObjectCreatedEvent(object))
 
 
 @implementer(IAttributes)
 class Attributes(object) :
-    """
-    Describes modified attributes of an interface.
+    """Describes modified attributes of an interface."""
 
-        >>> from zope.lifecycleevent.interfaces import IObjectMovedEvent
-        >>> desc = Attributes(IObjectMovedEvent, "newName", "newParent")
-        >>> desc.interface == IObjectMovedEvent
-        True
-        >>> 'newName' in desc.attributes
-        True
-    """
-
-
     def __init__(self, interface, *attributes) :
         self.interface = interface
         self.attributes = attributes
@@ -64,19 +52,8 @@
 
 @implementer(ISequence)
 class Sequence(object):
-    """
-    Describes modified keys of an interface.
+    """Describes modified keys of an interface."""
 
-        >>> from zope.container.interfaces import IContainer
-        >>> desc = Sequence(IContainer, 'foo', 'bar')
-        >>> desc.interface == IContainer
-        True
-        >>> desc.keys
-        ('foo', 'bar')
-
-    """
-
-
     def __init__(self, interface, *keys) :
         self.interface = interface
         self.keys = keys
@@ -87,21 +64,7 @@
 
 
     def __init__(self, object, *descriptions) :
-        """
-        Init with a list of modification descriptions.
-
-        >>> from zope.interface import implementer, Interface, Attribute
-        >>> class ISample(Interface) :
-        ...     field = Attribute("A test field")
-        >>> @implementer(ISample)
-        ... class Sample(object) :
-        ...     pass
-
-        >>> obj = Sample()
-        >>> obj.field = 42
-        >>> notify(ObjectModifiedEvent(obj, Attributes(ISample, "field")))
-
-        """
+        """Init with a list of modification descriptions."""
         super(ObjectModifiedEvent, self).__init__(object)
         self.descriptions = descriptions
 

Modified: zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py
===================================================================
--- zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py	2013-02-11 16:15:40 UTC (rev 129266)
+++ zope.lifecycleevent/trunk/src/zope/lifecycleevent/tests.py	2013-02-11 16:59:30 UTC (rev 129267)
@@ -13,25 +13,131 @@
 ##############################################################################
 """Object Event Tests
 """
-
 import doctest
 import unittest
 
 import zope.component.testing
-from zope.lifecycleevent import ObjectModifiedEvent
+from zope.lifecycleevent import ObjectCreatedEvent, created
+from zope.lifecycleevent import Attributes, Sequence
+from zope.lifecycleevent import ObjectModifiedEvent, modified
+from zope.lifecycleevent import ObjectCopiedEvent, copied
 
 
+class TestSequence(unittest.TestCase):
+    def testSequence(self):
+        from zope.interface import Interface, Attribute
+        class ISample(Interface) :
+            field1 = Attribute("A test field")
+            field2 = Attribute("A test field")
+            field3 = Attribute("A test field")
+
+        desc = Sequence(ISample, 'field1', 'field2')
+        self.assertEqual(desc.interface, ISample)
+        self.assertEqual(desc.keys, ('field1', 'field2'))
+
+
+class TestAttributes(unittest.TestCase):
+    def testAttributes(self):
+        from zope.lifecycleevent.interfaces import IObjectMovedEvent
+        desc = Attributes(IObjectMovedEvent, "newName", "newParent")
+        self.assertEqual(desc.interface, IObjectMovedEvent)
+        self.assertEqual(desc.attributes, ('newName', 'newParent'))
+
+
+class TestObjectCreatedEvent(unittest.TestCase):
+
+    klass = ObjectCreatedEvent
+    object = object()
+
+    def setUp(self):
+        from zope.event import subscribers
+        self._old_subscribers = subscribers[:]
+        self.listener = []
+        subscribers[:] = [self.listener.append]
+        self.event = self.klass(self.object)
+
+    def tearDown(self):
+        from zope.event import subscribers
+        subscribers[:] = self._old_subscribers
+
+    def testGetObject(self):
+        self.assertEqual(self.event.object, self.object)
+
+    def testCreated(self):
+        created(self.object)
+        self.assertEqual(len(self.listener), 1)
+        self.assertEqual(self.listener[-1].object, self.object)
+
+
 class TestObjectModifiedEvent(unittest.TestCase):
 
     klass = ObjectModifiedEvent
     object = object()
 
     def setUp(self):
+        from zope.event import subscribers
+        self._old_subscribers = subscribers[:]
+        self.listener = []
+        subscribers[:] = [self.listener.append]
         self.event = self.klass(self.object)
 
+    def tearDown(self):
+        from zope.event import subscribers
+        subscribers[:] = self._old_subscribers
+
     def testGetObject(self):
         self.assertEqual(self.event.object, self.object)
 
+    def testModified(self):
+        modified(self.object)
+        self.assertEqual(len(self.listener), 1)
+        self.assertEqual(self.listener[-1].object, self.object)
+
+    def testAttributes(self):
+        from zope.interface import implementer, Interface, Attribute
+
+        class ISample(Interface) :
+            field = Attribute("A test field")
+
+        @implementer(ISample)
+        class Sample(object) :
+            pass
+        obj = Sample()
+        obj.field = 42
+        attrs = Attributes(ISample, "field")
+
+        modified(obj, attrs)
+        self.assertEqual(self.listener[-1].object, obj)
+        self.assertEqual(self.listener[-1].descriptions, (attrs,))
+
+
+class TestObjectCopiedEvent(unittest.TestCase):
+
+    klass = ObjectCopiedEvent
+    original = object()
+    object = object()
+
+    def setUp(self):
+        from zope.event import subscribers
+        self._old_subscribers = subscribers[:]
+        self.listener = []
+        subscribers[:] = [self.listener.append]
+        self.event = self.klass(self.object, self.original)
+
+    def tearDown(self):
+        from zope.event import subscribers
+        subscribers[:] = self._old_subscribers
+
+    def testGetObject(self):
+        self.assertEqual(self.event.object, self.object)
+
+    def testCopied(self):
+        copied(self.object, self.original)
+        self.assertEqual(len(self.listener), 1)
+        self.assertEqual(self.listener[-1].object, self.object)
+        self.assertEqual(self.listener[-1].original, self.original)
+
+
 class TestObjectMovedEvent(unittest.TestCase):
 
     def _getTargetClass(self):
@@ -57,7 +163,7 @@
         from zope.interface.verify import verifyClass
         from zope.lifecycleevent.interfaces import IObjectMovedEvent
         verifyClass(IObjectMovedEvent, self._getTargetClass())
-        
+
     def test_verifyObject(self):
         from zope.interface.verify import verifyObject
         from zope.lifecycleevent.interfaces import IObjectMovedEvent
@@ -100,7 +206,7 @@
         from zope.interface.verify import verifyClass
         from zope.lifecycleevent.interfaces import IObjectAddedEvent
         verifyClass(IObjectAddedEvent, self._getTargetClass())
-        
+
     def test_verifyObject(self):
         from zope.interface.verify import verifyObject
         from zope.lifecycleevent.interfaces import IObjectAddedEvent
@@ -143,7 +249,7 @@
         from zope.interface.verify import verifyClass
         from zope.lifecycleevent.interfaces import IObjectRemovedEvent
         verifyClass(IObjectRemovedEvent, self._getTargetClass())
-        
+
     def test_verifyObject(self):
         from zope.interface.verify import verifyObject
         from zope.lifecycleevent.interfaces import IObjectRemovedEvent
@@ -156,7 +262,11 @@
 
 def test_suite():
     return unittest.TestSuite((
+        unittest.makeSuite(TestAttributes),
+        unittest.makeSuite(TestSequence),
+        unittest.makeSuite(TestObjectCreatedEvent),
         unittest.makeSuite(TestObjectModifiedEvent),
+        unittest.makeSuite(TestObjectCopiedEvent),
         unittest.makeSuite(TestObjectMovedEvent),
         unittest.makeSuite(TestObjectAddedEvent),
         unittest.makeSuite(TestObjectRemovedEvent),

Added: zope.lifecycleevent/trunk/tox.ini
===================================================================
--- zope.lifecycleevent/trunk/tox.ini	                        (rev 0)
+++ zope.lifecycleevent/trunk/tox.ini	2013-02-11 16:59:30 UTC (rev 129267)
@@ -0,0 +1,27 @@
+[tox]
+envlist =
+    py26,py27,py33,pypy
+
+[testenv]
+commands =
+    python setup.py test -q
+# without explicit deps, setup.py test will download a bunch of eggs into $PWD
+deps =
+    zope.interface
+    zope.component
+    zope.event
+
+[testenv:coverage]
+basepython =
+    python2.7
+commands =
+#   The installed version messes up nose's test discovery / coverage reporting
+#   So, we uninstall that from the environment, and then install the editable
+#   version, before running nosetests.
+    pip uninstall -y zope.lifecycleevent
+    pip install -e .
+    nosetests --with-xunit --with-xcoverage
+deps =
+    nose
+    coverage
+    nosexcover



More information about the checkins mailing list