diff --git a/esper/__init__.py b/esper/__init__.py index 757a30a..defdd08 100644 --- a/esper/__init__.py +++ b/esper/__init__.py @@ -81,10 +81,11 @@ def remove_handler(name: str, func: _Callable[..., None]) -> None: receive the named event, or if the named event does not exist, this function call will pass silently. """ - if func not in event_registry.get(name, []): + func_ref = _ref(func) + if func_ref not in event_registry.get(name, []): return - event_registry[name].remove(func) + event_registry[name].remove(func_ref) if not event_registry[name]: del event_registry[name] diff --git a/tests/test_world.py b/tests/test_world.py index 3f832cd..ab1ff7d 100644 --- a/tests/test_world.py +++ b/tests/test_world.py @@ -505,6 +505,16 @@ def handler(): esper.dispatch_event("foo") assert called == 2 +def test_remove_handler(): + def handler(): + pass + + assert esper.event_registry == {} + esper.set_handler("foo", handler) + assert "foo" in esper.event_registry + esper.remove_handler("foo", handler) + assert esper.event_registry == {} + ################################################## # Some helper functions and Component templates: