Changeset 4

Show
Ignore:
Timestamp:
11/11/07 21:56:52 (1 year ago)
Author:
skit
Message:

* Ajout de la classe Delegate
* Modification EventBroadcaster? --> pour le Delegate
* Rennomage de quelques fonctions du CommandLocator?
* Correction de bugs de la méthode removeListenerCollection de la class EventBroadcaster?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/Pyxoo/commands/locator.py

    r3 r4  
    4343        return self.__commands.get(key) 
    4444     
    45     def addCommand(self, key, commandClass ): 
    46         """addCommand(string, class):void 
    47         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.""" 
    4848        if not Type.isClass( commandClass ): 
    4949            raise TypeError("commandClass param must be a class implementation of Command interface") 
     
    5858            self.__commands.__setitem__(key, l) 
    5959     
    60     def removeCommand(self, key, commandClass): 
    61         """removeCommand(string, class):boolean 
    62         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.""" 
    6363        if not Type.isClass( commandClass ): 
    6464            raise TypeError("commandClass param must be a class implementation of Command interface") 
     
    7373        return False 
    7474     
    75     def removeCommands(self, key): 
    76         """removeCommands(string):boolean 
    77         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.""" 
    7878        if self.isRegistered( key ): 
    7979            self.__commands.__delitem__(key) 
    8080            return True 
    8181        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  
    2626from Pyxoo.exceptions import * 
    2727from Pyxoo.log.stringifier import PyxooStringifier 
     28from Pyxoo.commands.delegate import Delegate 
    2829 
    2930class EventBroadcaster(object): 
     
    4344        self.__eventListeners = dict() 
    4445        self.__eventTypes     = list() 
     46        self.__functions      = dict() 
    4547         
    4648    @classmethod 
     
    7981        return False 
    8082 
    81     def addEventListener(self, eventType, listener): 
     83    def addEventListener(self, eventType, listener, *args): 
    8284        """addEventListener(string, instance):boolean 
    8385        Adds passed-in listener for receiving passed-in event type.""" 
    8486        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" ) 
    86100        if self.hasListenerCollection(eventType): 
    87101            if self.__eventListeners[eventType].__contains__(listener): 
     
    99113        Removes passed-in listener that suscribed for passed-in event.""" 
    100114        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) 
    102124        if self.hasListenerCollection(eventType): 
    103125            if self.__eventListeners[eventType].__contains__(listener): 
     
    115137        if self.__eventTypes.__contains__(eventType): 
    116138            self.__eventTypes.remove(eventType) 
     139            self.__eventListeners.__delitem__(eventType) 
     140            if self.__functions.__contains__(eventType): 
     141                self.__functions.__delitem__(eventType) 
    117142     
    118143    def hasListenerCollection(self, eventType): 
     
    148173        if not Type.isString(eventType): 
    149174            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) ): 
    151181            return self.__eventListeners[eventType].__contains__(listener) 
    152182        else: 
     
    178208            if event.getEventType() in dir(listener) and callable(getattr(listener, event.getEventType())): 
    179209                getattr(listener, event.getEventType())(event) 
     210            elif hasattr(listener, "handleEvent") and callable(getattr(listener, "handleEvent")): 
     211                listener.handleEvent(event) 
    180212            else: 
    181213                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  
    3535        self.instance = CommandLocator() 
    3636         
    37     def testAddCommand(self): 
     37    def testRegisterCommand(self): 
    3838        self.assertFalse( self.instance.isRegistered("run") ) 
    39         self.instance.addCommand("run", MyCommand1) 
     39        self.instance.registerCommand("run", MyCommand1) 
    4040        self.assertTrue( self.instance.isRegistered("run") ) 
    41         self.instance.addCommand("run", MyCommand2) 
     41        self.instance.registerCommand("run", MyCommand2) 
    4242        self.assertTrue( self.instance.isRegistered("run") ) 
    4343         
    44     def testRemoveCommand(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) 
    4747        self.assertEquals( 2, self.instance.locate("run").__len__() )         
    48         self.assertTrue(self.instance.removeCommand("run", MyCommand1)) 
     48        self.assertTrue(self.instance.unregisterCommand("run", MyCommand1)) 
    4949        self.assertTrue( self.instance.isRegistered("run") ) 
    50         self.assertFalse(self.instance.removeCommand("run", MyCommand1)) 
     50        self.assertFalse(self.instance.unregisterCommand("run", MyCommand1)) 
    5151        self.assertEquals( 1, self.instance.locate("run").__len__() ) 
    52         self.assertTrue(self.instance.removeCommand("run", MyCommand2)) 
     52        self.assertTrue(self.instance.unregisterCommand("run", MyCommand2)) 
    5353        self.assertFalse( self.instance.isRegistered("run") ) 
    54         self.assertFalse(self.instance.removeCommand("run", MyCommand2)) 
     54        self.assertFalse(self.instance.unregisterCommand("run", MyCommand2)) 
    5555         
    56     def testRemoveCommands(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") ) 
    6363        self.assertFalse( self.instance.isRegistered("run") ) 
    6464        self.assertTrue( self.instance.isRegistered("yop") ) 
    6565         
    6666    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) 
    7070        result = self.instance.locate("run")         
    7171        self.assertEquals( 2, result.__len__())         
  • trunk/test/events/TestEventBroadcaster.py

    r3 r4  
    1717# 
    1818 
    19 __version__ = "0.1" 
    20 __author__  = "Alexis Couronne - http://www.skitoo.org" 
     19import Pyxoo 
     20__version__ = Pyxoo.__version__ 
     21__author__  = Pyxoo.__author__ 
    2122 
    2223import unittest 
     
    3435        event.setInteger( event.getInteger() + 1 ) 
    3536 
    36  
     37def myFunction(event): 
     38    event.setInteger( event.getInteger() + 100 ) 
     39     
    3740class TestEventBroadcaster(unittest.TestCase): 
    3841    def setUp(self): 
     
    6972        self.instance.removeListener( self.listener ) 
    7073        self.assertFalse( self.instance.isRegistered(self.listener) ) 
    71         self.instance.addEventListener( "evtType", self.listener ) 
     74        self.instance.addEventListener( self.eventType, self.listener ) 
    7275        self.assertTrue( self.instance.isRegistered(self.listener) ) 
    7376         
     
    8285        self.assertTrue( self.instance.addEventListener(self.eventType, MySecondListener() ) ) 
    8386        self.assertFalse( self.instance.addEventListener(self.eventType, self.listener) ) 
     87        self.assertRaises( UnsupportedOperationError, self.instance.addEventListener, "plop", self.listener) 
    8488         
    8589    def testRemoveListener(self): 
     
    8892        self.assertTrue( self.instance.removeEventListener(self.eventType, self.listener) ) 
    8993        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        
    9595        listener = MySecondListener() 
    9696        self.instance.addEventListener(self.eventType, listener) 
     
    105105        self.assertTrue( self.instance.isEmpty() ) 
    106106         
    107         self.instance.addEventListener( "test", self.listener ) 
     107        self.instance.addEventListener( self.eventType, self.listener ) 
    108108        self.assertFalse( self.instance.isEmpty() ) 
    109109         
    110110    def testRemoveAllListeners(self): 
    111111        self.instance.addListener( self.listener ) 
    112         self.instance.addEventListener( "test", MySecondListener() ) 
     112        self.instance.addEventListener( self.eventType, MySecondListener() ) 
    113113        self.instance.removeAllListeners() 
    114114        self.assertTrue( self.instance.isEmpty() ) 
     
    129129        self.instance.removeListener(self.listener)         
    130130        listener = MySecondListener() 
    131         self.instance.addEventListener("plop", listener) 
     131        self.instance.addEventListener(self.eventType, listener) 
    132132        self.assertEquals( [], self.instance.getListenerCollection() ) 
    133         self.assertEquals( [listener], self.instance.getListenerCollection("plop") ) 
     133        self.assertEquals( [listener], self.instance.getListenerCollection(self.eventType) ) 
    134134         
    135135    def testRemoveListenerCollection(self): 
     
    158158        self.assertRaises( UnsupportedOperationError, self.instance.broadcastEvent, mySecondEvent) 
    159159         
     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) )