diff options
Diffstat (limited to 'test/test_YoutubeDL.py')
| -rw-r--r-- | test/test_YoutubeDL.py | 98 | 
1 files changed, 88 insertions, 10 deletions
| diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index a13c09ef4..0388c0bf3 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -15,7 +15,7 @@ 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 +from youtube_dl.utils import ExtractorError, match_filter_func  TEST_URL = 'http://localhost/sample.mp4' @@ -105,6 +105,7 @@ class TestFormatSelection(unittest.TestCase):      def test_format_selection(self):          formats = [              {'format_id': '35', 'ext': 'mp4', 'preference': 1, 'url': TEST_URL}, +            {'format_id': 'example-with-dashes', 'ext': 'webm', '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}, @@ -136,6 +137,11 @@ class TestFormatSelection(unittest.TestCase):          downloaded = ydl.downloaded_info_dicts[0]          self.assertEqual(downloaded['format_id'], '35') +        ydl = YDL({'format': 'example-with-dashes'}) +        ydl.process_ie_result(info_dict.copy()) +        downloaded = ydl.downloaded_info_dicts[0] +        self.assertEqual(downloaded['format_id'], 'example-with-dashes') +      def test_format_selection_audio(self):          formats = [              {'format_id': 'audio-low', 'ext': 'webm', 'preference': 1, 'vcodec': 'none', 'url': TEST_URL}, @@ -229,21 +235,70 @@ class TestFormatSelection(unittest.TestCase):              '141', '172', '140', '171', '139',          ] -        for f1id, f2id in zip(order, order[1:]): -            f1 = YoutubeIE._formats[f1id].copy() -            f1['format_id'] = f1id -            f1['url'] = 'url:' + f1id -            f2 = YoutubeIE._formats[f2id].copy() -            f2['format_id'] = f2id -            f2['url'] = 'url:' + f2id +        def format_info(f_id): +            info = YoutubeIE._formats[f_id].copy() +            info['format_id'] = f_id +            info['url'] = 'url:' + f_id +            return info +        formats_order = [format_info(f_id) for f_id in order] + +        info_dict = _make_result(list(formats_order), extractor='youtube') +        ydl = YDL({'format': 'bestvideo+bestaudio'}) +        yie = YoutubeIE(ydl) +        yie._sort_formats(info_dict['formats']) +        ydl.process_ie_result(info_dict) +        downloaded = ydl.downloaded_info_dicts[0] +        self.assertEqual(downloaded['format_id'], '137+141') +        self.assertEqual(downloaded['ext'], 'mp4') + +        info_dict = _make_result(list(formats_order), extractor='youtube') +        ydl = YDL({'format': 'bestvideo[height>=999999]+bestaudio/best'}) +        yie = YoutubeIE(ydl) +        yie._sort_formats(info_dict['formats']) +        ydl.process_ie_result(info_dict) +        downloaded = ydl.downloaded_info_dicts[0] +        self.assertEqual(downloaded['format_id'], '38') + +        info_dict = _make_result(list(formats_order), extractor='youtube') +        ydl = YDL({'format': 'bestvideo/best,bestaudio'}) +        yie = YoutubeIE(ydl) +        yie._sort_formats(info_dict['formats']) +        ydl.process_ie_result(info_dict) +        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] +        self.assertEqual(downloaded_ids, ['137', '141']) + +        info_dict = _make_result(list(formats_order), extractor='youtube') +        ydl = YDL({'format': '(bestvideo[ext=mp4],bestvideo[ext=webm])+bestaudio'}) +        yie = YoutubeIE(ydl) +        yie._sort_formats(info_dict['formats']) +        ydl.process_ie_result(info_dict) +        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] +        self.assertEqual(downloaded_ids, ['137+141', '248+141']) + +        info_dict = _make_result(list(formats_order), extractor='youtube') +        ydl = YDL({'format': '(bestvideo[ext=mp4],bestvideo[ext=webm])[height<=720]+bestaudio'}) +        yie = YoutubeIE(ydl) +        yie._sort_formats(info_dict['formats']) +        ydl.process_ie_result(info_dict) +        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] +        self.assertEqual(downloaded_ids, ['136+141', '247+141']) + +        info_dict = _make_result(list(formats_order), extractor='youtube') +        ydl = YDL({'format': '(bestvideo[ext=none]/bestvideo[ext=webm])+bestaudio'}) +        yie = YoutubeIE(ydl) +        yie._sort_formats(info_dict['formats']) +        ydl.process_ie_result(info_dict) +        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] +        self.assertEqual(downloaded_ids, ['248+141']) +        for f1, f2 in zip(formats_order, formats_order[1:]):              info_dict = _make_result([f1, f2], extractor='youtube')              ydl = YDL({'format': 'best/bestvideo'})              yie = YoutubeIE(ydl)              yie._sort_formats(info_dict['formats'])              ydl.process_ie_result(info_dict)              downloaded = ydl.downloaded_info_dicts[0] -            self.assertEqual(downloaded['format_id'], f1id) +            self.assertEqual(downloaded['format_id'], f1['format_id'])              info_dict = _make_result([f2, f1], extractor='youtube')              ydl = YDL({'format': 'best/bestvideo'}) @@ -251,7 +306,18 @@ class TestFormatSelection(unittest.TestCase):              yie._sort_formats(info_dict['formats'])              ydl.process_ie_result(info_dict)              downloaded = ydl.downloaded_info_dicts[0] -            self.assertEqual(downloaded['format_id'], f1id) +            self.assertEqual(downloaded['format_id'], f1['format_id']) + +    def test_invalid_format_specs(self): +        def assert_syntax_error(format_spec): +            ydl = YDL({'format': format_spec}) +            info_dict = _make_result([{'format_id': 'foo', 'url': TEST_URL}]) +            self.assertRaises(SyntaxError, ydl.process_ie_result, info_dict) + +        assert_syntax_error('bestvideo,,best') +        assert_syntax_error('+bestaudio') +        assert_syntax_error('bestvideo+') +        assert_syntax_error('/')      def test_format_filtering(self):          formats = [ @@ -308,6 +374,18 @@ class TestFormatSelection(unittest.TestCase):          downloaded = ydl.downloaded_info_dicts[0]          self.assertEqual(downloaded['format_id'], 'G') +        ydl = YDL({'format': 'all[width>=400][width<=600]'}) +        ydl.process_ie_result(info_dict) +        downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] +        self.assertEqual(downloaded_ids, ['B', 'C', 'D']) + +        ydl = YDL({'format': 'best[height<40]'}) +        try: +            ydl.process_ie_result(info_dict) +        except ExtractorError: +            pass +        self.assertEqual(ydl.downloaded_info_dicts, []) +  class TestYoutubeDL(unittest.TestCase):      def test_subtitles(self): | 
