[test/subtitles] Remove some tests
[youtube-dl] / test / test_subtitles.py
1 #!/usr/bin/env python
2 from __future__ import unicode_literals
3
4 # Allow direct execution
5 import os
6 import sys
7 import unittest
8 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
9
10 from test.helper import FakeYDL, md5
11
12
13 from youtube_dl.extractor import (
14     BlipTVIE,
15     YoutubeIE,
16     DailymotionIE,
17     TEDIE,
18     VimeoIE,
19     WallaIE,
20     CeskaTelevizeIE,
21     LyndaIE,
22     NPOIE,
23     ComedyCentralIE,
24     NRKTVIE,
25     RaiIE,
26     VikiIE,
27     ThePlatformIE,
28 )
29
30
31 class BaseTestSubtitles(unittest.TestCase):
32     url = None
33     IE = None
34
35     def setUp(self):
36         self.DL = FakeYDL()
37         self.ie = self.IE()
38         self.DL.add_info_extractor(self.ie)
39
40     def getInfoDict(self):
41         info_dict = self.DL.extract_info(self.url, download=False)
42         return info_dict
43
44     def getSubtitles(self):
45         info_dict = self.getInfoDict()
46         subtitles = info_dict['requested_subtitles']
47         if not subtitles:
48             return subtitles
49         for sub_info in subtitles.values():
50             if sub_info.get('data') is None:
51                 uf = self.DL.urlopen(sub_info['url'])
52                 sub_info['data'] = uf.read().decode('utf-8')
53         return dict((l, sub_info['data']) for l, sub_info in subtitles.items())
54
55
56 class TestYoutubeSubtitles(BaseTestSubtitles):
57     url = 'QRS8MkLhQmM'
58     IE = YoutubeIE
59
60     def test_youtube_allsubtitles(self):
61         self.DL.params['writesubtitles'] = True
62         self.DL.params['allsubtitles'] = True
63         subtitles = self.getSubtitles()
64         self.assertEqual(len(subtitles.keys()), 13)
65         self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
66         self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
67         for lang in ['it', 'fr', 'de']:
68             self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
69
70     def test_youtube_subtitles_sbv_format(self):
71         self.DL.params['writesubtitles'] = True
72         self.DL.params['subtitlesformat'] = 'sbv'
73         subtitles = self.getSubtitles()
74         self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
75
76     def test_youtube_subtitles_vtt_format(self):
77         self.DL.params['writesubtitles'] = True
78         self.DL.params['subtitlesformat'] = 'vtt'
79         subtitles = self.getSubtitles()
80         self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
81
82     def test_youtube_automatic_captions(self):
83         self.url = '8YoUxe5ncPo'
84         self.DL.params['writeautomaticsub'] = True
85         self.DL.params['subtitleslangs'] = ['it']
86         subtitles = self.getSubtitles()
87         self.assertTrue(subtitles['it'] is not None)
88
89     def test_youtube_translated_subtitles(self):
90         # This video has a subtitles track, which can be translated
91         self.url = 'Ky9eprVWzlI'
92         self.DL.params['writeautomaticsub'] = True
93         self.DL.params['subtitleslangs'] = ['it']
94         subtitles = self.getSubtitles()
95         self.assertTrue(subtitles['it'] is not None)
96
97     def test_youtube_nosubtitles(self):
98         self.DL.expect_warning('video doesn\'t have subtitles')
99         self.url = 'n5BB19UTcdA'
100         self.DL.params['writesubtitles'] = True
101         self.DL.params['allsubtitles'] = True
102         subtitles = self.getSubtitles()
103         self.assertFalse(subtitles)
104
105
106 class TestDailymotionSubtitles(BaseTestSubtitles):
107     url = 'http://www.dailymotion.com/video/xczg00'
108     IE = DailymotionIE
109
110     def test_allsubtitles(self):
111         self.DL.params['writesubtitles'] = True
112         self.DL.params['allsubtitles'] = True
113         subtitles = self.getSubtitles()
114         self.assertTrue(len(subtitles.keys()) >= 6)
115         self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f')
116         self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792')
117         for lang in ['es', 'fr', 'de']:
118             self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
119
120     def test_nosubtitles(self):
121         self.DL.expect_warning('video doesn\'t have subtitles')
122         self.url = 'http://www.dailymotion.com/video/x12u166_le-zapping-tele-star-du-08-aout-2013_tv'
123         self.DL.params['writesubtitles'] = True
124         self.DL.params['allsubtitles'] = True
125         subtitles = self.getSubtitles()
126         self.assertFalse(subtitles)
127
128
129 class TestTedSubtitles(BaseTestSubtitles):
130     url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'
131     IE = TEDIE
132
133     def test_allsubtitles(self):
134         self.DL.params['writesubtitles'] = True
135         self.DL.params['allsubtitles'] = True
136         subtitles = self.getSubtitles()
137         self.assertTrue(len(subtitles.keys()) >= 28)
138         self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14')
139         self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5')
140         for lang in ['es', 'fr', 'de']:
141             self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
142
143
144 class TestBlipTVSubtitles(BaseTestSubtitles):
145     url = 'http://blip.tv/a/a-6603250'
146     IE = BlipTVIE
147
148     def test_allsubtitles(self):
149         self.DL.params['writesubtitles'] = True
150         self.DL.params['allsubtitles'] = True
151         subtitles = self.getSubtitles()
152         self.assertEqual(set(subtitles.keys()), set(['en']))
153         self.assertEqual(md5(subtitles['en']), '5b75c300af65fe4476dff79478bb93e4')
154
155
156 class TestVimeoSubtitles(BaseTestSubtitles):
157     url = 'http://vimeo.com/76979871'
158     IE = VimeoIE
159
160     def test_allsubtitles(self):
161         self.DL.params['writesubtitles'] = True
162         self.DL.params['allsubtitles'] = True
163         subtitles = self.getSubtitles()
164         self.assertEqual(set(subtitles.keys()), set(['de', 'en', 'es', 'fr']))
165         self.assertEqual(md5(subtitles['en']), '8062383cf4dec168fc40a088aa6d5888')
166         self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8')
167
168     def test_nosubtitles(self):
169         self.DL.expect_warning('video doesn\'t have subtitles')
170         self.url = 'http://vimeo.com/56015672'
171         self.DL.params['writesubtitles'] = True
172         self.DL.params['allsubtitles'] = True
173         subtitles = self.getSubtitles()
174         self.assertFalse(subtitles)
175
176
177 class TestWallaSubtitles(BaseTestSubtitles):
178     url = 'http://vod.walla.co.il/movie/2705958/the-yes-men'
179     IE = WallaIE
180
181     def test_allsubtitles(self):
182         self.DL.expect_warning('Automatic Captions not supported by this server')
183         self.DL.params['writesubtitles'] = True
184         self.DL.params['allsubtitles'] = True
185         subtitles = self.getSubtitles()
186         self.assertEqual(set(subtitles.keys()), set(['heb']))
187         self.assertEqual(md5(subtitles['heb']), 'e758c5d7cb982f6bef14f377ec7a3920')
188
189     def test_nosubtitles(self):
190         self.DL.expect_warning('video doesn\'t have subtitles')
191         self.url = 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one'
192         self.DL.params['writesubtitles'] = True
193         self.DL.params['allsubtitles'] = True
194         subtitles = self.getSubtitles()
195         self.assertFalse(subtitles)
196
197
198 class TestCeskaTelevizeSubtitles(BaseTestSubtitles):
199     url = 'http://www.ceskatelevize.cz/ivysilani/10600540290-u6-uzasny-svet-techniky'
200     IE = CeskaTelevizeIE
201
202     def test_allsubtitles(self):
203         self.DL.expect_warning('Automatic Captions not supported by this server')
204         self.DL.params['writesubtitles'] = True
205         self.DL.params['allsubtitles'] = True
206         subtitles = self.getSubtitles()
207         self.assertEqual(set(subtitles.keys()), set(['cs']))
208         self.assertTrue(len(subtitles['cs']) > 20000)
209
210     def test_nosubtitles(self):
211         self.DL.expect_warning('video doesn\'t have subtitles')
212         self.url = 'http://www.ceskatelevize.cz/ivysilani/ivysilani/10441294653-hyde-park-civilizace/214411058091220'
213         self.DL.params['writesubtitles'] = True
214         self.DL.params['allsubtitles'] = True
215         subtitles = self.getSubtitles()
216         self.assertFalse(subtitles)
217
218
219 class TestLyndaSubtitles(BaseTestSubtitles):
220     url = 'http://www.lynda.com/Bootstrap-tutorials/Using-exercise-files/110885/114408-4.html'
221     IE = LyndaIE
222
223     def test_allsubtitles(self):
224         self.DL.params['writesubtitles'] = True
225         self.DL.params['allsubtitles'] = True
226         subtitles = self.getSubtitles()
227         self.assertEqual(set(subtitles.keys()), set(['en']))
228         self.assertEqual(md5(subtitles['en']), '09bbe67222259bed60deaa26997d73a7')
229
230
231 class TestNPOSubtitles(BaseTestSubtitles):
232     url = 'http://www.npo.nl/nos-journaal/28-08-2014/POW_00722860'
233     IE = NPOIE
234
235     def test_allsubtitles(self):
236         self.DL.params['writesubtitles'] = True
237         self.DL.params['allsubtitles'] = True
238         subtitles = self.getSubtitles()
239         self.assertEqual(set(subtitles.keys()), set(['nl']))
240         self.assertEqual(md5(subtitles['nl']), 'fc6435027572b63fb4ab143abd5ad3f4')
241
242
243 class TestMTVSubtitles(BaseTestSubtitles):
244     url = 'http://www.cc.com/video-clips/kllhuv/stand-up-greg-fitzsimmons--uncensored---too-good-of-a-mother'
245     IE = ComedyCentralIE
246
247     def getInfoDict(self):
248         return super(TestMTVSubtitles, self).getInfoDict()['entries'][0]
249
250     def test_allsubtitles(self):
251         self.DL.params['writesubtitles'] = True
252         self.DL.params['allsubtitles'] = True
253         subtitles = self.getSubtitles()
254         self.assertEqual(set(subtitles.keys()), set(['en']))
255         self.assertEqual(md5(subtitles['en']), 'b9f6ca22a6acf597ec76f61749765e65')
256
257
258 class TestNRKSubtitles(BaseTestSubtitles):
259     url = 'http://tv.nrk.no/serie/ikke-gjoer-dette-hjemme/DMPV73000411/sesong-2/episode-1'
260     IE = NRKTVIE
261
262     def test_allsubtitles(self):
263         self.DL.params['writesubtitles'] = True
264         self.DL.params['allsubtitles'] = True
265         subtitles = self.getSubtitles()
266         self.assertEqual(set(subtitles.keys()), set(['no']))
267         self.assertEqual(md5(subtitles['no']), '1d221e6458c95c5494dcd38e6a1f129a')
268
269
270 class TestRaiSubtitles(BaseTestSubtitles):
271     url = 'http://www.rai.tv/dl/RaiTV/programmi/media/ContentItem-cb27157f-9dd0-4aee-b788-b1f67643a391.html'
272     IE = RaiIE
273
274     def test_allsubtitles(self):
275         self.DL.params['writesubtitles'] = True
276         self.DL.params['allsubtitles'] = True
277         subtitles = self.getSubtitles()
278         self.assertEqual(set(subtitles.keys()), set(['it']))
279         self.assertEqual(md5(subtitles['it']), 'b1d90a98755126b61e667567a1f6680a')
280
281
282 class TestVikiSubtitles(BaseTestSubtitles):
283     url = 'http://www.viki.com/videos/1060846v-punch-episode-18'
284     IE = VikiIE
285
286     def test_allsubtitles(self):
287         self.DL.params['writesubtitles'] = True
288         self.DL.params['allsubtitles'] = True
289         subtitles = self.getSubtitles()
290         self.assertEqual(set(subtitles.keys()), set(['en']))
291         self.assertEqual(md5(subtitles['en']), 'b0b781eeb45efd3f6398a925b259150b')
292
293
294 class TestThePlatformSubtitles(BaseTestSubtitles):
295     # from http://www.3playmedia.com/services-features/tools/integrations/theplatform/
296     # (see http://theplatform.com/about/partners/type/subtitles-closed-captioning/)
297     url = 'theplatform:JFUjUE1_ehvq'
298     IE = ThePlatformIE
299
300     def test_allsubtitles(self):
301         self.DL.params['writesubtitles'] = True
302         self.DL.params['allsubtitles'] = True
303         subtitles = self.getSubtitles()
304         self.assertEqual(set(subtitles.keys()), set(['en']))
305         self.assertEqual(md5(subtitles['en']), '97e7670cbae3c4d26ae8bcc7fdd78d4b')
306
307
308 if __name__ == '__main__':
309     unittest.main()