diff options
Diffstat (limited to 'test/test_YoutubeDL.py')
| -rw-r--r-- | test/test_YoutubeDL.py | 116 | 
1 files changed, 94 insertions, 22 deletions
| diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 055e42555..652519831 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -14,6 +14,9 @@ from test.helper import FakeYDL, assertRegexpMatches  from youtube_dl import YoutubeDL  from youtube_dl.extractor import YoutubeIE  from youtube_dl.postprocessor.common import PostProcessor +from youtube_dl.utils import match_filter_func + +TEST_URL = 'http://localhost/sample.mp4'  class YDL(FakeYDL): @@ -46,8 +49,8 @@ class TestFormatSelection(unittest.TestCase):          ydl = YDL()          ydl.params['prefer_free_formats'] = True          formats = [ -            {'ext': 'webm', 'height': 460, 'url': 'x'}, -            {'ext': 'mp4', 'height': 460, 'url': 'y'}, +            {'ext': 'webm', 'height': 460, 'url': TEST_URL}, +            {'ext': 'mp4', 'height': 460, 'url': TEST_URL},          ]          info_dict = _make_result(formats)          yie = YoutubeIE(ydl) @@ -60,8 +63,8 @@ class TestFormatSelection(unittest.TestCase):          ydl = YDL()          ydl.params['prefer_free_formats'] = True          formats = [ -            {'ext': 'webm', 'height': 720, 'url': 'a'}, -            {'ext': 'mp4', 'height': 1080, 'url': 'b'}, +            {'ext': 'webm', 'height': 720, 'url': TEST_URL}, +            {'ext': 'mp4', 'height': 1080, 'url': TEST_URL},          ]          info_dict['formats'] = formats          yie = YoutubeIE(ydl) @@ -74,9 +77,9 @@ class TestFormatSelection(unittest.TestCase):          ydl = YDL()          ydl.params['prefer_free_formats'] = False          formats = [ -            {'ext': 'webm', 'height': 720, 'url': '_'}, -            {'ext': 'mp4', 'height': 720, 'url': '_'}, -            {'ext': 'flv', 'height': 720, 'url': '_'}, +            {'ext': 'webm', 'height': 720, 'url': TEST_URL}, +            {'ext': 'mp4', 'height': 720, 'url': TEST_URL}, +            {'ext': 'flv', 'height': 720, 'url': TEST_URL},          ]          info_dict['formats'] = formats          yie = YoutubeIE(ydl) @@ -88,8 +91,8 @@ class TestFormatSelection(unittest.TestCase):          ydl = YDL()          ydl.params['prefer_free_formats'] = False          formats = [ -            {'ext': 'flv', 'height': 720, 'url': '_'}, -            {'ext': 'webm', 'height': 720, 'url': '_'}, +            {'ext': 'flv', 'height': 720, 'url': TEST_URL}, +            {'ext': 'webm', 'height': 720, 'url': TEST_URL},          ]          info_dict['formats'] = formats          yie = YoutubeIE(ydl) @@ -133,10 +136,10 @@ class TestFormatSelection(unittest.TestCase):      def test_format_selection(self):          formats = [ -            {'format_id': '35', 'ext': 'mp4', 'preference': 1, 'url': '_'}, -            {'format_id': '45', 'ext': 'webm', 'preference': 2, 'url': '_'}, -            {'format_id': '47', 'ext': 'webm', 'preference': 3, 'url': '_'}, -            {'format_id': '2', 'ext': 'flv', 'preference': 4, 'url': '_'}, +            {'format_id': '35', 'ext': 'mp4', 'preference': 1, 'url': TEST_URL}, +            {'format_id': '45', 'ext': 'webm', 'preference': 2, 'url': TEST_URL}, +            {'format_id': '47', 'ext': 'webm', 'preference': 3, 'url': TEST_URL}, +            {'format_id': '2', 'ext': 'flv', 'preference': 4, 'url': TEST_URL},          ]          info_dict = _make_result(formats) @@ -167,10 +170,10 @@ class TestFormatSelection(unittest.TestCase):      def test_format_selection_audio(self):          formats = [ -            {'format_id': 'audio-low', 'ext': 'webm', 'preference': 1, 'vcodec': 'none', 'url': '_'}, -            {'format_id': 'audio-mid', 'ext': 'webm', 'preference': 2, 'vcodec': 'none', 'url': '_'}, -            {'format_id': 'audio-high', 'ext': 'flv', 'preference': 3, 'vcodec': 'none', 'url': '_'}, -            {'format_id': 'vid', 'ext': 'mp4', 'preference': 4, 'url': '_'}, +            {'format_id': 'audio-low', 'ext': 'webm', 'preference': 1, 'vcodec': 'none', 'url': TEST_URL}, +            {'format_id': 'audio-mid', 'ext': 'webm', 'preference': 2, 'vcodec': 'none', 'url': TEST_URL}, +            {'format_id': 'audio-high', 'ext': 'flv', 'preference': 3, 'vcodec': 'none', 'url': TEST_URL}, +            {'format_id': 'vid', 'ext': 'mp4', 'preference': 4, 'url': TEST_URL},          ]          info_dict = _make_result(formats) @@ -185,8 +188,8 @@ class TestFormatSelection(unittest.TestCase):          self.assertEqual(downloaded['format_id'], 'audio-low')          formats = [ -            {'format_id': 'vid-low', 'ext': 'mp4', 'preference': 1, 'url': '_'}, -            {'format_id': 'vid-high', 'ext': 'mp4', 'preference': 2, 'url': '_'}, +            {'format_id': 'vid-low', 'ext': 'mp4', 'preference': 1, 'url': TEST_URL}, +            {'format_id': 'vid-high', 'ext': 'mp4', 'preference': 2, 'url': TEST_URL},          ]          info_dict = _make_result(formats) @@ -228,9 +231,9 @@ class TestFormatSelection(unittest.TestCase):      def test_format_selection_video(self):          formats = [ -            {'format_id': 'dash-video-low', 'ext': 'mp4', 'preference': 1, 'acodec': 'none', 'url': '_'}, -            {'format_id': 'dash-video-high', 'ext': 'mp4', 'preference': 2, 'acodec': 'none', 'url': '_'}, -            {'format_id': 'vid', 'ext': 'mp4', 'preference': 3, 'url': '_'}, +            {'format_id': 'dash-video-low', 'ext': 'mp4', 'preference': 1, 'acodec': 'none', 'url': TEST_URL}, +            {'format_id': 'dash-video-high', 'ext': 'mp4', 'preference': 2, 'acodec': 'none', 'url': TEST_URL}, +            {'format_id': 'vid', 'ext': 'mp4', 'preference': 3, 'url': TEST_URL},          ]          info_dict = _make_result(formats) @@ -337,6 +340,8 @@ class TestFormatSelection(unittest.TestCase):          downloaded = ydl.downloaded_info_dicts[0]          self.assertEqual(downloaded['format_id'], 'G') + +class TestYoutubeDL(unittest.TestCase):      def test_subtitles(self):          def s_formats(lang, autocaption=False):              return [{ @@ -459,6 +464,73 @@ class TestFormatSelection(unittest.TestCase):          self.assertTrue(os.path.exists(audiofile), '%s doesn\'t exist' % audiofile)          os.unlink(audiofile) +    def test_match_filter(self): +        class FilterYDL(YDL): +            def __init__(self, *args, **kwargs): +                super(FilterYDL, self).__init__(*args, **kwargs) +                self.params['simulate'] = True + +            def process_info(self, info_dict): +                super(YDL, self).process_info(info_dict) + +            def _match_entry(self, info_dict, incomplete): +                res = super(FilterYDL, self)._match_entry(info_dict, incomplete) +                if res is None: +                    self.downloaded_info_dicts.append(info_dict) +                return res + +        first = { +            'id': '1', +            'url': TEST_URL, +            'title': 'one', +            'extractor': 'TEST', +            'duration': 30, +            'filesize': 10 * 1024, +        } +        second = { +            'id': '2', +            'url': TEST_URL, +            'title': 'two', +            'extractor': 'TEST', +            'duration': 10, +            'description': 'foo', +            'filesize': 5 * 1024, +        } +        videos = [first, second] + +        def get_videos(filter_=None): +            ydl = FilterYDL({'match_filter': filter_}) +            for v in videos: +                ydl.process_ie_result(v, download=True) +            return [v['id'] for v in ydl.downloaded_info_dicts] + +        res = get_videos() +        self.assertEqual(res, ['1', '2']) + +        def f(v): +            if v['id'] == '1': +                return None +            else: +                return 'Video id is not 1' +        res = get_videos(f) +        self.assertEqual(res, ['1']) + +        f = match_filter_func('duration < 30') +        res = get_videos(f) +        self.assertEqual(res, ['2']) + +        f = match_filter_func('description = foo') +        res = get_videos(f) +        self.assertEqual(res, ['2']) + +        f = match_filter_func('description =? foo') +        res = get_videos(f) +        self.assertEqual(res, ['1', '2']) + +        f = match_filter_func('filesize > 5KiB') +        res = get_videos(f) +        self.assertEqual(res, ['1']) +  if __name__ == '__main__':      unittest.main() | 
