diff --git a/pyee/base.py b/pyee/base.py index 21ca96d..9f2bbce 100644 --- a/pyee/base.py +++ b/pyee/base.py @@ -275,7 +275,8 @@ def remove_all_listeners(self: Self, event: Optional[str] = None) -> None: """ with self._lock: if event is not None: - self._events[event] = OrderedDict() + if event in self._events: + del self._events[event] else: self._events = dict() diff --git a/tests/test_sync.py b/tests/test_sync.py index 17a5f1e..af2712f 100644 --- a/tests/test_sync.py +++ b/tests/test_sync.py @@ -131,7 +131,31 @@ def fourth(): assert ee._events["event"] == OrderedDict([(third, third), (fourth, fourth)]) ee.remove_all_listeners("event") - assert "event" not in ee._events["event"] + assert "event" not in ee._events + assert ee.event_names() == set() + + +def test_remove_all_listeners_clears_every_event(): + """`remove_all_listeners()` with no argument removes every event.""" + + ee = EventEmitter() + + @ee.on("a") + def a_handler(): + pass + + @ee.on("b") + def b_handler(): + pass + + assert ee.event_names() == {"a", "b"} + + ee.remove_all_listeners() + + assert ee._events == dict() + assert ee.event_names() == set() + assert ee.emit("a") is False + assert ee.emit("b") is False def test_listener_removal_on_emit():