Some initial simple unit testing of the MPRIS frontend, without real D-Bus or real backend
This commit is contained in:
parent
0f1336d0ce
commit
fbf3d23fd8
@ -131,17 +131,26 @@ class MprisObject(dbus.service.Object):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
backend_refs = ActorRegistry.get_by_class(Backend)
|
self._backend = None
|
||||||
assert len(backend_refs) == 1, 'Expected exactly one running backend.'
|
bus_name = self._connect_to_dbus()
|
||||||
self.backend = backend_refs[0].proxy()
|
super(MprisObject, self).__init__(bus_name, OBJECT_PATH)
|
||||||
|
|
||||||
|
def _connect_to_dbus(self):
|
||||||
logger.debug(u'Connecting to D-Bus...')
|
logger.debug(u'Connecting to D-Bus...')
|
||||||
bus_name = dbus.service.BusName(BUS_NAME, dbus.SessionBus())
|
bus_name = dbus.service.BusName(BUS_NAME, dbus.SessionBus())
|
||||||
super(MprisObject, self).__init__(bus_name, OBJECT_PATH)
|
|
||||||
logger.info(u'Connected to D-Bus')
|
logger.info(u'Connected to D-Bus')
|
||||||
|
return bus_name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def backend(self):
|
||||||
|
if self._backend is None:
|
||||||
|
backend_refs = ActorRegistry.get_by_class(Backend)
|
||||||
|
assert len(backend_refs) == 1, 'Expected exactly one running backend.'
|
||||||
|
self._backend = backend_refs[0].proxy()
|
||||||
|
return self._backend
|
||||||
|
|
||||||
|
|
||||||
### Property interface
|
### Properties interface
|
||||||
|
|
||||||
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
|
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
|
||||||
in_signature='ss', out_signature='v')
|
in_signature='ss', out_signature='v')
|
||||||
@ -214,8 +223,7 @@ class MprisObject(dbus.service.Object):
|
|||||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||||
def Next(self):
|
def Next(self):
|
||||||
logger.debug(u'%s.Next called', PLAYER_IFACE)
|
logger.debug(u'%s.Next called', PLAYER_IFACE)
|
||||||
# TODO call playback.next(), keep playback.state unchanged
|
# TODO keep playback.state unchanged
|
||||||
# XXX Proof of concept only. Throw away, write tests.
|
|
||||||
self.backend.playback.next().get()
|
self.backend.playback.next().get()
|
||||||
|
|
||||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||||
@ -232,7 +240,6 @@ class MprisObject(dbus.service.Object):
|
|||||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||||
def Pause(self):
|
def Pause(self):
|
||||||
logger.debug(u'%s.Pause called', PLAYER_IFACE)
|
logger.debug(u'%s.Pause called', PLAYER_IFACE)
|
||||||
# XXX Proof of concept only. Throw away, write tests.
|
|
||||||
self.backend.playback.pause().get()
|
self.backend.playback.pause().get()
|
||||||
|
|
||||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||||
@ -258,9 +265,7 @@ class MprisObject(dbus.service.Object):
|
|||||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||||
def Previous(self):
|
def Previous(self):
|
||||||
logger.debug(u'%s.Previous called', PLAYER_IFACE)
|
logger.debug(u'%s.Previous called', PLAYER_IFACE)
|
||||||
|
# TODO keep playback.state unchanged
|
||||||
# TODO call playback.previous(), keep playback.state unchanged
|
|
||||||
# XXX Proof of concept only. Throw away, write tests, reimplement:
|
|
||||||
self.backend.playback.previous().get()
|
self.backend.playback.previous().get()
|
||||||
|
|
||||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||||
@ -287,10 +292,10 @@ class MprisObject(dbus.service.Object):
|
|||||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||||
def Stop(self):
|
def Stop(self):
|
||||||
logger.debug(u'%s.Stop called', PLAYER_IFACE)
|
logger.debug(u'%s.Stop called', PLAYER_IFACE)
|
||||||
# TODO call playback.stop()
|
self.backend.playback.stop().get()
|
||||||
pass
|
|
||||||
|
|
||||||
@dbus.service.signal(dbus_interface=PLAYER_IFACE, signature='x')
|
@dbus.service.signal(dbus_interface=PLAYER_IFACE, signature='x')
|
||||||
def Seeked(self, position):
|
def Seeked(self, position):
|
||||||
logger.debug(u'%s.Seeked signaled', PLAYER_IFACE)
|
logger.debug(u'%s.Seeked signaled', PLAYER_IFACE)
|
||||||
|
# TODO What should we do here?
|
||||||
pass
|
pass
|
||||||
|
|||||||
31
tests/frontends/mpris/player_interface_test.py
Normal file
31
tests/frontends/mpris/player_interface_test.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import mock
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from pykka.registry import ActorRegistry
|
||||||
|
|
||||||
|
from mopidy.backends.base import Backend
|
||||||
|
from mopidy.frontends import mpris
|
||||||
|
|
||||||
|
class PlayerInterfaceTest(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
mpris.ActorRegistry = mock.Mock(spec=ActorRegistry)
|
||||||
|
mpris.MprisObject._connect_to_dbus = mock.Mock()
|
||||||
|
self.backend = mock.Mock(spec=Backend)
|
||||||
|
self.mpris_object = mpris.MprisObject()
|
||||||
|
self.mpris_object._backend = self.backend
|
||||||
|
|
||||||
|
def test_next_should_call_next_on_backend(self):
|
||||||
|
self.mpris_object.Next()
|
||||||
|
self.assert_(self.backend.playback.next.called)
|
||||||
|
|
||||||
|
def test_pause_should_call_pause_on_backend(self):
|
||||||
|
self.mpris_object.Pause()
|
||||||
|
self.assert_(self.backend.playback.pause.called)
|
||||||
|
|
||||||
|
def test_previous_should_call_previous_on_backend(self):
|
||||||
|
self.mpris_object.Previous()
|
||||||
|
self.assert_(self.backend.playback.previous.called)
|
||||||
|
|
||||||
|
def test_stop_should_call_stop_on_backend(self):
|
||||||
|
self.mpris_object.Stop()
|
||||||
|
self.assert_(self.backend.playback.stop.called)
|
||||||
22
tests/frontends/mpris/root_interface_test.py
Normal file
22
tests/frontends/mpris/root_interface_test.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import mock
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from pykka.registry import ActorRegistry
|
||||||
|
|
||||||
|
from mopidy.frontends import mpris
|
||||||
|
|
||||||
|
class RootInterfaceTest(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
mpris.ActorRegistry = mock.Mock(spec=ActorRegistry)
|
||||||
|
mpris.MprisObject._connect_to_dbus = mock.Mock()
|
||||||
|
self.mpris_object = mpris.MprisObject()
|
||||||
|
|
||||||
|
def test_constructor_connects_to_dbus(self):
|
||||||
|
self.assert_(self.mpris_object._connect_to_dbus.called)
|
||||||
|
|
||||||
|
def test_raise_does_nothing(self):
|
||||||
|
self.mpris_object.Raise()
|
||||||
|
|
||||||
|
def test_quit_should_stop_all_actors(self):
|
||||||
|
self.mpris_object.Quit()
|
||||||
|
self.assert_(mpris.ActorRegistry.stop_all.called)
|
||||||
Loading…
Reference in New Issue
Block a user