From 5cdfbce122ec0248104049760dadc1c83a01f7fb Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 4 Oct 2010 23:18:32 +0200 Subject: [PATCH 1/4] Add regression test for GH-18 --- tests/frontends/mpd/regression_test.py | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/frontends/mpd/regression_test.py diff --git a/tests/frontends/mpd/regression_test.py b/tests/frontends/mpd/regression_test.py new file mode 100644 index 00000000..0959e2a4 --- /dev/null +++ b/tests/frontends/mpd/regression_test.py @@ -0,0 +1,41 @@ +import unittest + +from mopidy.backends.dummy import DummyBackend +from mopidy.frontends.mpd import dispatcher +from mopidy.mixers.dummy import DummyMixer +from mopidy.models import Track + +class IssueGH18RegressionTest(unittest.TestCase): + """ + The issue: http://github.com/jodal/mopidy/issues#issue/18 + + How to reproduce: + + Play, random on, next, random off, next, next. + + At this point it gives the same song over and over. + """ + + def setUp(self): + self.backend = DummyBackend(mixer_class=DummyMixer) + self.backend.current_playlist.append([ + Track(uri='a'), Track(uri='b'), Track(uri='c'), + Track(uri='d'), Track(uri='e'), Track(uri='f')]) + self.mpd = dispatcher.MpdDispatcher(backend=self.backend) + + def test(self): + self.mpd.handle_request(u'play') + self.mpd.handle_request(u'random "1"') + self.mpd.handle_request(u'next') + self.mpd.handle_request(u'random "0"') + self.mpd.handle_request(u'next') + + self.mpd.handle_request(u'next') + cp_track_1 = self.backend.playback.current_cp_track + self.mpd.handle_request(u'next') + cp_track_2 = self.backend.playback.current_cp_track + self.mpd.handle_request(u'next') + cp_track_3 = self.backend.playback.current_cp_track + + self.assertNotEqual(cp_track_1, cp_track_2) + self.assertNotEqual(cp_track_2, cp_track_3) From 0d613418e6d0ee777e2cb86aa5c113e4b7ca1a8a Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 19 Oct 2010 12:23:05 +0200 Subject: [PATCH 2/4] Remove cleanup taken care of by play() --- mopidy/backends/base/playback.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/mopidy/backends/base/playback.py b/mopidy/backends/base/playback.py index 933424ad..3f1fa4fb 100644 --- a/mopidy/backends/base/playback.py +++ b/mopidy/backends/base/playback.py @@ -311,11 +311,9 @@ class BasePlaybackController(object): return original_cp_track = self.current_cp_track + if self.cp_track_at_eot: self.play(self.cp_track_at_eot) - - if self.random and self.current_cp_track in self._shuffled: - self._shuffled.remove(self.current_cp_track) else: self.stop() self.current_cp_track = None @@ -351,9 +349,6 @@ class BasePlaybackController(object): self.stop() self.current_cp_track = None - if self.random and self.current_cp_track in self._shuffled: - self._shuffled.remove(self.current_cp_track) - def pause(self): """Pause playback.""" if self.state == self.PLAYING and self._pause(): From 3a951ca948ec0d179cdf1fb1a6a5d47f90ef318b Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 19 Oct 2010 12:41:18 +0200 Subject: [PATCH 3/4] Seed the random function to make the test predictable --- tests/frontends/mpd/regression_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/frontends/mpd/regression_test.py b/tests/frontends/mpd/regression_test.py index 0959e2a4..0e8ca386 100644 --- a/tests/frontends/mpd/regression_test.py +++ b/tests/frontends/mpd/regression_test.py @@ -1,3 +1,4 @@ +import random import unittest from mopidy.backends.dummy import DummyBackend @@ -24,6 +25,7 @@ class IssueGH18RegressionTest(unittest.TestCase): self.mpd = dispatcher.MpdDispatcher(backend=self.backend) def test(self): + random.seed(1) self.mpd.handle_request(u'play') self.mpd.handle_request(u'random "1"') self.mpd.handle_request(u'next') From 9188dcdd4b385cf91c5faed13ba084eee7fe2700 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Tue, 19 Oct 2010 12:42:06 +0200 Subject: [PATCH 4/4] Fix GH-18 by only using the internal shuffled playlist when random mode is on --- mopidy/backends/base/playback.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mopidy/backends/base/playback.py b/mopidy/backends/base/playback.py index 3f1fa4fb..3a32ce07 100644 --- a/mopidy/backends/base/playback.py +++ b/mopidy/backends/base/playback.py @@ -142,7 +142,7 @@ class BasePlaybackController(object): random.shuffle(self._shuffled) self._first_shuffle = False - if self._shuffled: + if self.random and self._shuffled: return self._shuffled[0] if self.current_cp_track is None: @@ -195,7 +195,7 @@ class BasePlaybackController(object): random.shuffle(self._shuffled) self._first_shuffle = False - if self._shuffled: + if self.random and self._shuffled: return self._shuffled[0] if self.current_cp_track is None: