mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	Simplify tests
* Make them directly executable again * Move common stuff (md5, parameters) to helper * Never import * * General clean up
This commit is contained in:
		| @@ -1,22 +1,27 @@ | ||||
| import errno | ||||
| import io | ||||
| import hashlib | ||||
| import json | ||||
| import os.path | ||||
| import re | ||||
| import types | ||||
|  | ||||
| import youtube_dl.extractor | ||||
| from youtube_dl import YoutubeDL, YoutubeDLHandler | ||||
| from youtube_dl.utils import ( | ||||
|     compat_cookiejar, | ||||
|     compat_urllib_request, | ||||
| ) | ||||
| from youtube_dl import YoutubeDL | ||||
|  | ||||
| youtube_dl._setup_opener(timeout=10) | ||||
|  | ||||
| PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") | ||||
| with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: | ||||
|     parameters = json.load(pf) | ||||
| def global_setup(): | ||||
|     youtube_dl._setup_opener(timeout=10) | ||||
|  | ||||
|  | ||||
| def get_params(override=None): | ||||
|     PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), | ||||
|                                    "parameters.json") | ||||
|     with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: | ||||
|         parameters = json.load(pf) | ||||
|     if override: | ||||
|         parameters.update(override) | ||||
|     return parameters | ||||
|  | ||||
|  | ||||
| def try_rm(filename): | ||||
| @@ -32,7 +37,7 @@ class FakeYDL(YoutubeDL): | ||||
|     def __init__(self): | ||||
|         # Different instances of the downloader can't share the same dictionary | ||||
|         # some test set the "sublang" parameter, which would break the md5 checks. | ||||
|         params = dict(parameters) | ||||
|         params = get_params() | ||||
|         super(FakeYDL, self).__init__(params) | ||||
|         self.result = [] | ||||
|          | ||||
| @@ -62,3 +67,6 @@ def get_testcases(): | ||||
|         for t in getattr(ie, '_TESTS', []): | ||||
|             t['name'] = type(ie).__name__[:-len('IE')] | ||||
|             yield t | ||||
|  | ||||
|  | ||||
| md5 = lambda s: hashlib.md5(s.encode('utf-8')).hexdigest() | ||||
|   | ||||
| @@ -1,14 +1,16 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| import sys | ||||
| import unittest | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from test.helper import global_setup, try_rm | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| from youtube_dl import YoutubeDL | ||||
| from .helper import try_rm | ||||
|  | ||||
|  | ||||
| def _download_restricted(url, filename, age): | ||||
|   | ||||
| @@ -1,14 +1,20 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| import sys | ||||
| import unittest | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
|  | ||||
| from test.helper import get_testcases | ||||
|  | ||||
| from youtube_dl.extractor import ( | ||||
|     gen_extractors, | ||||
|     JustinTVIE, | ||||
|     YoutubeIE, | ||||
| ) | ||||
|  | ||||
| from youtube_dl.extractor import YoutubeIE, YoutubePlaylistIE, YoutubeChannelIE, JustinTVIE, gen_extractors | ||||
| from .helper import get_testcases | ||||
|  | ||||
| class TestAllURLsMatching(unittest.TestCase): | ||||
|     def setUp(self): | ||||
|   | ||||
| @@ -1,18 +1,16 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| import sys | ||||
| import unittest | ||||
| import hashlib | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from test.helper import FakeYDL, global_setup, md5 | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| from youtube_dl.extractor import DailymotionIE | ||||
| from youtube_dl.utils import * | ||||
| from .helper import FakeYDL | ||||
|  | ||||
| md5 = lambda s: hashlib.md5(s.encode('utf-8')).hexdigest() | ||||
|  | ||||
| class TestDailymotionSubtitles(unittest.TestCase): | ||||
|     def setUp(self): | ||||
|   | ||||
| @@ -1,26 +1,31 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from test.helper import get_params, get_testcases, global_setup, try_rm, md5 | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| import hashlib | ||||
| import io | ||||
| import os | ||||
| import json | ||||
| import unittest | ||||
| import sys | ||||
| import socket | ||||
| import binascii | ||||
|  | ||||
| # Allow direct execution | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| import youtube_dl.YoutubeDL | ||||
| from youtube_dl.utils import * | ||||
|  | ||||
| PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") | ||||
| from youtube_dl.utils import ( | ||||
|     compat_str, | ||||
|     compat_urllib_error, | ||||
|     DownloadError, | ||||
|     ExtractorError, | ||||
|     UnavailableVideoError, | ||||
| ) | ||||
|  | ||||
| RETRIES = 3 | ||||
|  | ||||
| md5 = lambda s: hashlib.md5(s.encode('utf-8')).hexdigest() | ||||
|  | ||||
| class YoutubeDL(youtube_dl.YoutubeDL): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         self.to_stderr = self.to_screen | ||||
| @@ -37,18 +42,12 @@ def _file_md5(fn): | ||||
|     with open(fn, 'rb') as f: | ||||
|         return hashlib.md5(f.read()).hexdigest() | ||||
|  | ||||
| import test.helper as helper  # Set up remaining global configuration | ||||
| from .helper import get_testcases, try_rm | ||||
| defs = get_testcases() | ||||
|  | ||||
| with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: | ||||
|     parameters = json.load(pf) | ||||
|  | ||||
|  | ||||
| class TestDownload(unittest.TestCase): | ||||
|     maxDiff = None | ||||
|     def setUp(self): | ||||
|         self.parameters = parameters | ||||
|         self.defs = defs | ||||
|  | ||||
| ### Dynamically generate tests | ||||
| @@ -68,8 +67,7 @@ def generator(test_case): | ||||
|             print_skipping(test_case['skip']) | ||||
|             return | ||||
|  | ||||
|         params = self.parameters.copy() | ||||
|         params.update(test_case.get('params', {})) | ||||
|         params = get_params(test_case.get('params', {})) | ||||
|  | ||||
|         ydl = YoutubeDL(params) | ||||
|         ydl.add_default_info_extractors() | ||||
|   | ||||
| @@ -1,13 +1,16 @@ | ||||
| #!/usr/bin/env python | ||||
| # encoding: utf-8 | ||||
|  | ||||
| import sys | ||||
| import unittest | ||||
| import json | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from test.helper import FakeYDL, global_setup | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| from youtube_dl.extractor import ( | ||||
|     DailymotionPlaylistIE, | ||||
| @@ -18,9 +21,7 @@ from youtube_dl.extractor import ( | ||||
|     LivestreamIE, | ||||
|     NHLVideocenterIE, | ||||
| ) | ||||
| from youtube_dl.utils import * | ||||
|  | ||||
| from .helper import FakeYDL | ||||
|  | ||||
| class TestPlaylists(unittest.TestCase): | ||||
|     def assertIsPlaylist(self, info): | ||||
|   | ||||
| @@ -1,14 +1,14 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| # Various small unit tests | ||||
|  | ||||
| import sys | ||||
| import unittest | ||||
| import xml.etree.ElementTree | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
|  | ||||
| # Various small unit tests | ||||
| import xml.etree.ElementTree | ||||
|  | ||||
| #from youtube_dl.utils import htmlentity_transform | ||||
| from youtube_dl.utils import ( | ||||
|   | ||||
| @@ -1,39 +1,38 @@ | ||||
| #!/usr/bin/env python | ||||
| # coding: utf-8 | ||||
|  | ||||
| import xml.etree.ElementTree | ||||
| # Allow direct execution | ||||
| import os | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| # Allow direct execution | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| from test.helper import get_params, global_setup, try_rm | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| import io | ||||
|  | ||||
| import xml.etree.ElementTree | ||||
|  | ||||
| import youtube_dl.YoutubeDL | ||||
| import youtube_dl.extractor | ||||
| from youtube_dl.utils import * | ||||
| from .helper import try_rm | ||||
| from youtube_dl.utils import True | ||||
|  | ||||
| PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") | ||||
|  | ||||
| # General configuration (from __init__, not very elegant...) | ||||
| jar = compat_cookiejar.CookieJar() | ||||
| cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar) | ||||
| proxy_handler = compat_urllib_request.ProxyHandler() | ||||
| opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler()) | ||||
| compat_urllib_request.install_opener(opener) | ||||
|  | ||||
| class YoutubeDL(youtube_dl.YoutubeDL): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         super(YoutubeDL, self).__init__(*args, **kwargs) | ||||
|         self.to_stderr = self.to_screen | ||||
|  | ||||
| with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: | ||||
|     params = json.load(pf) | ||||
| params['writeannotations'] = True | ||||
| params['skip_download'] = True | ||||
| params['writeinfojson'] = False | ||||
| params['format'] = 'flv' | ||||
| params = get_params({ | ||||
|     'writeannotations': True, | ||||
|     'skip_download': True, | ||||
|     'writeinfojson': False, | ||||
|     'format': 'flv', | ||||
| }) | ||||
|  | ||||
|  | ||||
|  | ||||
| TEST_ID = 'gr51aVj-mLg' | ||||
| ANNOTATIONS_FILE = TEST_ID + '.flv.annotations.xml' | ||||
|   | ||||
| @@ -1,37 +1,34 @@ | ||||
| #!/usr/bin/env python | ||||
| # coding: utf-8 | ||||
|  | ||||
| import json | ||||
| # Allow direct execution | ||||
| import os | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| # Allow direct execution | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| from test.helper import get_params, global_setup | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| import io | ||||
| import json | ||||
|  | ||||
| import youtube_dl.YoutubeDL | ||||
| import youtube_dl.extractor | ||||
| from youtube_dl.utils import * | ||||
|  | ||||
| PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") | ||||
|  | ||||
| # General configuration (from __init__, not very elegant...) | ||||
| jar = compat_cookiejar.CookieJar() | ||||
| cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar) | ||||
| proxy_handler = compat_urllib_request.ProxyHandler() | ||||
| opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler()) | ||||
| compat_urllib_request.install_opener(opener) | ||||
|  | ||||
| class YoutubeDL(youtube_dl.YoutubeDL): | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         super(YoutubeDL, self).__init__(*args, **kwargs) | ||||
|         self.to_stderr = self.to_screen | ||||
|  | ||||
| with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: | ||||
|     params = json.load(pf) | ||||
| params['writeinfojson'] = True | ||||
| params['skip_download'] = True | ||||
| params['writedescription'] = True | ||||
| params = get_params({ | ||||
|     'writeinfojson': True, | ||||
|     'skip_download': True, | ||||
|     'writedescription': True, | ||||
| }) | ||||
|  | ||||
|  | ||||
| TEST_ID = 'BaW_jenozKc' | ||||
| INFO_JSON_FILE = TEST_ID + '.mp4.info.json' | ||||
| @@ -42,6 +39,7 @@ This is a test video for youtube-dl. | ||||
|  | ||||
| For more information, contact phihag@phihag.de .''' | ||||
|  | ||||
|  | ||||
| class TestInfoJSON(unittest.TestCase): | ||||
|     def setUp(self): | ||||
|         # Clear old files | ||||
|   | ||||
| @@ -1,20 +1,26 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| import sys | ||||
| import unittest | ||||
| import json | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from youtube_dl.extractor import YoutubeUserIE, YoutubePlaylistIE, YoutubeIE, YoutubeChannelIE, YoutubeShowIE | ||||
| from youtube_dl.utils import * | ||||
| from test.helper import FakeYDL, global_setup | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| from youtube_dl.extractor import ( | ||||
|     YoutubeUserIE, | ||||
|     YoutubePlaylistIE, | ||||
|     YoutubeIE, | ||||
|     YoutubeChannelIE, | ||||
|     YoutubeShowIE, | ||||
| ) | ||||
|  | ||||
| from .helper import FakeYDL | ||||
|  | ||||
| class TestYoutubeLists(unittest.TestCase): | ||||
|     def assertIsPlaylist(self,info): | ||||
|     def assertIsPlaylist(self, info): | ||||
|         """Make sure the info has '_type' set to 'playlist'""" | ||||
|         self.assertEqual(info['_type'], 'playlist') | ||||
|  | ||||
|   | ||||
| @@ -1,14 +1,18 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from test.helper import global_setup | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| import io | ||||
| import re | ||||
| import string | ||||
| import sys | ||||
| import unittest | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from youtube_dl.extractor import YoutubeIE | ||||
| from youtube_dl.utils import compat_str, compat_urlretrieve | ||||
|   | ||||
| @@ -1,69 +1,79 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| import sys | ||||
| import unittest | ||||
| import hashlib | ||||
|  | ||||
| # Allow direct execution | ||||
| import os | ||||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
| import sys | ||||
| import unittest | ||||
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | ||||
|  | ||||
| from test.helper import FakeYDL, global_setup, md5 | ||||
| global_setup() | ||||
|  | ||||
|  | ||||
| from youtube_dl.extractor import YoutubeIE | ||||
| from youtube_dl.utils import * | ||||
| from .helper import FakeYDL | ||||
|  | ||||
| md5 = lambda s: hashlib.md5(s.encode('utf-8')).hexdigest() | ||||
|  | ||||
| class TestYoutubeSubtitles(unittest.TestCase): | ||||
|     def setUp(self): | ||||
|         self.DL = FakeYDL() | ||||
|         self.url = 'QRS8MkLhQmM' | ||||
|  | ||||
|     def getInfoDict(self): | ||||
|         IE = YoutubeIE(self.DL) | ||||
|         info_dict = IE.extract(self.url) | ||||
|         return info_dict | ||||
|  | ||||
|     def getSubtitles(self): | ||||
|         info_dict = self.getInfoDict() | ||||
|         return info_dict[0]['subtitles'] | ||||
|  | ||||
|     def test_youtube_no_writesubtitles(self): | ||||
|         self.DL.params['writesubtitles'] = False | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertEqual(subtitles, None) | ||||
|  | ||||
|     def test_youtube_subtitles(self): | ||||
|         self.DL.params['writesubtitles'] = True | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260') | ||||
|  | ||||
|     def test_youtube_subtitles_lang(self): | ||||
|         self.DL.params['writesubtitles'] = True | ||||
|         self.DL.params['subtitleslangs'] = ['it'] | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d') | ||||
|  | ||||
|     def test_youtube_allsubtitles(self): | ||||
|         self.DL.params['writesubtitles'] = True | ||||
|         self.DL.params['allsubtitles'] = True | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertEqual(len(subtitles.keys()), 13) | ||||
|  | ||||
|     def test_youtube_subtitles_sbv_format(self): | ||||
|         self.DL.params['writesubtitles'] = True | ||||
|         self.DL.params['subtitlesformat'] = 'sbv' | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b') | ||||
|  | ||||
|     def test_youtube_subtitles_vtt_format(self): | ||||
|         self.DL.params['writesubtitles'] = True | ||||
|         self.DL.params['subtitlesformat'] = 'vtt' | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertEqual(md5(subtitles['en']), '356cdc577fde0c6783b9b822e7206ff7') | ||||
|  | ||||
|     def test_youtube_list_subtitles(self): | ||||
|         self.DL.expect_warning(u'Video doesn\'t have automatic captions') | ||||
|         self.DL.params['listsubtitles'] = True | ||||
|         info_dict = self.getInfoDict() | ||||
|         self.assertEqual(info_dict, None) | ||||
|  | ||||
|     def test_youtube_automatic_captions(self): | ||||
|         self.url = '8YoUxe5ncPo' | ||||
|         self.DL.params['writeautomaticsub'] = True | ||||
|         self.DL.params['subtitleslangs'] = ['it'] | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertTrue(subtitles['it'] is not None) | ||||
|  | ||||
|     def test_youtube_nosubtitles(self): | ||||
|         self.DL.expect_warning(u'video doesn\'t have subtitles') | ||||
|         self.url = 'sAjKT8FhjI8' | ||||
| @@ -71,6 +81,7 @@ class TestYoutubeSubtitles(unittest.TestCase): | ||||
|         self.DL.params['allsubtitles'] = True | ||||
|         subtitles = self.getSubtitles() | ||||
|         self.assertEqual(len(subtitles), 0) | ||||
|  | ||||
|     def test_youtube_multiple_langs(self): | ||||
|         self.url = 'QRS8MkLhQmM' | ||||
|         self.DL.params['writesubtitles'] = True | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister