|
|
@ -12,6 +12,7 @@ import copy |
|
|
|
|
|
|
|
from test.helper import FakeYDL, assertRegexpMatches |
|
|
|
from youtube_dl import YoutubeDL |
|
|
|
from youtube_dl.compat import compat_str |
|
|
|
from youtube_dl.extractor import YoutubeIE |
|
|
|
from youtube_dl.postprocessor.common import PostProcessor |
|
|
|
from youtube_dl.utils import match_filter_func |
|
|
@ -507,6 +508,51 @@ class TestYoutubeDL(unittest.TestCase): |
|
|
|
res = get_videos(f) |
|
|
|
self.assertEqual(res, ['1']) |
|
|
|
|
|
|
|
def test_playlist_items_selection(self): |
|
|
|
entries = [{ |
|
|
|
'id': compat_str(i), |
|
|
|
'title': compat_str(i), |
|
|
|
'url': TEST_URL, |
|
|
|
} for i in range(1, 5)] |
|
|
|
playlist = { |
|
|
|
'_type': 'playlist', |
|
|
|
'id': 'test', |
|
|
|
'entries': entries, |
|
|
|
'extractor': 'test:playlist', |
|
|
|
'extractor_key': 'test:playlist', |
|
|
|
'webpage_url': 'http://example.com', |
|
|
|
} |
|
|
|
|
|
|
|
def get_ids(params): |
|
|
|
ydl = YDL(params) |
|
|
|
# make a copy because the dictionary can be modified |
|
|
|
ydl.process_ie_result(playlist.copy()) |
|
|
|
return [int(v['id']) for v in ydl.downloaded_info_dicts] |
|
|
|
|
|
|
|
result = get_ids({}) |
|
|
|
self.assertEqual(result, [1, 2, 3, 4]) |
|
|
|
|
|
|
|
result = get_ids({'playlistend': 10}) |
|
|
|
self.assertEqual(result, [1, 2, 3, 4]) |
|
|
|
|
|
|
|
result = get_ids({'playlistend': 2}) |
|
|
|
self.assertEqual(result, [1, 2]) |
|
|
|
|
|
|
|
result = get_ids({'playliststart': 10}) |
|
|
|
self.assertEqual(result, []) |
|
|
|
|
|
|
|
result = get_ids({'playliststart': 2}) |
|
|
|
self.assertEqual(result, [2, 3, 4]) |
|
|
|
|
|
|
|
result = get_ids({'playlist_items': '2-4'}) |
|
|
|
self.assertEqual(result, [2, 3, 4]) |
|
|
|
|
|
|
|
result = get_ids({'playlist_items': '2,4'}) |
|
|
|
self.assertEqual(result, [2, 4]) |
|
|
|
|
|
|
|
result = get_ids({'playlist_items': '10'}) |
|
|
|
self.assertEqual(result, []) |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
unittest.main() |