core: Make core tracklist.add(tracks=...) deprecation safe
This commit is contained in:
parent
dc673d554c
commit
f4c93619d1
@ -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)
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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):])
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user