Merge remote-tracking branch 'gcmalloc/master' into fork_master
[youtube-dl] / test / test_download.py
index 92b552267ca42c13e38cd77736b37013e0636a60..be15fb5abefe43cfabba48c8e7fcb35272810b8d 100644 (file)
@@ -1,25 +1,22 @@
-#!/usr/bin/env python
-
-# DO NOT EDIT THIS FILE BY HAND!
-# It is auto-generated from tests.json and gentests.py.
-
+#!/usr/bin/env python2
 import hashlib
-import io
 import os
 import json
 import unittest
 import sys
 
-# Allow direct execution
-import os
-sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-
 from youtube_dl.FileDownloader import FileDownloader
-import youtube_dl.InfoExtractors
+#import all the info extractor
+import youtube_dl
+
+DEF_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'tests.json')
+PARAM_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'parameters.json'
+)
+
+
+class TestDownload(unittest.TestCase):
+    pass
 
-def _file_md5(fn):
-    with open(fn, 'rb') as f:
-        return hashlib.md5(f.read()).hexdigest()
 
 def md5_for_file(filename, block_size=2**20):
     with open(filename) as f:
@@ -29,141 +26,47 @@ def md5_for_file(filename, block_size=2**20):
             if not data:
                 break
             md5.update(data)
