Test and implement all direct checks of CanControl==true before doing the designated action

This commit is contained in:
Stein Magnus Jodal 2011-06-20 13:43:20 +03:00
parent a4d73a8d7e
commit c8bc52b4c6
2 changed files with 40 additions and 0 deletions

View File

@ -266,6 +266,9 @@ class MprisObject(dbus.service.Object):
@dbus.service.method(dbus_interface=PLAYER_IFACE)
def Stop(self):
logger.debug(u'%s.Stop called', PLAYER_IFACE)
if not self.get_CanControl():
logger.debug(u'%s.Stop not allowed', PLAYER_IFACE)
return # TODO Raise error
self.backend.playback.stop().get()
@dbus.service.method(dbus_interface=PLAYER_IFACE)
@ -345,6 +348,9 @@ class MprisObject(dbus.service.Object):
return 'Playlist'
def set_LoopStatus(self, value):
if not self.get_CanControl():
logger.debug(u'Setting %s.LoopStatus not allowed', PLAYER_IFACE)
return # TODO Raise error
if value == 'None':
self.backend.playback.repeat = False
self.backend.playback.single = False
@ -363,6 +369,9 @@ class MprisObject(dbus.service.Object):
return self.backend.playback.shuffle.get()
def set_Shuffle(self, value):
if not self.get_CanControl():
logger.debug(u'Setting %s.Shuffle not allowed', PLAYER_IFACE)
return # TODO Raise error
if value:
self.backend.playback.shuffle = True
else:
@ -374,6 +383,9 @@ class MprisObject(dbus.service.Object):
return volume / 100.0
def set_Volume(self, value):
if not self.get_CanControl():
logger.debug(u'Setting %s.Volume not allowed', PLAYER_IFACE)
return # TODO Raise error
if value is None:
return
elif value < 0:

View File

@ -56,6 +56,14 @@ class PlayerInterfaceTest(unittest.TestCase):
result = self.mpris.Get(mpris.PLAYER_IFACE, 'LoopStatus')
self.assertEqual('Playlist', result)
def test_set_loop_status_is_ignored_if_can_control_is_false(self):
self.mpris.get_CanControl = lambda *_: False
self.backend.playback.repeat = True
self.backend.playback.single = True
self.mpris.Set(mpris.PLAYER_IFACE, 'LoopStatus', 'None')
self.assertEquals(self.backend.playback.repeat.get(), True)
self.assertEquals(self.backend.playback.single.get(), True)
def test_set_loop_status_to_none_unsets_repeat_and_single(self):
self.mpris.Set(mpris.PLAYER_IFACE, 'LoopStatus', 'None')
self.assertEquals(self.backend.playback.repeat.get(), False)
@ -98,6 +106,12 @@ class PlayerInterfaceTest(unittest.TestCase):
result = self.mpris.Get(mpris.PLAYER_IFACE, 'Shuffle')
self.assertFalse(result)
def test_set_shuffle_is_ignored_if_can_control_is_false(self):
self.mpris.get_CanControl = lambda *_: False
self.backend.playback.shuffle = False
result = self.mpris.Set(mpris.PLAYER_IFACE, 'Shuffle', True)
self.assertFalse(self.backend.playback.shuffle.get())
def test_set_shuffle_to_true_activates_shuffle_mode(self):
self.backend.playback.shuffle = False
self.assertFalse(self.backend.playback.shuffle.get())
@ -123,6 +137,12 @@ class PlayerInterfaceTest(unittest.TestCase):
result = self.mpris.Get(mpris.PLAYER_IFACE, 'Volume')
self.assertEquals(result, 1)
def test_set_volume_is_ignored_if_can_control_is_false(self):
self.mpris.get_CanControl = lambda *_: False
self.mixer.volume = 0
self.mpris.Set(mpris.PLAYER_IFACE, 'Volume', 1.0)
self.assertEquals(self.mixer.volume.get(), 0)
def test_set_volume_to_one_should_set_mixer_volume_to_100(self):
self.mpris.Set(mpris.PLAYER_IFACE, 'Volume', 1.0)
self.assertEquals(self.mixer.volume.get(), 100)
@ -282,6 +302,14 @@ class PlayerInterfaceTest(unittest.TestCase):
self.mpris.PlayPause()
self.assertEquals(self.backend.playback.state.get(), PLAYING)
def test_stop_is_ignored_if_can_control_is_false(self):
self.mpris.get_CanControl = lambda *_: False
self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')])
self.backend.playback.play()
self.assertEquals(self.backend.playback.state.get(), PLAYING)
self.mpris.Stop()
self.assertEquals(self.backend.playback.state.get(), PLAYING)
def test_stop_when_playing_should_stop_playback(self):
self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')])
self.backend.playback.play()