def test_event_dispatch(): q = Queue.Queue() def callback(event): q.put(event) for tc_id, tc in enumerate(dispatch_test_cases): print "Launching test case {0}".format(tc_id) q.queue.clear() listeners = {} for event in tc['register_events']: listener = gem.event.PyListener(callback) event.register(listener) listeners.setdefault(event, []).append(listener) for event in tc['raise_events']: event.notify_observers() for event in tc['listen_events']: raised_event = q.get() assert raised_event == event for event, listeners in listeners.iteritems(): for l in listeners: event.unregister(l) event.notify_observers() assert q.empty()
def test_event_dispatch_object(): q = Queue.Queue() class CBClass(object): def callback(self, event, arg1, arg2): q.put(event) q.put(arg1) q.put(arg2) obj = CBClass() for tc_id, tc in enumerate(args_test_cases): print "Launching test case {0}".format(tc_id) q.queue.clear() listeners = {} for event in tc['register_events']: listener = gem.event.PyListener(obj.callback) event.register(listener) listeners.setdefault(event, []).append(listener) for event in tc['raise_events']: event.notify_observers(tc['arg1'], tc['arg2']) for event in tc['listen_events']: raised_event = q.get() assert raised_event == event assert q.get() == tc['arg1'] assert q.get() == tc['arg2'] for event, listeners in listeners.iteritems(): for l in listeners: event.unregister(l) event.notify_observers() assert q.empty()
def _create_wrapper(self, event_handles, fn, event, event_passthrough=False): """_create_wrapper creates an event decorated wrapper function around a method, and registers it as an event callback Keyword arguments: event_passthrough -- whether the wrapped function expects the event id as its first parameter""" def _wrapper(event, *args, **kwargs): if event_passthrough == False: return fn(*args, **kwargs) return fn(event, *args, **kwargs) listener = gem.event.PyListener(_wrapper) event.register(listener) event_handles.setdefault(event, []).append(listener) return _wrapper