diff options
Diffstat (limited to 'test/test_subtitles.py')
| -rw-r--r-- | test/test_subtitles.py | 290 | 
1 files changed, 125 insertions, 165 deletions
| diff --git a/test/test_subtitles.py b/test/test_subtitles.py index bcc69a778..7f93f0a75 100644 --- a/test/test_subtitles.py +++ b/test/test_subtitles.py @@ -18,6 +18,13 @@ from youtube_dl.extractor import (      VimeoIE,      WallaIE,      CeskaTelevizeIE, +    LyndaIE, +    NPOIE, +    ComedyCentralIE, +    NRKTVIE, +    RaiIE, +    VikiIE, +    ThePlatformIE,  ) @@ -27,42 +34,38 @@ class BaseTestSubtitles(unittest.TestCase):      def setUp(self):          self.DL = FakeYDL() -        self.ie = self.IE(self.DL) +        self.ie = self.IE() +        self.DL.add_info_extractor(self.ie)      def getInfoDict(self): -        info_dict = self.ie.extract(self.url) +        info_dict = self.DL.extract_info(self.url, download=False)          return info_dict      def getSubtitles(self):          info_dict = self.getInfoDict() -        return info_dict['subtitles'] +        subtitles = info_dict['requested_subtitles'] +        if not subtitles: +            return subtitles +        for sub_info in subtitles.values(): +            if sub_info.get('data') is None: +                uf = self.DL.urlopen(sub_info['url']) +                sub_info['data'] = uf.read().decode('utf-8') +        return dict((l, sub_info['data']) for l, sub_info in subtitles.items())  class TestYoutubeSubtitles(BaseTestSubtitles):      url = 'QRS8MkLhQmM'      IE = YoutubeIE -    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) +        self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260') +        self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d') +        for lang in ['it', 'fr', 'de']: +            self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)      def test_youtube_subtitles_sbv_format(self):          self.DL.params['writesubtitles'] = True @@ -76,12 +79,6 @@ class TestYoutubeSubtitles(BaseTestSubtitles):          subtitles = self.getSubtitles()          self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06') -    def test_youtube_list_subtitles(self): -        self.DL.expect_warning('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 @@ -103,55 +100,22 @@ class TestYoutubeSubtitles(BaseTestSubtitles):          self.DL.params['writesubtitles'] = True          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 -        langs = ['it', 'fr', 'de'] -        self.DL.params['subtitleslangs'] = langs -        subtitles = self.getSubtitles() -        for lang in langs: -            self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang) +        self.assertFalse(subtitles)  class TestDailymotionSubtitles(BaseTestSubtitles):      url = 'http://www.dailymotion.com/video/xczg00'      IE = DailymotionIE -    def test_no_writesubtitles(self): -        subtitles = self.getSubtitles() -        self.assertEqual(subtitles, None) - -    def test_subtitles(self): -        self.DL.params['writesubtitles'] = True -        subtitles = self.getSubtitles() -        self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f') - -    def test_subtitles_lang(self): -        self.DL.params['writesubtitles'] = True -        self.DL.params['subtitleslangs'] = ['fr'] -        subtitles = self.getSubtitles() -        self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792') -      def test_allsubtitles(self):          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles()          self.assertTrue(len(subtitles.keys()) >= 6) - -    def test_list_subtitles(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['listsubtitles'] = True -        info_dict = self.getInfoDict() -        self.assertEqual(info_dict, None) - -    def test_automatic_captions(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['writeautomaticsub'] = True -        self.DL.params['subtitleslang'] = ['en'] -        subtitles = self.getSubtitles() -        self.assertTrue(len(subtitles.keys()) == 0) +        self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f') +        self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792') +        for lang in ['es', 'fr', 'de']: +            self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)      def test_nosubtitles(self):          self.DL.expect_warning('video doesn\'t have subtitles') @@ -159,61 +123,21 @@ class TestDailymotionSubtitles(BaseTestSubtitles):          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles() -        self.assertEqual(len(subtitles), 0) - -    def test_multiple_langs(self): -        self.DL.params['writesubtitles'] = True -        langs = ['es', 'fr', 'de'] -        self.DL.params['subtitleslangs'] = langs -        subtitles = self.getSubtitles() -        for lang in langs: -            self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang) +        self.assertFalse(subtitles)  class TestTedSubtitles(BaseTestSubtitles):      url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'      IE = TEDIE -    def test_no_writesubtitles(self): -        subtitles = self.getSubtitles() -        self.assertEqual(subtitles, None) - -    def test_subtitles(self): -        self.DL.params['writesubtitles'] = True -        subtitles = self.getSubtitles() -        self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14') - -    def test_subtitles_lang(self): -        self.DL.params['writesubtitles'] = True -        self.DL.params['subtitleslangs'] = ['fr'] -        subtitles = self.getSubtitles() -        self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5') -      def test_allsubtitles(self):          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles()          self.assertTrue(len(subtitles.keys()) >= 28) - -    def test_list_subtitles(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['listsubtitles'] = True -        info_dict = self.getInfoDict() -        self.assertEqual(info_dict, None) - -    def test_automatic_captions(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['writeautomaticsub'] = True -        self.DL.params['subtitleslang'] = ['en'] -        subtitles = self.getSubtitles() -        self.assertTrue(len(subtitles.keys()) == 0) - -    def test_multiple_langs(self): -        self.DL.params['writesubtitles'] = True -        langs = ['es', 'fr', 'de'] -        self.DL.params['subtitleslangs'] = langs -        subtitles = self.getSubtitles() -        for lang in langs: +        self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14') +        self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5') +        for lang in ['es', 'fr', 'de']:              self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang) @@ -221,14 +145,7 @@ class TestBlipTVSubtitles(BaseTestSubtitles):      url = 'http://blip.tv/a/a-6603250'      IE = BlipTVIE -    def test_list_subtitles(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['listsubtitles'] = True -        info_dict = self.getInfoDict() -        self.assertEqual(info_dict, None) -      def test_allsubtitles(self): -        self.DL.expect_warning('Automatic Captions not supported by this server')          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles() @@ -240,39 +157,13 @@ class TestVimeoSubtitles(BaseTestSubtitles):      url = 'http://vimeo.com/76979871'      IE = VimeoIE -    def test_no_writesubtitles(self): -        subtitles = self.getSubtitles() -        self.assertEqual(subtitles, None) - -    def test_subtitles(self): -        self.DL.params['writesubtitles'] = True -        subtitles = self.getSubtitles() -        self.assertEqual(md5(subtitles['en']), '8062383cf4dec168fc40a088aa6d5888') - -    def test_subtitles_lang(self): -        self.DL.params['writesubtitles'] = True -        self.DL.params['subtitleslangs'] = ['fr'] -        subtitles = self.getSubtitles() -        self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8') -      def test_allsubtitles(self):          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles()          self.assertEqual(set(subtitles.keys()), set(['de', 'en', 'es', 'fr'])) - -    def test_list_subtitles(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['listsubtitles'] = True -        info_dict = self.getInfoDict() -        self.assertEqual(info_dict, None) - -    def test_automatic_captions(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['writeautomaticsub'] = True -        self.DL.params['subtitleslang'] = ['en'] -        subtitles = self.getSubtitles() -        self.assertTrue(len(subtitles.keys()) == 0) +        self.assertEqual(md5(subtitles['en']), '8062383cf4dec168fc40a088aa6d5888') +        self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8')      def test_nosubtitles(self):          self.DL.expect_warning('video doesn\'t have subtitles') @@ -280,27 +171,13 @@ class TestVimeoSubtitles(BaseTestSubtitles):          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles() -        self.assertEqual(len(subtitles), 0) - -    def test_multiple_langs(self): -        self.DL.params['writesubtitles'] = True -        langs = ['es', 'fr', 'de'] -        self.DL.params['subtitleslangs'] = langs -        subtitles = self.getSubtitles() -        for lang in langs: -            self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang) +        self.assertFalse(subtitles)  class TestWallaSubtitles(BaseTestSubtitles):      url = 'http://vod.walla.co.il/movie/2705958/the-yes-men'      IE = WallaIE -    def test_list_subtitles(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['listsubtitles'] = True -        info_dict = self.getInfoDict() -        self.assertEqual(info_dict, None) -      def test_allsubtitles(self):          self.DL.expect_warning('Automatic Captions not supported by this server')          self.DL.params['writesubtitles'] = True @@ -315,19 +192,13 @@ class TestWallaSubtitles(BaseTestSubtitles):          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles() -        self.assertEqual(len(subtitles), 0) +        self.assertFalse(subtitles)  class TestCeskaTelevizeSubtitles(BaseTestSubtitles):      url = 'http://www.ceskatelevize.cz/ivysilani/10600540290-u6-uzasny-svet-techniky'      IE = CeskaTelevizeIE -    def test_list_subtitles(self): -        self.DL.expect_warning('Automatic Captions not supported by this server') -        self.DL.params['listsubtitles'] = True -        info_dict = self.getInfoDict() -        self.assertEqual(info_dict, None) -      def test_allsubtitles(self):          self.DL.expect_warning('Automatic Captions not supported by this server')          self.DL.params['writesubtitles'] = True @@ -342,7 +213,96 @@ class TestCeskaTelevizeSubtitles(BaseTestSubtitles):          self.DL.params['writesubtitles'] = True          self.DL.params['allsubtitles'] = True          subtitles = self.getSubtitles() -        self.assertEqual(len(subtitles), 0) +        self.assertFalse(subtitles) + + +class TestLyndaSubtitles(BaseTestSubtitles): +    url = 'http://www.lynda.com/Bootstrap-tutorials/Using-exercise-files/110885/114408-4.html' +    IE = LyndaIE + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['en'])) +        self.assertEqual(md5(subtitles['en']), '09bbe67222259bed60deaa26997d73a7') + + +class TestNPOSubtitles(BaseTestSubtitles): +    url = 'http://www.npo.nl/nos-journaal/28-08-2014/POW_00722860' +    IE = NPOIE + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['nl'])) +        self.assertEqual(md5(subtitles['nl']), 'fc6435027572b63fb4ab143abd5ad3f4') + + +class TestMTVSubtitles(BaseTestSubtitles): +    url = 'http://www.cc.com/video-clips/kllhuv/stand-up-greg-fitzsimmons--uncensored---too-good-of-a-mother' +    IE = ComedyCentralIE + +    def getInfoDict(self): +        return super(TestMTVSubtitles, self).getInfoDict()['entries'][0] + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['en'])) +        self.assertEqual(md5(subtitles['en']), 'b9f6ca22a6acf597ec76f61749765e65') + + +class TestNRKSubtitles(BaseTestSubtitles): +    url = 'http://tv.nrk.no/serie/ikke-gjoer-dette-hjemme/DMPV73000411/sesong-2/episode-1' +    IE = NRKTVIE + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['no'])) +        self.assertEqual(md5(subtitles['no']), '1d221e6458c95c5494dcd38e6a1f129a') + + +class TestRaiSubtitles(BaseTestSubtitles): +    url = 'http://www.rai.tv/dl/RaiTV/programmi/media/ContentItem-cb27157f-9dd0-4aee-b788-b1f67643a391.html' +    IE = RaiIE + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['it'])) +        self.assertEqual(md5(subtitles['it']), 'b1d90a98755126b61e667567a1f6680a') + + +class TestVikiSubtitles(BaseTestSubtitles): +    url = 'http://www.viki.com/videos/1060846v-punch-episode-18' +    IE = VikiIE + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['en'])) +        self.assertEqual(md5(subtitles['en']), '53cb083a5914b2d84ef1ab67b880d18a') + + +class TestThePlatformSubtitles(BaseTestSubtitles): +    # from http://www.3playmedia.com/services-features/tools/integrations/theplatform/ +    # (see http://theplatform.com/about/partners/type/subtitles-closed-captioning/) +    url = 'theplatform:JFUjUE1_ehvq' +    IE = ThePlatformIE + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['en'])) +        self.assertEqual(md5(subtitles['en']), '97e7670cbae3c4d26ae8bcc7fdd78d4b')  if __name__ == '__main__': | 
