From 959bd6cd841fccbed68e619ee4fd60293f31e670 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sat, 1 Dec 2012 11:20:44 +0100 Subject: [PATCH] audio: Add AudioListener.on_event() --- mopidy/audio/listener.py | 15 ++++++++++++++- tests/audio/listener_test.py | 11 +++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/mopidy/audio/listener.py b/mopidy/audio/listener.py index da5f7b39..f8fedc67 100644 --- a/mopidy/audio/listener.py +++ b/mopidy/audio/listener.py @@ -19,7 +19,20 @@ class AudioListener(object): """Helper to allow calling of audio listener events""" listeners = pykka.ActorRegistry.get_by_class(AudioListener) for listener in listeners: - getattr(listener.proxy(), event)(**kwargs) + listener.proxy().on_event(event, **kwargs) + + def on_event(self, event, **kwargs): + """ + Called on all events. + + *MAY* be implemented by actor. By default, this method forwards the + event to the specific event methods. + + :param event: the event name + :type event: string + :param kwargs: any other arguments to the specific event handlers + """ + getattr(self, event)(**kwargs) def reached_end_of_stream(self): """ diff --git a/tests/audio/listener_test.py b/tests/audio/listener_test.py index b3274721..2c6da8f4 100644 --- a/tests/audio/listener_test.py +++ b/tests/audio/listener_test.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +import mock + from mopidy import audio from tests import unittest @@ -9,6 +11,15 @@ class AudioListenerTest(unittest.TestCase): def setUp(self): self.listener = audio.AudioListener() + def test_on_event_forwards_to_specific_handler(self): + self.listener.state_changed = mock.Mock() + + self.listener.on_event( + 'state_changed', old_state='stopped', new_state='playing') + + self.listener.state_changed.assert_called_with( + old_state='stopped', new_state='playing') + def test_listener_has_default_impl_for_reached_end_of_stream(self): self.listener.reached_end_of_stream()