-            return md5.hexdigest()
-_file_md5 = md5_for_file
-
-class DownloadTest(unittest.TestCase):
-    PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json")
-
-    def setUp(self):
-        # Clear old files
-        self.tearDown()
-
-        with io.open(self.PARAMETERS_FILE, encoding='utf-8') as pf:
-            self.parameters = json.load(pf)
-
-    def test_Youtube(self):
-        YoutubeIE = youtube_dl.InfoExtractors.YoutubeIE
-        filename = 'BaW_jenozKc.mp4'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(YoutubeIE())
-        fd.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])
-        self.assertTrue(os.path.exists(filename))
-        self.assertEqual(os.path.getsize(filename), 1993883)
-
-    def test_Dailymotion(self):
-        DailymotionIE = youtube_dl.InfoExtractors.DailymotionIE
-        filename = 'x33vw9.mp4'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(DailymotionIE())
-        fd.download(['http://www.dailymotion.com/video/x33vw9_tutoriel-de-youtubeur-dl-des-video_tech'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, 'd363a50e9eb4f22ce90d08d15695bb47')
-
-    def test_Metacafe(self):
-        MetacafeIE = youtube_dl.InfoExtractors.MetacafeIE
-        filename = 'aUehQsCQtM.flv'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(MetacafeIE())
-        fd.add_info_extractor(youtube_dl.InfoExtractors.YoutubeIE())
-        fd.download(['http://www.metacafe.com/watch/yt-_aUehQsCQtM/the_electric_company_short_i_pbs_kids_go/'])
-        self.assertTrue(os.path.exists(filename))
-        self.assertEqual(os.path.getsize(filename), 5754305)
-
-    def test_BlipTV(self):
-        BlipTVIE = youtube_dl.InfoExtractors.BlipTVIE
-        filename = '5779306.m4v'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(BlipTVIE())
-        fd.download(['http://blip.tv/cbr/cbr-exclusive-gotham-city-imposters-bats-vs-jokerz-short-3-5796352'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, '93c24d2f4e0782af13b8a7606ea97ba7')
-
-    def test_XVideos(self):
-        XVideosIE = youtube_dl.InfoExtractors.XVideosIE
-        filename = '939581.flv'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(XVideosIE())
-        fd.download(['http://www.xvideos.com/video939581/funny_porns_by_s_-1'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, '1ab4dedc01f771cb2a65e91caa801aaf')
-
-    @unittest.skip("No output file specified")
-    def test_Vimeo(self):
-        VimeoIE = youtube_dl.InfoExtractors.VimeoIE
-        filename = ''
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(VimeoIE())
-        fd.download(['http://vimeo.com/14160053'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, '1ab4dedc01f771cb2a65e91caa801aaf')
-
-    def test_Soundcloud(self):
-        SoundcloudIE = youtube_dl.InfoExtractors.SoundcloudIE
-        filename = 'n6FLbx6ZzMiu.mp3'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(SoundcloudIE())
-        fd.download(['http://soundcloud.com/ethmusic/lostin-powers-she-so-heavy'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, 'ce3775768ebb6432fa8495d446a078ed')
-
-    def test_StanfordOpenClassroom(self):
-        StanfordOpenClassroomIE = youtube_dl.InfoExtractors.StanfordOpenClassroomIE
-        filename = 'PracticalUnix_intro-environment.mp4'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(StanfordOpenClassroomIE())
-        fd.download(['http://openclassroom.stanford.edu/MainFolder/VideoPage.php?course=PracticalUnix&video=intro-environment&speed=100'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, '22c8206291368c4e2c9c1a307f0ea0f4')
-
-    @unittest.skip("IE marked as not _WORKING")
-    def test_CollegeHumor(self):
-        CollegeHumorIE = youtube_dl.InfoExtractors.CollegeHumorIE
-        filename = ''
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(CollegeHumorIE())
-        fd.download(['http://www.collegehumor.com/video/6830834/mitt-romney-style-gangnam-style-parody'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, '')
-
-    def test_XNXX(self):
-        XNXXIE = youtube_dl.InfoExtractors.XNXXIE
-        filename = '1135332.flv'
-        fd = FileDownloader(self.parameters)
-        fd.add_info_extractor(XNXXIE())
-        fd.download(['http://video.xnxx.com/video1135332/lida_naked_funny_actress_5_'])
-        self.assertTrue(os.path.exists(filename))
-        md5_for_file = _file_md5(filename)
-        self.assertEqual(md5_for_file, '5f0469c8d1dfd1bc38c8e6deb5e0a21d')
-
-
-    def tearDown(self):
-        if os.path.exists('BaW_jenozKc.mp4'):
-            os.remove('BaW_jenozKc.mp4')
-        if os.path.exists('x33vw9.mp4'):
-            os.remove('x33vw9.mp4')
-        if os.path.exists('aUehQsCQtM.flv'):
-            os.remove('aUehQsCQtM.flv')
-        if os.path.exists('5779306.m4v'):
-            os.remove('5779306.m4v')
-        if os.path.exists('939581.flv'):
-            os.remove('939581.flv')
-        # No file specified for Vimeo
-        if os.path.exists('n6FLbx6ZzMiu.mp3'):
-            os.remove('n6FLbx6ZzMiu.mp3')
-        if os.path.exists('PracticalUnix_intro-environment.mp4'):
-            os.remove('PracticalUnix_intro-environment.mp4')
-        # No file specified for CollegeHumor
-        if os.path.exists('1135332.flv'):
-            os.remove('1135332.flv')
-
+        return md5.hexdigest()
+
+
+def generator(name, url, md5, file, ie_param, optional_ie):
+    def test_template(self):
+        fd = FileDownloader(ie_param)
+        fd.add_info_extractor(getattr(youtube_dl, name + "IE")())
+        fd.download([url])
+        self.assertTrue(os.path.exists(file))
+        self.assertEqual(md5_for_file(file), md5)
+    return test_template
+    #only python 2.7
+
+def clean_generator(files):
+    def clean_template(self):
+        for file_name in files:
+            if os.path.exists(file_name):
+                os.remove(file_name)
+    return clean_template
+
+with open(DEF_FILE, "r") as f:
+    with open(PARAM_FILE) as fp:
+        p = json.load(fp)
+        test_param = json.load(f)
+        files = set()
+        for test_case in test_param:
+            if test_case.get("broken", False):
+                continue
+            try:
+                files.add(test_case["file"])
+                test_method = generator(test_case['name'], test_case['url'], test_case['md5'], test_case['file'], p, test_case.get('add_ie', []))
+                test_method.__name__ = "test_{0}".format(test_case["name"])
+                setattr(TestDownload, test_method.__name__, test_method)
+                del test_method
+            except KeyError as e:
+                sys.stderr.write("Issue with the parameters of test {0}.\n".format(test_case.get("name", "unknown test")))
+        #clean the files
+        ff = clean_generator(files)
+        ff.__name__ = "tearDown"
+        setattr(TestDownload, ff.__name__, ff)
+        del ff
 
 
 if __name__ == '__main__':