Fix ~200 backend tests
This commit is contained in:
parent
985213ffa2
commit
46c6ee68df
@ -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::
|
||||||
|
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
@ -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.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -1,2 +1,3 @@
|
|||||||
coverage
|
coverage
|
||||||
|
mock
|
||||||
nose
|
nose
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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()
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user