From 7aba64519c7f2c3150b1ff05cce3c07b5d551506 Mon Sep 17 00:00:00 2001 From: InvalidUsernameException Date: Mon, 9 Jun 2025 19:42:15 +0200 Subject: [PATCH 1/5] Add support for `playlist_maxcount` assertion in download tests --- test/test_download.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test/test_download.py b/test/test_download.py index 3f36869d9..98087fcd3 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -14,6 +14,7 @@ from test.helper import ( assertGreaterEqual, + assertLessEqual, expect_info_dict, expect_warnings, get_params, @@ -122,8 +123,10 @@ def print_skipping(reason): params['outtmpl'] = tname + '_' + params['outtmpl'] if is_playlist and 'playlist' not in test_case: params.setdefault('extract_flat', 'in_playlist') - params.setdefault('playlistend', test_case.get( - 'playlist_mincount', test_case.get('playlist_count', -2) + 1)) + params.setdefault('playlistend', max( + test_case.get('playlist_mincount') or -1, + (test_case.get('playlist_count') or -2) + 1, + (test_case.get('playlist_maxcount') or -2) + 1)) params.setdefault('skip_download', True) ydl = YoutubeDL(params, auto_init=False) @@ -211,6 +214,14 @@ def try_rm_tcs_files(tcs=None): test_case['url'], len(res_dict['entries']), )) + if 'playlist_maxcount' in test_case: + assertLessEqual( + self, + len(res_dict['entries']), + test_case['playlist_maxcount'], + 'Expected at most %d in playlist %s, but got %d' % ( + test_case['playlist_maxcount'], test_case['url'], + len(res_dict['entries']))) if 'playlist_duration_sum' in test_case: got_duration = sum(e['duration'] for e in res_dict['entries']) self.assertEqual( From 082f492d83303f44eed447747e878619404de527 Mon Sep 17 00:00:00 2001 From: InvalidUsernameException Date: Mon, 9 Jun 2025 19:42:15 +0200 Subject: [PATCH 2/5] Make error messages more consistent --- test/test_download.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_download.py b/test/test_download.py index 98087fcd3..806037faf 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -202,14 +202,14 @@ def try_rm_tcs_files(tcs=None): self, len(res_dict['entries']), test_case['playlist_mincount'], - 'Expected at least %d in playlist %s, but got only %d' % ( + 'Expected at least %d entries in playlist %s, but got only %d' % ( test_case['playlist_mincount'], test_case['url'], len(res_dict['entries']))) if 'playlist_count' in test_case: self.assertEqual( len(res_dict['entries']), test_case['playlist_count'], - 'Expected %d entries in playlist %s, but got %d.' % ( + 'Expected exactly %d entries in playlist %s, but got %d.' % ( test_case['playlist_count'], test_case['url'], len(res_dict['entries']), @@ -219,7 +219,7 @@ def try_rm_tcs_files(tcs=None): self, len(res_dict['entries']), test_case['playlist_maxcount'], - 'Expected at most %d in playlist %s, but got %d' % ( + 'Expected at most %d entries in playlist %s, but got %d' % ( test_case['playlist_maxcount'], test_case['url'], len(res_dict['entries']))) if 'playlist_duration_sum' in test_case: From fffdc7480ea5dcb430277457556fc33f209140f1 Mon Sep 17 00:00:00 2001 From: InvalidUsernameException Date: Mon, 9 Jun 2025 19:42:15 +0200 Subject: [PATCH 3/5] Update to current code style --- test/test_download.py | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/test/test_download.py b/test/test_download.py index 806037faf..918d2c5f9 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -199,29 +199,19 @@ def try_rm_tcs_files(tcs=None): if 'playlist_mincount' in test_case: assertGreaterEqual( - self, - len(res_dict['entries']), - test_case['playlist_mincount'], - 'Expected at least %d entries in playlist %s, but got only %d' % ( - test_case['playlist_mincount'], test_case['url'], - len(res_dict['entries']))) + self, len(res_dict['entries']), test_case['playlist_mincount'], + f'Expected at least {test_case["playlist_mincount"]} entries ' + f'in playlist {test_case["url"]}, but got only {len(res_dict["entries"])}') if 'playlist_count' in test_case: self.assertEqual( - len(res_dict['entries']), - test_case['playlist_count'], - 'Expected exactly %d entries in playlist %s, but got %d.' % ( - test_case['playlist_count'], - test_case['url'], - len(res_dict['entries']), - )) + len(res_dict['entries']), test_case['playlist_count'], + f'Expected exactly {test_case["playlist_count"]} entries ' + f'in playlist {test_case["url"]}, but got {len(res_dict["entries"])}') if 'playlist_maxcount' in test_case: assertLessEqual( - self, - len(res_dict['entries']), - test_case['playlist_maxcount'], - 'Expected at most %d entries in playlist %s, but got %d' % ( - test_case['playlist_maxcount'], test_case['url'], - len(res_dict['entries']))) + self, len(res_dict['entries']), test_case['playlist_maxcount'], + f'Expected at most {test_case["playlist_maxcount"]} entries ' + f'in playlist {test_case["url"]}, but got {len(res_dict["entries"])}') if 'playlist_duration_sum' in test_case: got_duration = sum(e['duration'] for e in res_dict['entries']) self.assertEqual( From 94a55a5547fa6240709793a77d8fee357f7f23a5 Mon Sep 17 00:00:00 2001 From: InvalidUsernameException Date: Mon, 9 Jun 2025 19:42:16 +0200 Subject: [PATCH 4/5] Remove dead-code assertion for `playlist_duration_sum` There are no current usages, which can be verified with git grep playlist_duration_sum The last usage was removed in 92dcba1e1cc411eecb64792e78ad8f3b125691c8, as per git log -S playlist_duration_sum -p That commit was made over 10 years ago and it seems unlikely than a test inside a plugin would make use of this special-case assertion. So I think it is worth removing. --- test/test_download.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/test_download.py b/test/test_download.py index 918d2c5f9..2cdcdfa91 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -212,10 +212,6 @@ def try_rm_tcs_files(tcs=None): self, len(res_dict['entries']), test_case['playlist_maxcount'], f'Expected at most {test_case["playlist_maxcount"]} entries ' f'in playlist {test_case["url"]}, but got {len(res_dict["entries"])}') - if 'playlist_duration_sum' in test_case: - got_duration = sum(e['duration'] for e in res_dict['entries']) - self.assertEqual( - test_case['playlist_duration_sum'], got_duration) # Generalize both playlists and single videos to unified format for # simplicity From 42393a594951b36843aef8faf0fde3d36dc92b84 Mon Sep 17 00:00:00 2001 From: InvalidUsernameException Date: Mon, 9 Jun 2025 20:46:35 +0200 Subject: [PATCH 5/5] Don't be over-specific with potentially wrong information --- test/test_download.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/test_download.py b/test/test_download.py index 2cdcdfa91..75f81f419 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -197,21 +197,23 @@ def try_rm_tcs_files(tcs=None): self.assertTrue('entries' in res_dict) expect_info_dict(self, res_dict, test_case.get('info_dict', {})) + num_entries = len(res_dict['entries']) if 'playlist_mincount' in test_case: assertGreaterEqual( - self, len(res_dict['entries']), test_case['playlist_mincount'], + self, num_entries, test_case['playlist_mincount'], f'Expected at least {test_case["playlist_mincount"]} entries ' - f'in playlist {test_case["url"]}, but got only {len(res_dict["entries"])}') + f'in playlist {test_case["url"]}, but got only {num_entries}') if 'playlist_count' in test_case: + got_text = num_entries if num_entries <= test_case['playlist_count'] else 'more' self.assertEqual( - len(res_dict['entries']), test_case['playlist_count'], + num_entries, test_case['playlist_count'], f'Expected exactly {test_case["playlist_count"]} entries ' - f'in playlist {test_case["url"]}, but got {len(res_dict["entries"])}') + f'in playlist {test_case["url"]}, but got {got_text}') if 'playlist_maxcount' in test_case: assertLessEqual( - self, len(res_dict['entries']), test_case['playlist_maxcount'], + self, num_entries, test_case['playlist_maxcount'], f'Expected at most {test_case["playlist_maxcount"]} entries ' - f'in playlist {test_case["url"]}, but got {len(res_dict["entries"])}') + f'in playlist {test_case["url"]}, but got more') # Generalize both playlists and single videos to unified format for # simplicity