From 40502e41e5860bd3d787c0c738fbf16699611d72 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Sat, 1 Sep 2012 14:35:20 +0200 Subject: [PATCH] Update tests to catch scaling problem in mixer. - Fixes problem where 60% became 59% due to bad rounding. - Tests assume scale of 0-65536 which matches ALSA. - Check all possible values of set_volume and ensure we the right value out. --- mopidy/utils/__init__.py | 4 ++-- tests/gstreamer_test.py | 18 ++++-------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/mopidy/utils/__init__.py b/mopidy/utils/__init__.py index 35ec916a..aacc2e85 100644 --- a/mopidy/utils/__init__.py +++ b/mopidy/utils/__init__.py @@ -23,8 +23,8 @@ def rescale(v, old=None, new=None): """Convert value between scales.""" new_min, new_max = new old_min, old_max = old - scaled = (new_max - new_min) / (old_max - old_min) * (v - old_min) + new_min - return int(scaled) + scaling = float(new_max - new_min) / (old_max - old_min) + return round(scaling * (v - old_min) + new_min) def import_module(name): diff --git a/tests/gstreamer_test.py b/tests/gstreamer_test.py index a4f740b4..f30b672b 100644 --- a/tests/gstreamer_test.py +++ b/tests/gstreamer_test.py @@ -15,7 +15,7 @@ class GStreamerTest(unittest.TestCase): # TODO: should use a fake backend stub for this test? settings.BACKENDS = ('mopidy.backends.local.LocalBackend',) self.song_uri = path_to_uri(path_to_data_dir('song1.wav')) - self.gstreamer = GStreamer(mixer='fakemixer') + self.gstreamer = GStreamer(mixer='fakemixer track_max_volume=65536') def prepare_uri(self, uri): self.gstreamer.prepare_change() @@ -50,20 +50,10 @@ class GStreamerTest(unittest.TestCase): def test_end_of_data_stream(self): pass # TODO - def test_default_get_volume_result(self): - self.assertEqual(100, self.gstreamer.get_volume()) - def test_set_volume(self): - self.assertTrue(self.gstreamer.set_volume(50)) - self.assertEqual(50, self.gstreamer.get_volume()) - - def test_set_volume_to_zero(self): - self.assertTrue(self.gstreamer.set_volume(0)) - self.assertEqual(0, self.gstreamer.get_volume()) - - def test_set_volume_to_one_hundred(self): - self.assertTrue(self.gstreamer.set_volume(100)) - self.assertEqual(100, self.gstreamer.get_volume()) + for value in range(0, 101): + self.assertTrue(self.gstreamer.set_volume(value)) + self.assertEqual(value, self.gstreamer.get_volume()) @unittest.SkipTest def test_set_state_encapsulation(self):