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):
|
||||
backend_refs = ActorRegistry.get_by_class(Backend)
|
||||
assert len(backend_refs) == 1, 'Expected exactly one running backend.'
|
||||
self.backend = backend_refs[0].proxy()
|
||||
self._backend = None
|
||||
bus_name = self._connect_to_dbus()
|
||||
super(MprisObject, self).__init__(bus_name, OBJECT_PATH)
|
||||
|
||||
def _connect_to_dbus(self):
|
||||
logger.debug(u'Connecting to D-Bus...')
|
||||
bus_name = dbus.service.BusName(BUS_NAME, dbus.SessionBus())
|
||||
super(MprisObject, self).__init__(bus_name, OBJECT_PATH)
|
||||
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,
|
||||
in_signature='ss', out_signature='v')
|
||||
@ -214,8 +223,7 @@ class MprisObject(dbus.service.Object):
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
def Next(self):
|
||||
logger.debug(u'%s.Next called', PLAYER_IFACE)
|
||||
# TODO call playback.next(), keep playback.state unchanged
|
||||
# XXX Proof of concept only. Throw away, write tests.
|
||||
# TODO keep playback.state unchanged
|
||||
self.backend.playback.next().get()
|
||||
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
@ -232,7 +240,6 @@ class MprisObject(dbus.service.Object):
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
def Pause(self):
|
||||
logger.debug(u'%s.Pause called', PLAYER_IFACE)
|
||||
# XXX Proof of concept only. Throw away, write tests.
|
||||
self.backend.playback.pause().get()
|
||||
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
@ -258,9 +265,7 @@ class MprisObject(dbus.service.Object):
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
def Previous(self):
|
||||
logger.debug(u'%s.Previous called', PLAYER_IFACE)
|
||||
|
||||
# TODO call playback.previous(), keep playback.state unchanged
|
||||
# XXX Proof of concept only. Throw away, write tests, reimplement:
|
||||
# TODO keep playback.state unchanged
|
||||
self.backend.playback.previous().get()
|
||||
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
@ -287,10 +292,10 @@ class MprisObject(dbus.service.Object):
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
def Stop(self):
|
||||
logger.debug(u'%s.Stop called', PLAYER_IFACE)
|
||||
# TODO call playback.stop()
|
||||
pass
|
||||
self.backend.playback.stop().get()
|
||||
|
||||
@dbus.service.signal(dbus_interface=PLAYER_IFACE, signature='x')
|
||||
def Seeked(self, position):
|
||||
logger.debug(u'%s.Seeked signaled', PLAYER_IFACE)
|
||||
# TODO What should we do here?
|
||||
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