Changeset 4
- Timestamp:
- 11/11/07 21:56:52 (1 year ago)
- Files:
-
- trunk/src/Pyxoo/commands/delegate.py (added)
- trunk/src/Pyxoo/commands/locator.py (modified) (3 diffs)
- trunk/src/Pyxoo/events/broadcaster.py (modified) (7 diffs)
- trunk/test/commands/TestCommandLocator.py (modified) (1 diff)
- trunk/test/commands/TestDelegate.py (added)
- trunk/test/events/TestEventBroadcaster.py (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/Pyxoo/commands/locator.py
r3 r4 43 43 return self.__commands.get(key) 44 44 45 def addCommand(self, key, commandClass ):46 """ addCommand(string, class):void47 Adds passed-in command associated to passed-in key."""45 def registerCommand(self, key, commandClass ): 46 """registerCommand(string, class):void 47 Registers passed-in command associated to passed-in key.""" 48 48 if not Type.isClass( commandClass ): 49 49 raise TypeError("commandClass param must be a class implementation of Command interface") … … 58 58 self.__commands.__setitem__(key, l) 59 59 60 def removeCommand(self, key, commandClass):61 """ removeCommand(string, class):boolean62 Removes passed-in command associated to passed-in key."""60 def unregisterCommand(self, key, commandClass): 61 """unregisterCommand(string, class):boolean 62 Unregisters passed-in command associated to passed-in key.""" 63 63 if not Type.isClass( commandClass ): 64 64 raise TypeError("commandClass param must be a class implementation of Command interface") … … 73 73 return False 74 74 75 def removeCommands(self, key):76 """ removeCommands(string):boolean77 Removes all commands associated to the passed-in key."""75 def unregisterCommands(self, key): 76 """unregisterCommands(string):boolean 77 Unregisters all commands associated to the passed-in key.""" 78 78 if self.isRegistered( key ): 79 79 self.__commands.__delitem__(key) 80 80 return True 81 81 return False 82 83 def __str__(self): 84 """__str__():String 85 Returns the string representation of this instance.""" 86 return PyxooStringifier.stringify(self) trunk/src/Pyxoo/events/broadcaster.py
r3 r4 26 26 from Pyxoo.exceptions import * 27 27 from Pyxoo.log.stringifier import PyxooStringifier 28 from Pyxoo.commands.delegate import Delegate 28 29 29 30 class EventBroadcaster(object): … … 43 44 self.__eventListeners = dict() 44 45 self.__eventTypes = list() 46 self.__functions = dict() 45 47 46 48 @classmethod … … 79 81 return False 80 82 81 def addEventListener(self, eventType, listener ):83 def addEventListener(self, eventType, listener, *args): 82 84 """addEventListener(string, instance):boolean 83 85 Adds passed-in listener for receiving passed-in event type.""" 84 86 if not Type.isString(eventType): 85 raise TypeError("eventType param must be a String") 87 raise TypeError("eventType param must be a String") 88 if Type.isFunction(listener) or Type.isMethod(listener): 89 if not self.__functions.__contains__(eventType): 90 self.__functions.__setitem__(eventType, dict()) 91 if not self.__functions[eventType].__contains__(listener): 92 tmp = listener 93 listener = Delegate( listener ) 94 listener.setArgumentsArray(list(args)) 95 self.__functions[eventType][tmp] = listener 96 else: 97 return False 98 elif not hasattr(listener, eventType) or not callable(getattr(listener, eventType)): 99 raise UnsupportedOperationError( "EventBroadcaster.addEventListener() failed, you must implement '" + eventType + "' method or 'handleEvent' method in '" + PyxooStringifier.stringify(listener) + "' class" ) 86 100 if self.hasListenerCollection(eventType): 87 101 if self.__eventListeners[eventType].__contains__(listener): … … 99 113 Removes passed-in listener that suscribed for passed-in event.""" 100 114 if not Type.isString(eventType): 101 raise TypeError("eventType param must be a String") 115 raise TypeError("eventType param must be a String") 116 if Type.isFunction(listener) or Type.isMethod(listener): 117 if self.__functions.__contains__(eventType): 118 if self.__functions[eventType].__contains__(listener): 119 tmp = listener 120 listener = self.__functions[eventType][listener] 121 self.__functions[eventType].__delitem__(tmp) 122 if self.__functions[eventType].__len__() == 0: 123 self.__functions.__delitem__(eventType) 102 124 if self.hasListenerCollection(eventType): 103 125 if self.__eventListeners[eventType].__contains__(listener): … … 115 137 if self.__eventTypes.__contains__(eventType): 116 138 self.__eventTypes.remove(eventType) 139 self.__eventListeners.__delitem__(eventType) 140 if self.__functions.__contains__(eventType): 141 self.__functions.__delitem__(eventType) 117 142 118 143 def hasListenerCollection(self, eventType): … … 148 173 if not Type.isString(eventType): 149 174 raise TypeError("eventType param must be a String") 150 if( self.__eventListeners.__contains__(eventType) ): 175 if Type.isFunction(listener) or Type.isMethod(listener): 176 if self.__functions.__contains__(eventType): 177 return self.__functions[eventType].__contains__(listener) 178 else: 179 return False 180 elif( self.__eventListeners.__contains__(eventType) ): 151 181 return self.__eventListeners[eventType].__contains__(listener) 152 182 else: … … 178 208 if event.getEventType() in dir(listener) and callable(getattr(listener, event.getEventType())): 179 209 getattr(listener, event.getEventType())(event) 210 elif hasattr(listener, "handleEvent") and callable(getattr(listener, "handleEvent")): 211 listener.handleEvent(event) 180 212 else: 181 213 raise UnsupportedOperationError( "EventBroadcaster.broadcastEvent() failed, you must implement '%s' method in '%s' class."%(event.getEventType(), listener.__class__.__name__) ) trunk/test/commands/TestCommandLocator.py
r3 r4 35 35 self.instance = CommandLocator() 36 36 37 def test AddCommand(self):37 def testRegisterCommand(self): 38 38 self.assertFalse( self.instance.isRegistered("run") ) 39 self.instance. addCommand("run", MyCommand1)39 self.instance.registerCommand("run", MyCommand1) 40 40 self.assertTrue( self.instance.isRegistered("run") ) 41 self.instance. addCommand("run", MyCommand2)41 self.instance.registerCommand("run", MyCommand2) 42 42 self.assertTrue( self.instance.isRegistered("run") ) 43 43 44 def test RemoveCommand(self):45 self.instance. addCommand("run", MyCommand1)46 self.instance. addCommand("run", MyCommand2)44 def testUnregisterCommand(self): 45 self.instance.registerCommand("run", MyCommand1) 46 self.instance.registerCommand("run", MyCommand2) 47 47 self.assertEquals( 2, self.instance.locate("run").__len__() ) 48 self.assertTrue(self.instance. removeCommand("run", MyCommand1))48 self.assertTrue(self.instance.unregisterCommand("run", MyCommand1)) 49 49 self.assertTrue( self.instance.isRegistered("run") ) 50 self.assertFalse(self.instance. removeCommand("run", MyCommand1))50 self.assertFalse(self.instance.unregisterCommand("run", MyCommand1)) 51 51 self.assertEquals( 1, self.instance.locate("run").__len__() ) 52 self.assertTrue(self.instance. removeCommand("run", MyCommand2))52 self.assertTrue(self.instance.unregisterCommand("run", MyCommand2)) 53 53 self.assertFalse( self.instance.isRegistered("run") ) 54 self.assertFalse(self.instance. removeCommand("run", MyCommand2))54 self.assertFalse(self.instance.unregisterCommand("run", MyCommand2)) 55 55 56 def test RemoveCommands(self):57 self.instance. addCommand("run", MyCommand1)58 self.instance. addCommand("run", MyCommand2)59 self.instance. addCommand("yop", MyCommand1)60 self.instance. addCommand("yop", MyCommand2)61 self.assertTrue( self.instance. removeCommands("run") )62 self.assertFalse( self.instance. removeCommands("run") )56 def testUnregisterCommands(self): 57 self.instance.registerCommand("run", MyCommand1) 58 self.instance.registerCommand("run", MyCommand2) 59 self.instance.registerCommand("yop", MyCommand1) 60 self.instance.registerCommand("yop", MyCommand2) 61 self.assertTrue( self.instance.unregisterCommands("run") ) 62 self.assertFalse( self.instance.unregisterCommands("run") ) 63 63 self.assertFalse( self.instance.isRegistered("run") ) 64 64 self.assertTrue( self.instance.isRegistered("yop") ) 65 65 66 66 def testLocate(self): 67 self.instance. addCommand("run", MyCommand1)68 self.instance. addCommand("run", MyCommand2)69 self.instance. addCommand("run", MyCommand2)67 self.instance.registerCommand("run", MyCommand1) 68 self.instance.registerCommand("run", MyCommand2) 69 self.instance.registerCommand("run", MyCommand2) 70 70 result = self.instance.locate("run") 71 71 self.assertEquals( 2, result.__len__()) trunk/test/events/TestEventBroadcaster.py
r3 r4 17 17 # 18 18 19 __version__ = "0.1" 20 __author__ = "Alexis Couronne - http://www.skitoo.org" 19 import Pyxoo 20 __version__ = Pyxoo.__version__ 21 __author__ = Pyxoo.__author__ 21 22 22 23 import unittest … … 34 35 event.setInteger( event.getInteger() + 1 ) 35 36 36 37 def myFunction(event): 38 event.setInteger( event.getInteger() + 100 ) 39 37 40 class TestEventBroadcaster(unittest.TestCase): 38 41 def setUp(self): … … 69 72 self.instance.removeListener( self.listener ) 70 73 self.assertFalse( self.instance.isRegistered(self.listener) ) 71 self.instance.addEventListener( "evtType", self.listener )74 self.instance.addEventListener( self.eventType, self.listener ) 72 75 self.assertTrue( self.instance.isRegistered(self.listener) ) 73 76 … … 82 85 self.assertTrue( self.instance.addEventListener(self.eventType, MySecondListener() ) ) 83 86 self.assertFalse( self.instance.addEventListener(self.eventType, self.listener) ) 87 self.assertRaises( UnsupportedOperationError, self.instance.addEventListener, "plop", self.listener) 84 88 85 89 def testRemoveListener(self): … … 88 92 self.assertTrue( self.instance.removeEventListener(self.eventType, self.listener) ) 89 93 self.assertFalse( self.instance.removeEventListener(self.eventType, self.listener) ) 90 91 self.instance.addEventListener("plop", self.listener) 92 self.assertFalse( self.instance.removeEventListener(self.eventType, self.listener) ) 93 self.assertTrue( self.instance.removeEventListener("plop", self.listener) ) 94 94 95 95 listener = MySecondListener() 96 96 self.instance.addEventListener(self.eventType, listener) … … 105 105 self.assertTrue( self.instance.isEmpty() ) 106 106 107 self.instance.addEventListener( "test", self.listener )107 self.instance.addEventListener( self.eventType, self.listener ) 108 108 self.assertFalse( self.instance.isEmpty() ) 109 109 110 110 def testRemoveAllListeners(self): 111 111 self.instance.addListener( self.listener ) 112 self.instance.addEventListener( "test", MySecondListener() )112 self.instance.addEventListener( self.eventType, MySecondListener() ) 113 113 self.instance.removeAllListeners() 114 114 self.assertTrue( self.instance.isEmpty() ) … … 129 129 self.instance.removeListener(self.listener) 130 130 listener = MySecondListener() 131 self.instance.addEventListener( "plop", listener)131 self.instance.addEventListener(self.eventType, listener) 132 132 self.assertEquals( [], self.instance.getListenerCollection() ) 133 self.assertEquals( [listener], self.instance.getListenerCollection( "plop") )133 self.assertEquals( [listener], self.instance.getListenerCollection(self.eventType) ) 134 134 135 135 def testRemoveListenerCollection(self): … … 158 158 self.assertRaises( UnsupportedOperationError, self.instance.broadcastEvent, mySecondEvent) 159 159 160 def testWithDelegate(self): 161 self.assertTrue(self.instance.addEventListener(self.eventType, myFunction)) 162 self.assertTrue(self.instance.addEventListener("coucou", myFunction)) 163 self.assertFalse(self.instance.addEventListener(self.eventType, myFunction)) 164 165 self.assertTrue( self.instance.hasListenerCollection(self.eventType) ) 166 self.assertTrue( self.instance.hasListenerCollection("coucou") ) 167 168 self.assertEquals( 1, self.instance.getListenerCollection(self.eventType).__len__() ) 169 self.assertEquals( 1, self.instance.getListenerCollection("coucou").__len__() ) 170 171 self.assertTrue( self.instance.isRegistered(myFunction, self.eventType) ) 172 self.assertTrue( self.instance.isRegistered(myFunction, "coucou") ) 173 174 myEvent = IntegerEvent(self.eventType, 0) 175 self.instance.broadcastEvent(myEvent) 176 self.assertEquals( self.instance, myEvent.getTarget() ) 177 self.assertEquals( 100, myEvent.getInteger() ) 178 179 self.assertTrue( self.instance.removeEventListener(self.eventType, myFunction) ) 180 self.assertFalse( self.instance.removeEventListener(self.eventType, myFunction) ) 181 self.assertFalse( self.instance.isRegistered(myFunction, self.eventType) ) 182 self.assertTrue( self.instance.isRegistered(myFunction, "coucou") ) 183 self.assertTrue( self.instance.removeEventListener("coucou", myFunction) ) 184 myEvent = IntegerEvent(self.eventType, 0) 185 self.instance.broadcastEvent(myEvent) 186 self.assertEquals( 0, myEvent.getInteger() ) 187 188 189 self.assertTrue(self.instance.addEventListener(self.eventType, myFunction)) 190 self.assertTrue(self.instance.addEventListener("coucou", myFunction)) 191 self.instance.removeListenerCollection("coucou") 192 self.assertEquals( 0, self.instance.getListenerCollection("coucou").__len__() ) 193 self.assertFalse( self.instance.hasListenerCollection("coucou") ) 194 self.assertFalse( self.instance.isRegistered(myFunction, "coucou") ) 195 self.assertFalse( self.instance.removeEventListener("coucou", myFunction) ) 196 197 self.assertEquals( 1, self.instance.getListenerCollection(self.eventType).__len__() ) 198 self.assertTrue( self.instance.hasListenerCollection(self.eventType) ) 199 self.assertTrue( self.instance.isRegistered(myFunction, self.eventType) ) 200 self.assertTrue( self.instance.removeEventListener(self.eventType, myFunction) )
