core: Make core tracklist.add(tracks=...) deprecation safe

This commit is contained in:
Thomas Adamcik 2015-03-29 23:04:02 +02:00
parent dc673d554c
commit f4c93619d1
4 changed files with 69 additions and 31 deletions

View File

@ -333,6 +333,12 @@ class TracklistController(object):
assert tracks is not None or uri is not None or uris is not None, \
'tracks, uri or uris must be provided'
# TODO: assert that tracks are track instances
if tracks:
warnings.warn('tracklist.add() "tracks" argument is deprecated.',
DeprecationWarning)
if uri:
warnings.warn('tracklist.add() "uri" argument is deprecated.',
DeprecationWarning)

View File

@ -17,6 +17,8 @@ from tests import dummy_backend
class BackendEventsTest(unittest.TestCase):
def setUp(self): # noqa: N802
self.backend = dummy_backend.create_proxy()
self.backend.library.dummy_library = [
Track(uri='dummy:a'), Track(uri='dummy:b')]
with warnings.catch_warnings():
warnings.simplefilter('ignore')
@ -45,12 +47,12 @@ class BackendEventsTest(unittest.TestCase):
def test_tracklist_add_sends_tracklist_changed_event(self, send):
send.reset_mock()
self.core.tracklist.add([Track(uri='dummy:a')]).get()
self.core.tracklist.add(uris=['dummy:a']).get()
self.assertEqual(send.call_args[0][0], 'tracklist_changed')
def test_tracklist_clear_sends_tracklist_changed_event(self, send):
self.core.tracklist.add([Track(uri='dummy:a')]).get()
self.core.tracklist.add(uris=['dummy:a']).get()
send.reset_mock()
self.core.tracklist.clear().get()
@ -58,8 +60,7 @@ class BackendEventsTest(unittest.TestCase):
self.assertEqual(send.call_args[0][0], 'tracklist_changed')
def test_tracklist_move_sends_tracklist_changed_event(self, send):
self.core.tracklist.add(
[Track(uri='dummy:a'), Track(uri='dummy:b')]).get()
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
send.reset_mock()
self.core.tracklist.move(0, 1, 1).get()
@ -67,7 +68,7 @@ class BackendEventsTest(unittest.TestCase):
self.assertEqual(send.call_args[0][0], 'tracklist_changed')
def test_tracklist_remove_sends_tracklist_changed_event(self, send):
self.core.tracklist.add([Track(uri='dummy:a')]).get()
self.core.tracklist.add(uris=['dummy:a']).get()
send.reset_mock()
self.core.tracklist.remove(uri=['dummy:a']).get()
@ -75,8 +76,7 @@ class BackendEventsTest(unittest.TestCase):
self.assertEqual(send.call_args[0][0], 'tracklist_changed')
def test_tracklist_shuffle_sends_tracklist_changed_event(self, send):
self.core.tracklist.add(
[Track(uri='dummy:a'), Track(uri='dummy:b')]).get()
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
send.reset_mock()
self.core.tracklist.shuffle().get()

View File

