core: Add tests for change_track failing in about-to-finish

This commit is contained in:
Thomas Adamcik 2016-02-14 17:23:20 +01:00
parent 76ab5ffb04
commit 79a4835e4e
2 changed files with 40 additions and 6 deletions

View File

@ -254,13 +254,19 @@ class PlaybackController(object):
pending = self.core.tracklist.eot_track(self._current_tl_track)
while pending:
# TODO: Avoid infinite loops if all tracks are unplayable.
# TODO: Wrap backend call in error handling.
backend = self._get_backend(pending)
if backend and backend.playback.change_track(pending.track).get():
self._pending_tl_track = pending
break
else:
self.core.tracklist._mark_unplayable(pending)
if not backend:
continue
try:
if backend.playback.change_track(pending.track).get():
self._pending_tl_track = pending
break
except Exception:
logger.exception('%s backend caused an exception.',
backend.actor_ref.actor_class.__name__)
self.core.tracklist._mark_unplayable(pending)
pending = self.core.tracklist.eot_track(pending)
def _on_tracklist_change(self):

View File

@ -333,6 +333,34 @@ class TestOnAboutToFinish(BaseTest):
self.assertIn(tl_track, self.core.tracklist.tl_tracks)
def test_on_about_to_finish_skips_over_change_track_error(self):
# Trigger an exception in translate_uri.
track = Track(uri='dummy:error', length=1234)
self.core.tracklist.add(tracks=[track], at_position=1)
tl_tracks = self.core.tracklist.get_tl_tracks()
self.core.playback.play(tl_tracks[0])
self.replay_events()
self.trigger_about_to_finish()
assert self.core.playback.get_current_tl_track() == tl_tracks[2]
def test_on_about_to_finish_skips_over_change_track_unplayable(self):
# Makes translate_uri return None.
track = Track(uri='dummy:unplayable', length=1234)
self.core.tracklist.add(tracks=[track], at_position=1)
tl_tracks = self.core.tracklist.get_tl_tracks()
self.core.playback.play(tl_tracks[0])
self.replay_events()
self.trigger_about_to_finish()
assert self.core.playback.get_current_tl_track() == tl_tracks[2]
class TestConsumeHandling(BaseTest):