Fix ~200 backend tests

This commit is contained in:
Stein Magnus Jodal 2011-03-10 23:19:44 +01:00
parent 985213ffa2
commit 46c6ee68df
9 changed files with 28 additions and 34 deletions

View File

@ -74,11 +74,11 @@ Running tests
To run tests, you need a couple of dependencies. They can be installed through To run tests, you need a couple of dependencies. They can be installed through
Debian/Ubuntu package management:: Debian/Ubuntu package management::
sudo aptitude install python-coverage python-nose sudo aptitude install python-coverage python-mock python-nose
Or, they can be installed using ``pip``:: Or, they can be installed using ``pip``::
sudo pip install -r requirements-tests.txt sudo pip install -r requirements/tests.txt
Then, to run all tests, go to the project directory and run:: Then, to run all tests, go to the project directory and run::

View File

@ -5,6 +5,7 @@ import os
import shutil import shutil
from pykka.actor import ThreadingActor from pykka.actor import ThreadingActor
from pykka.registry import ActorRegistry
from mopidy import settings from mopidy import settings
from mopidy.backends.base import (Backend, CurrentPlaylistController, from mopidy.backends.base import (Backend, CurrentPlaylistController,
@ -12,6 +13,7 @@ from mopidy.backends.base import (Backend, CurrentPlaylistController,
BasePlaybackProvider, StoredPlaylistsController, BasePlaybackProvider, StoredPlaylistsController,
BaseStoredPlaylistsProvider) BaseStoredPlaylistsProvider)
from mopidy.models import Playlist, Track, Album from mopidy.models import Playlist, Track, Album
from mopidy.outputs.base import BaseOutput
from .translator import parse_m3u, parse_mpd_tag_cache from .translator import parse_m3u, parse_mpd_tag_cache
@ -49,6 +51,13 @@ class LocalBackend(ThreadingActor, Backend):
self.uri_handlers = [u'file://'] self.uri_handlers = [u'file://']
self.output = None
def post_start(self):
output_refs = ActorRegistry.get_by_class(BaseOutput)
assert len(output_refs) == 1, 'Expected exactly one running output.'
self.output = output_refs[0].proxy()
class LocalPlaybackController(PlaybackController): class LocalPlaybackController(PlaybackController):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View File

@ -1,6 +1,8 @@
from pykka.actor import ThreadingActor
from mopidy.outputs.base import BaseOutput from mopidy.outputs.base import BaseOutput
class DummyOutput(BaseOutput): class DummyOutput(ThreadingActor, BaseOutput):
""" """
Audio output used for testing. Audio output used for testing.
""" """

View File

@ -1,2 +1,3 @@
coverage coverage
mock
nose nose

View File

@ -1,9 +1,9 @@
import mock
import multiprocessing import multiprocessing
import random import random
from mopidy.mixers.dummy import DummyMixer
from mopidy.models import Playlist, Track from mopidy.models import Playlist, Track
from mopidy.outputs.dummy import DummyOutput from mopidy.outputs.base import BaseOutput
from tests.backends.base import populate_playlist from tests.backends.base import populate_playlist
@ -11,19 +11,13 @@ class CurrentPlaylistControllerTest(object):
tracks = [] tracks = []
def setUp(self): def setUp(self):
self.core_queue = multiprocessing.Queue() self.backend = self.backend_class()
self.output = DummyOutput(self.core_queue) self.backend.output = mock.Mock(spec=BaseOutput)
self.backend = self.backend_class(
self.core_queue, self.output, DummyMixer)
self.controller = self.backend.current_playlist self.controller = self.backend.current_playlist
self.playback = self.backend.playback self.playback = self.backend.playback
assert len(self.tracks) == 3, 'Need three tracks to run tests.' assert len(self.tracks) == 3, 'Need three tracks to run tests.'
def tearDown(self):
self.backend.destroy()
self.output.destroy()
def test_add(self): def test_add(self):
for track in self.tracks: for track in self.tracks:
cp_track = self.controller.add(track) cp_track = self.controller.add(track)

View File

@ -1,4 +1,3 @@
from mopidy.mixers.dummy import DummyMixer
from mopidy.models import Playlist, Track, Album, Artist from mopidy.models import Playlist, Track, Album, Artist
from tests import SkipTest, data_folder from tests import SkipTest, data_folder
@ -15,12 +14,9 @@ class LibraryControllerTest(object):
Track()] Track()]
def setUp(self): def setUp(self):
self.backend = self.backend_class(mixer_class=DummyMixer) self.backend = self.backend_class()
self.library = self.backend.library self.library = self.backend.library
def tearDown(self):
self.backend.destroy()
def test_refresh(self): def test_refresh(self):
self.library.refresh() self.library.refresh()

