Some initial simple unit testing of the MPRIS frontend, without real D-Bus or real backend

This commit is contained in:
Stein Magnus Jodal 2011-06-05 01:11:30 +02:00
parent 0f1336d0ce
commit fbf3d23fd8
3 changed files with 71 additions and 13 deletions

View File

@ -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

View 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)

View 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)