[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