View File

@ -1,10 +1,10 @@
import mock
import multiprocessing import multiprocessing
import random import random
import time import time
from mopidy.mixers.dummy import DummyMixer
from mopidy.models import Track from mopidy.models import Track
from mopidy.outputs.dummy import DummyOutput from mopidy.outputs.base import BaseOutput
from tests import SkipTest from tests import SkipTest
from tests.backends.base import populate_playlist from tests.backends.base import populate_playlist
@ -15,10 +15,8 @@ class PlaybackControllerTest(object):
tracks = [] tracks = []
def setUp(self): def setUp(self):
self.core_queue = multiprocessing.Queue() self.backend = self.backend_class()
self.output = DummyOutput(self.core_queue) self.backend.output = mock.Mock(spec=BaseOutput)
self.backend = self.backend_class(
self.core_queue, self.output, DummyMixer)
self.playback = self.backend.playback self.playback = self.backend.playback
self.current_playlist = self.backend.current_playlist self.current_playlist = self.backend.current_playlist
@ -27,10 +25,6 @@ class PlaybackControllerTest(object):
assert self.tracks[0].length >= 2000, \ assert self.tracks[0].length >= 2000, \
'First song needs to be at least 2000 miliseconds' 'First song needs to be at least 2000 miliseconds'
def tearDown(self):
self.backend.destroy()
self.output.destroy()
def test_initial_state_is_stopped(self): def test_initial_state_is_stopped(self):
self.assertEqual(self.playback.state, self.playback.STOPPED) self.assertEqual(self.playback.state, self.playback.STOPPED)
@ -733,10 +727,12 @@ class PlaybackControllerTest(object):
self.assertEqual(self.playback.stop(), None) self.assertEqual(self.playback.stop(), None)
def test_time_position_when_stopped(self): def test_time_position_when_stopped(self):
self.backend.output.get_position = mock.Mock(return_value=0)
self.assertEqual(self.playback.time_position, 0) self.assertEqual(self.playback.time_position, 0)
@populate_playlist @populate_playlist
def test_time_position_when_stopped_with_playlist(self): def test_time_position_when_stopped_with_playlist(self):
self.backend.output.get_position = mock.Mock(return_value=0)
self.assertEqual(self.playback.time_position, 0) self.assertEqual(self.playback.time_position, 0)
@SkipTest # Uses sleep and does not work with LocalBackend+DummyOutput @SkipTest # Uses sleep and does not work with LocalBackend+DummyOutput

View File

@ -3,7 +3,6 @@ import shutil
import tempfile import tempfile
from mopidy import settings from mopidy import settings
from mopidy.mixers.dummy import DummyMixer
from mopidy.models import Playlist from mopidy.models import Playlist
from tests import SkipTest, data_folder from tests import SkipTest, data_folder
@ -14,12 +13,10 @@ class StoredPlaylistsControllerTest(object):
settings.LOCAL_TAG_CACHE_FILE = data_folder('library_tag_cache') settings.LOCAL_TAG_CACHE_FILE = data_folder('library_tag_cache')
settings.LOCAL_MUSIC_PATH = data_folder('') settings.LOCAL_MUSIC_PATH = data_folder('')
self.backend = self.backend_class(mixer_class=DummyMixer) self.backend = self.backend_class()
self.stored = self.backend.stored_playlists self.stored = self.backend.stored_playlists
def tearDown(self): def tearDown(self):
self.backend.destroy()
if os.path.exists(settings.LOCAL_PLAYLIST_PATH): if os.path.exists(settings.LOCAL_PLAYLIST_PATH):
shutil.rmtree(settings.LOCAL_PLAYLIST_PATH) shutil.rmtree(settings.LOCAL_PLAYLIST_PATH)

View File

@ -70,8 +70,7 @@ class LocalStoredPlaylistsControllerTest(StoredPlaylistsControllerTest,
self.stored.save(playlist) self.stored.save(playlist)
self.backend.destroy() self.backend = self.backend_class()
self.backend = self.backend_class(mixer_class=DummyMixer)
self.stored = self.backend.stored_playlists self.stored = self.backend.stored_playlists
self.assert_(self.stored.playlists) self.assert_(self.stored.playlists)