@ -13,6 +13,7 @@ from tests import dummy_audio as audio
# TODO: split into smaller easier to follow tests. setup is way to complex.
# TODO: just mock tracklist?
class CorePlaybackTest(unittest.TestCase):
def setUp(self): # noqa: N802
self.backend1 = mock.Mock()
@ -42,14 +43,32 @@ class CorePlaybackTest(unittest.TestCase):
Track(uri='dummy1:c', length=None), # No duration
]
self.uris = [
'dummy1:a', 'dummy2:a', 'dummy3:a', 'dummy1:b', 'dummy1:c']
self.core = core.Core(mixer=None, backends=[
self.backend1, self.backend2, self.backend3])
self.core.tracklist.add(self.tracks)
def lookup(uris):
result = {uri: [] for uri in uris}
for track in self.tracks:
if track.uri in result:
result[track.uri].append(track)
return result
self.lookup_patcher = mock.patch.object(self.core.library, 'lookup')
self.lookup_mock = self.lookup_patcher.start()
self.lookup_mock.side_effect = lookup
self.core.tracklist.add(uris=self.uris)
self.tl_tracks = self.core.tracklist.tl_tracks
self.unplayable_tl_track = self.tl_tracks[2]
self.duration_less_tl_track = self.tl_tracks[4]
def tearDown(self): # noqa: N802
self.lookup_patcher.stop()
def trigger_end_of_track(self):
self.core.playback._on_end_of_track()
@ -136,7 +155,7 @@ class CorePlaybackTest(unittest.TestCase):
self.playback2.change_track.return_value.get.return_value = False
self.core.tracklist.clear()
self.core.tracklist.add(self.tracks[:2])
self.core.tracklist.add(uris=self.uris[:2])
tl_tracks = self.core.tracklist.tl_tracks
self.core.playback.play(tl_tracks[0])
@ -591,11 +610,16 @@ class TestStream(unittest.TestCase):
self.tracks = [Track(uri='dummy:a', length=1234),
Track(uri='dummy:b', length=1234)]
self.core.tracklist.add(self.tracks)
self.lookup_patcher = mock.patch.object(self.core.library, 'lookup')
self.lookup_mock = self.lookup_patcher.start()
self.lookup_mock.return_value = {t.uri: [t] for t in self.tracks}
self.core.tracklist.add(uris=[t.uri for t in self.tracks])
self.events = []
self.patcher = mock.patch('mopidy.audio.listener.AudioListener.send')
self.send_mock = self.patcher.start()
self.send_patcher = mock.patch(
'mopidy.audio.listener.AudioListener.send')
self.send_mock = self.send_patcher.start()
def send(event, **kwargs):
self.events.append((event, kwargs))
@ -604,7 +628,8 @@ class TestStream(unittest.TestCase):
def tearDown(self): # noqa: N802
pykka.ActorRegistry.stop_all()
self.patcher.stop()
self.lookup_patcher.stop()
self.send_patcher.stop()
def replay_audio_events(self):
while self.events:
@ -664,7 +689,9 @@ class CorePlaybackWithOldBackendTest(unittest.TestCase):
b.uri_schemes.get.return_value = ['dummy1']
b.playback = mock.Mock(spec=backend.PlaybackProvider)
b.playback.play.side_effect = TypeError
b.library.lookup.return_value.get.return_value = [
Track(uri='dummy1:a', length=40000)]
c = core.Core(mixer=None, backends=[b])
c.tracklist.add([Track(uri='dummy1:a', length=40000)])
c.tracklist.add(uris=['dummy1:a'])
c.playback.play() # No TypeError == test passed.

View File

@ -17,44 +17,49 @@ class TracklistTest(unittest.TestCase):
Track(uri='dummy1:c', name='bar'),
]
def lookup(uri):
future = mock.Mock()
future.get.return_value = [t for t in self.tracks if t.uri == uri]
return future
self.backend = mock.Mock()
self.backend.uri_schemes.get.return_value = ['dummy1']
self.library = mock.Mock(spec=backend.LibraryProvider)
self.library.lookup.side_effect = lookup
self.backend.library = self.library
self.core = core.Core(mixer=None, backends=[self.backend])
self.tl_tracks = self.core.tracklist.add(self.tracks)
self.tl_tracks = self.core.tracklist.add(uris=[
t.uri for t in self.tracks])
def test_add_by_uri_looks_up_uri_in_library(self):
track = Track(uri='dummy1:x', name='x')
self.library.lookup.return_value.get.return_value = [track]
self.library.lookup.reset_mock()
self.core.tracklist.clear()
with warnings.catch_warnings():
warnings.filterwarnings('ignore', r'tracklist.add.*"uri".*')
tl_tracks = self.core.tracklist.add(uri='dummy1:x')
tl_tracks = self.core.tracklist.add(uris=['dummy1:a'])
self.library.lookup.assert_called_once_with('dummy1:x')
self.library.lookup.assert_called_once_with('dummy1:a')
self.assertEqual(1, len(tl_tracks))
self.assertEqual(track, tl_tracks[0].track)
self.assertEqual(self.tracks[0], tl_tracks[0].track)
self.assertEqual(tl_tracks, self.core.tracklist.tl_tracks[-1:])
def test_add_by_uris_looks_up_uris_in_library(self):
track1 = Track(uri='dummy1:x', name='x')
track2 = Track(uri='dummy1:y1', name='y1')
track3 = Track(uri='dummy1:y2', name='y2')
self.library.lookup.return_value.get.side_effect = [
[track1], [track2, track3]]
self.library.lookup.reset_mock()
self.core.tracklist.clear()
tl_tracks = self.core.tracklist.add(uris=['dummy1:x', 'dummy1:y'])
tl_tracks = self.core.tracklist.add(uris=[t.uri for t in self.tracks])
self.library.lookup.assert_has_calls([
mock.call('dummy1:x'),
mock.call('dummy1:y'),
mock.call('dummy1:a'),
mock.call('dummy1:b'),
mock.call('dummy1:c'),
])
self.assertEqual(3, len(tl_tracks))
self.assertEqual(track1, tl_tracks[0].track)
self.assertEqual(track2, tl_tracks[1].track)
self.assertEqual(track3, tl_tracks[2].track)
self.assertEqual(self.tracks[0], tl_tracks[0].track)
self.assertEqual(self.tracks[1], tl_tracks[1].track)
self.assertEqual(self.tracks[2], tl_tracks[2].track)
self.assertEqual(
tl_tracks, self.core.tracklist.tl_tracks[-len(tl_tracks):])