diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 966d27a498..4773413139 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -549,6 +549,82 @@ class TestFormatSelection(unittest.TestCase): ydl.process_ie_result(info_dict) self.assertEqual(ydl.downloaded_info_dicts, []) + formats2 = [ + {'format_id': 'H', 'aspect_ratio': 1.0}, # 1:1 + {'format_id': 'I', 'aspect_ratio': 1.33}, # 4:3 + {'format_id': 'J', 'aspect_ratio': 1.5}, # 3:2 + {'format_id': 'K', 'aspect_ratio': 1.78}, # 16:9 + {'format_id': 'L', 'aspect_ratio': 2.33}, # 21:9 + {'format_id': 'M', 'aspect_ratio': 0.75}, # 3:4 + {'format_id': 'N', 'aspect_ratio': 0.67}, # 2:3 + {'format_id': 'O', 'aspect_ratio': 0.56}, # 9:16 + {'format_id': 'P', 'aspect_ratio': 0.43}, # 9:21 + {'format_id': 'Q', 'aspect_ratio': 1.01}, + {'format_id': 'R', 'aspect_ratio': 1.99}, + {'format_id': 'T'}, + {'format_id': 'S', 'aspect_ratio': 0.99}, + ] + for f in formats2: + f['url'] = 'http://_/' + f['ext'] = 'unknown' + + info_dict2 = _make_result(formats2, _format_sort_fields=('id', )) + + ydl = YDL({'format': 'best[aspect_ratio=1]'}) + ydl.process_ie_result(info_dict2) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'H') + + ydl = YDL({'format': 'all[aspect_ratio > 1.00]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['R', 'Q', 'L', 'K', 'J', 'I']) + + ydl = YDL({'format': 'all[aspect_ratio < 1.00]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['S', 'P', 'O', 'N', 'M']) + + ydl = YDL({'format': 'all[aspect_ratio>1.05]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['R', 'L', 'K', 'J', 'I']) + + ydl = YDL({'format': 'all [aspect_ratio < 0.950]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['P', 'O', 'N', 'M']) + + ydl = YDL({'format': 'best[aspect_ratio=1.5]'}) + ydl.process_ie_result(info_dict2) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'J') + + ydl = YDL({'format': 'all[aspect_ratio < 0.95], all[aspect_ratio>1.05]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['P', 'O', 'N', 'M', 'R', 'L', 'K', 'J', 'I']) + + ydl = YDL({'format': 'all[aspect_ratio>=0.95][aspect_ratio <= 1.05]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['S', 'Q', 'H']) + + ydl = YDL({'format': 'all[aspect_ratio!=1]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I']) + + ydl = YDL({'format': 'all[aspect_ratio!=1]'}) + ydl.process_ie_result(info_dict2) + downloaded_ids = [info['format_id'] for info in ydl.downloaded_info_dicts] + self.assertEqual(downloaded_ids, ['S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I']) + + ydl = YDL({'format': 'best[aspect_ratio >=? 3.33]'}) + ydl.process_ie_result(info_dict2) + downloaded = ydl.downloaded_info_dicts[0] + self.assertEqual(downloaded['format_id'], 'T') + @patch('yt_dlp.postprocessor.ffmpeg.FFmpegMergerPP.available', False) def test_default_format_spec_without_ffmpeg(self): ydl = YDL({})