Refactoring code to convert tl_track_at_previous() in a function, also recoded

tests.
This commit is contained in:
Javier Domingo Cansino 2013-08-07 21:53:46 +02:00
parent 6abcad3e55
commit 6e61f2ef85
4 changed files with 33 additions and 28 deletions

View File

@ -206,7 +206,7 @@ class PlaybackController(object):
elif self.current_tl_track is None and on_error_step == 1:
tl_track = self.core.tracklist.tl_track_at_next(tl_track)
elif self.current_tl_track is None and on_error_step == -1:
tl_track = self.core.tracklist.tl_track_at_previous
tl_track = self.core.tracklist.tl_track_at_previous(tl_track)
if tl_track is not None:
self.current_tl_track = tl_track
@ -235,7 +235,8 @@ class PlaybackController(object):
will continue. If it was paused, it will still be paused, etc.
"""
self._trigger_track_playback_ended()
self.change_track(self.core.tracklist.tl_track_at_previous, on_error_step=-1)
tl_track = self.current_tl_track
self.change_track(self.core.tracklist.tl_track_at_previous(tl_track), on_error_step=-1)
def resume(self):
"""If paused, resume playing the current track."""

View File

@ -217,27 +217,25 @@ class TracklistController(object):
except IndexError:
return None
def get_tl_track_at_previous(self):
current_tl_track = self.core.playback.current_tl_track
if self.repeat or self.consume or self.random:
return current_tl_track
def tl_track_at_previous(self, tl_track):
"""
Returns the track that will be played if calling :meth:`previous()`.
position = self.tracklist_position(current_tl_track)
A :class:`mopidy.models.TlTrack`.
For normal playback this is the previous track in the playlist. If
random and/or consume is enabled it should return the current track
instead.
"""
if self.repeat or self.consume or self.random:
return tl_track
position = self.tracklist_position(tl_track)
if position in (None, 0):
return None
return self.tl_tracks[position - 1]
tl_track_at_previous = property(get_tl_track_at_previous)
"""
The track that will be played if calling :meth:`previous()`.
A :class:`mopidy.models.TlTrack`.
For normal playback this is the previous track in the playlist. If
random and/or consume is enabled it should return the current track
instead.
"""
def add(self, tracks=None, at_position=None, uri=None):
"""

View File

@ -414,9 +414,10 @@ class MprisObject(dbus.service.Object):
def get_CanGoPrevious(self):
if not self.get_CanControl():
return False
tl_track = self.core.playback.current_tl_track
return (
self.core.tracklist.tl_track_at_previous.get() !=
self.core.playback.current_tl_track.get())
self.core.tracklist.tl_track_at_previous(tl_track).get() !=
tl_track)
def get_CanPlay(self):
if not self.get_CanControl():

View File

@ -465,18 +465,21 @@ class PlaybackControllerTest(object):
@populate_tracklist
def test_previous_track_before_play(self):
self.assertEqual(self.tracklist.tl_track_at_previous, None)
tl_track = self.playback.current_tl_track
self.assertEqual(self.tracklist.tl_track_at_previous(tl_track), None)
@populate_tracklist
def test_previous_track_after_play(self):
self.playback.play()
self.assertEqual(self.tracklist.tl_track_at_previous, None)
tl_track = self.playback.current_tl_track
self.assertEqual(self.tracklist.tl_track_at_previous(tl_track), None)
@populate_tracklist
def test_previous_track_after_next(self):
self.playback.play()
self.playback.next()
self.assertEqual(self.tracklist.tl_track_at_previous, self.tl_tracks[0])
tl_track = self.playback.current_tl_track
self.assertEqual(self.tracklist.tl_track_at_previous(tl_track), self.tl_tracks[0])
@populate_tracklist
def test_previous_track_after_previous(self):
@ -484,28 +487,30 @@ class PlaybackControllerTest(object):
self.playback.next() # At track 1
self.playback.next() # At track 2
self.playback.previous() # At track 1
self.assertEqual(self.tracklist.tl_track_at_previous, self.tl_tracks[0])
tl_track = self.playback.current_tl_track
self.assertEqual(self.tracklist.tl_track_at_previous(tl_track), self.tl_tracks[0])
def test_previous_track_empty_playlist(self):
self.assertEqual(self.tracklist.tl_track_at_previous, None)
tl_track = self.playback.current_tl_track
self.assertEqual(self.tracklist.tl_track_at_previous(tl_track), None)
@populate_tracklist
def test_previous_track_with_consume(self):
self.tracklist.consume = True
for _ in self.tracks:
self.playback.next()
tl_track = self.playback.current_tl_track
self.assertEqual(
self.tracklist.tl_track_at_previous,
self.playback.current_tl_track)
self.tracklist.tl_track_at_previous(tl_track), tl_track)
@populate_tracklist
def test_previous_track_with_random(self):
self.tracklist.random = True
for _ in self.tracks:
self.playback.next()
tl_track = self.playback.current_tl_track
self.assertEqual(
self.tracklist.tl_track_at_previous,
self.playback.current_tl_track)
self.tracklist.tl_track_at_previous(tl_track), tl_track)
@populate_tracklist
def test_initial_current_track(self):