[Zope3-checkins] CVS: Zope3/src/zope/app/event/tests - placelesssetup.py:1.13 test_eventpublisher.py:1.8 test_objectevent.py:1.5

michael dunstan michael at elyt.com
Mon Feb 9 04:08:15 EST 2004


Update of /cvs-repository/Zope3/src/zope/app/event/tests
In directory cvs.zope.org:/tmp/cvs-serv31166/src/zope/app/event/tests

Modified Files:
	placelesssetup.py test_eventpublisher.py test_objectevent.py 
Log Message:
Add ObjectEventNotifier to replace IAddNotifier and friends.

It uses multiple subscription adapters to dispatch events to interested objects.

Work remains to convert existing uses of IAddNotifier, etc, so that we can then
remove them.


=== Zope3/src/zope/app/event/tests/placelesssetup.py 1.12 => 1.13 ===
--- Zope3/src/zope/app/event/tests/placelesssetup.py:1.12	Fri Nov 21 12:11:36 2003
+++ Zope3/src/zope/app/event/tests/placelesssetup.py	Mon Feb  9 04:07:44 2004
@@ -19,8 +19,9 @@
 
 from zope.component import getServiceManager
 from zope.app.services.servicenames import EventPublication
-from zope.app.interfaces.event import IPublisher, ISubscriber
+from zope.app.interfaces.event import IPublisher, ISubscriber, IObjectEvent
 from zope.app.event.globalservice import eventPublisher
+from zope.app.event.objectevent import objectEventNotifierInstance
 from zope.interface import implements
 
 events = []
@@ -58,6 +59,8 @@
 
         clearEvents()
         eventPublisher.globalSubscribe(EventRecorder)
+        eventPublisher.globalSubscribe(objectEventNotifierInstance,
+                                       IObjectEvent)
 
 import zope.testing.cleanup
 zope.testing.cleanup.addCleanUp(clearEvents)


=== Zope3/src/zope/app/event/tests/test_eventpublisher.py 1.7 => 1.8 ===
--- Zope3/src/zope/app/event/tests/test_eventpublisher.py:1.7	Thu Nov 27 08:59:18 2003
+++ Zope3/src/zope/app/event/tests/test_eventpublisher.py	Mon Feb  9 04:07:44 2004
@@ -36,10 +36,12 @@
 class DummyEvent:
 
     implements(IObjectAddedEvent, IObjectRemovedEvent)
+    object = None
 
 class ObjectEvent:
 
     implements(IObjectEvent)
+    object = None
 
 class TestEventService(PlacelessSetup, unittest.TestCase):
 


=== Zope3/src/zope/app/event/tests/test_objectevent.py 1.4 => 1.5 ===
--- Zope3/src/zope/app/event/tests/test_objectevent.py:1.4	Sun Sep 21 13:32:09 2003
+++ Zope3/src/zope/app/event/tests/test_objectevent.py	Mon Feb  9 04:07:44 2004
@@ -22,6 +22,16 @@
 from zope.app.event.objectevent import ObjectModifiedEvent
 from zope.app.event.objectevent import ObjectAnnotationsModifiedEvent
 from zope.app.event.objectevent import ObjectContentModifiedEvent
+from zope.app.event import objectevent
+from zope.app.container.contained import Contained, ObjectRemovedEvent
+from zope.app.interfaces.container import IContained, IObjectRemovedEvent
+from zope.app.interfaces.container import IObjectEvent
+from zope.app.interfaces.event import ISubscriber
+from zope.app.container.sample import SampleContainer
+from zope.app.tests.placelesssetup import setUp, tearDown
+from zope.app.services.servicenames import Adapters, EventPublication
+from zope.component import getService
+
 
 class TestObjectModifiedEvent(unittest.TestCase):
 
@@ -41,11 +51,70 @@
 class TestObjectContentModifiedEvent(TestObjectModifiedEvent):
     klass = ObjectContentModifiedEvent
 
+class TestObjectEventNotifications(unittest.TestCase):
+    def setUp(self):
+        self.callbackTriggered = False
+        setUp()
+
+    def testNotify(self):
+        notifier = objectevent.ObjectEventNotifier()
+        events = []
+
+        factory = objectevent.objectEventCallbackHelper(events.append)
+        getService(None, Adapters).provideSubscriptionAdapter(
+            IContained, ISubscriber, [factory], with=[IObjectRemovedEvent]
+        )
+
+        item = Contained()
+        event = ObjectRemovedEvent(item)
+        notifier.notify(event)
+        self.assertEqual([event], events)
+                
+    def testNotifyNobody(self):
+        # Check that notify won't raise an exception in absence of
+        # of subscribers.
+        notifier = objectevent.ObjectEventNotifier()
+        events = []
+        item = Contained()
+        evt = ObjectRemovedEvent(item)
+        notifier.notify(evt)
+        self.assertEqual([], events)
+
+    def testVeto(self):
+        eventPublication = getService(None, EventPublication)
+        eventPublication.globalSubscribe(objectevent.ObjectEventNotifier(),
+                                         IObjectEvent)
+        container = SampleContainer()
+        item = Contained()
+
+        # This will fire an event.
+        container['Fred'] = item
+
+        class Veto(Exception):
+            pass
+        
+        def callback(event):
+            self.callbackTriggered = True
+            self.assertEqual(item, event.object)
+            raise Veto
+
+        factory = objectevent.objectEventCallbackHelper(callback)
+        getService(None, Adapters).provideSubscriptionAdapter(
+            IContained, ISubscriber, [factory], with=[IObjectRemovedEvent]
+        )
+
+        # del container['Fred'] will fire an ObjectRemovedEvent event.
+        self.assertRaises(Veto, container.__delitem__, 'Fred')
+        
+    def tearDown(self):
+        tearDown()
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(TestObjectModifiedEvent),
         unittest.makeSuite(TestObjectAnnotationsModifiedEvent),
         unittest.makeSuite(TestObjectContentModifiedEvent),
+        unittest.makeSuite(TestObjectEventNotifications),
         ))
 
 if __name__=='__main__':




More information about the Zope3-Checkins mailing list