From 71b04213ff1fcf63b50428d5f339811e31d2bbe6 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Thu, 3 Sep 2015 21:39:30 +0200 Subject: [PATCH] audio: Update dummy and tests to correctly emit stream changed --- tests/audio/test_actor.py | 48 +++++++++++++++++++++++++++++++++++++++ tests/dummy_audio.py | 15 ++++++++---- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/tests/audio/test_actor.py b/tests/audio/test_actor.py index 732e514c..e9eb3fb8 100644 --- a/tests/audio/test_actor.py +++ b/tests/audio/test_actor.py @@ -261,6 +261,37 @@ class AudioEventTest(BaseTest): self.audio.wait_for_state_change().get() self.assertEvent('stream_changed', uri=self.uris[0]) + def test_stream_changed_event_on_multiple_changes(self): + self.audio.prepare_change() + self.audio.set_uri(self.uris[0]) + self.listener.clear_events() + self.audio.start_playback() + + self.audio.wait_for_state_change().get() + self.assertEvent('stream_changed', uri=self.uris[0]) + + self.audio.prepare_change() + self.audio.set_uri(self.uris[1]) + self.audio.pause_playback() + + self.audio.wait_for_state_change().get() + self.assertEvent('stream_changed', uri=self.uris[1]) + + def test_stream_changed_event_on_playing_to_paused(self): + self.audio.prepare_change() + self.audio.set_uri(self.uris[0]) + self.listener.clear_events() + self.audio.start_playback() + + self.audio.wait_for_state_change().get() + self.assertEvent('stream_changed', uri=self.uris[0]) + + self.listener.clear_events() + self.audio.pause_playback() + + self.audio.wait_for_state_change().get() + self.assertNotEvent('stream_changed', uri=self.uris[0]) + def test_stream_changed_event_on_paused_to_stopped(self): self.audio.prepare_change() self.audio.set_uri(self.uris[0]) @@ -282,6 +313,21 @@ class AudioEventTest(BaseTest): self.audio.wait_for_state_change().get() self.assertEvent('position_changed', position=0) + def test_stream_changed_event_on_paused_to_playing(self): + self.audio.prepare_change() + self.audio.set_uri(self.uris[0]) + self.listener.clear_events() + self.audio.pause_playback() + + self.audio.wait_for_state_change().get() + self.assertEvent('stream_changed', uri=self.uris[0]) + + self.listener.clear_events() + self.audio.start_playback() + + self.audio.wait_for_state_change().get() + self.assertNotEvent('stream_changed', uri=self.uris[0]) + def test_position_changed_on_play(self): self.audio.prepare_change() self.audio.set_uri(self.uris[0]) @@ -347,6 +393,8 @@ class AudioEventTest(BaseTest): if not event.wait(timeout=1.0): self.fail('Stream changed not reached within deadline') + self.assertEvent('stream_changed', uri=self.uris[0]) + def test_reached_end_of_stream_event(self): event = self.listener.wait('reached_end_of_stream').get() diff --git a/tests/dummy_audio.py b/tests/dummy_audio.py index 7c48d9f0..443d376b 100644 --- a/tests/dummy_audio.py +++ b/tests/dummy_audio.py @@ -25,12 +25,14 @@ class DummyAudio(pykka.ThreadingActor): self._callback = None self._uri = None self._state_change_result = True + self._stream_changed = False self._tags = {} def set_uri(self, uri): assert self._uri is None, 'prepare change not called before set' self._tags = {} self._uri = uri + self._stream_changed = True def set_appsrc(self, *args, **kwargs): pass @@ -88,12 +90,15 @@ class DummyAudio(pykka.ThreadingActor): if not self._uri: return False - if self.state == audio.PlaybackState.STOPPED and self._uri: - audio.AudioListener.send('position_changed', position=0) - audio.AudioListener.send('stream_changed', uri=self._uri) - - if new_state == audio.PlaybackState.STOPPED: + if new_state == audio.PlaybackState.STOPPED and self._uri: + self._stream_changed = True self._uri = None + + if self._uri is not None: + audio.AudioListener.send('position_changed', position=0) + + if self._stream_changed: + self._stream_changed = False audio.AudioListener.send('stream_changed', uri=self._uri) old_state, self.state = self.state, new_state