Fix random tests and impl

This commit is contained in:
Thomas Adamcik 2010-02-20 21:42:17 +01:00
parent 6c2adbed3b
commit 96a974ac4d
3 changed files with 14 additions and 0 deletions

View File

@ -101,6 +101,7 @@ class BasePlaybackController(object):
def __init__(self, backend):
self.backend = backend
self.current_track = None
self._shuffled = []
def play(self, id=None, position=None):
raise NotImplementedError
@ -147,6 +148,13 @@ class BasePlaybackController(object):
if not playlist.tracks:
return None
if self.random and not self._shuffled:
self._shuffled = playlist.tracks
random.shuffle(self._shuffled)
if self._shuffled:
return self._shuffled[0]
if self.current_track is None:
return playlist.tracks[0]

View File

@ -77,6 +77,9 @@ class GStreamerPlaybackController(BasePlaybackController):
if not self.current_track:
return
if self.random:
self._shuffled.pop(0)
self._bin.set_state(gst.STATE_READY)
self._bin.set_property('uri', self.current_track.uri)
self._set_state(gst.STATE_PLAYING)

View File

@ -700,12 +700,14 @@ class BasePlaybackControllerTest(object):
@populate_playlist
def test_play_with_random(self):
random.seed(1)
self.playback.random = True
self.playback.play()
self.assertEqual(self.playback.current_track, self.tracks[2])
@populate_playlist
def test_next_with_random(self):
random.seed(1)
self.playback.random = True
self.playback.play()
self.playback.next()
self.assertEqual(self.playback.current_track, self.tracks[1])
@ -713,6 +715,7 @@ class BasePlaybackControllerTest(object):
@populate_playlist
def test_previous_with_random(self):
random.seed(1)
self.playback.random = True
self.playback.play()
self.playback.next()
self.playback.previous()