2 from __future__ import unicode_literals
4 # Allow direct execution
8 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
10 from test.helper import FakeYDL, md5
13 from youtube_dl.extractor import (
23 class BaseTestSubtitles(unittest.TestCase):
29 self.ie = self.IE(self.DL)
31 def getInfoDict(self):
32 info_dict = self.ie.extract(self.url)
35 def getSubtitles(self):
36 info_dict = self.getInfoDict()
37 return info_dict['subtitles']
40 class TestYoutubeSubtitles(BaseTestSubtitles):
44 def test_youtube_no_writesubtitles(self):
45 self.DL.params['writesubtitles'] = False
46 subtitles = self.getSubtitles()
47 self.assertEqual(subtitles, None)
49 def test_youtube_subtitles(self):
50 self.DL.params['writesubtitles'] = True
51 subtitles = self.getSubtitles()
52 self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
54 def test_youtube_subtitles_lang(self):
55 self.DL.params['writesubtitles'] = True
56 self.DL.params['subtitleslangs'] = ['it']
57 subtitles = self.getSubtitles()
58 self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
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)
66 def test_youtube_subtitles_sbv_format(self):
67 self.DL.params['writesubtitles'] = True
68 self.DL.params['subtitlesformat'] = 'sbv'
69 subtitles = self.getSubtitles()
70 self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
72 def test_youtube_subtitles_vtt_format(self):
73 self.DL.params['writesubtitles'] = True
74 self.DL.params['subtitlesformat'] = 'vtt'
75 subtitles = self.getSubtitles()
76 self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
78 def test_youtube_list_subtitles(self):
79 self.DL.expect_warning('Video doesn\'t have automatic captions')
80 self.DL.params['listsubtitles'] = True
81 info_dict = self.getInfoDict()
82 self.assertEqual(info_dict, None)
84 def test_youtube_automatic_captions(self):
85 self.url = '8YoUxe5ncPo'
86 self.DL.params['writeautomaticsub'] = True
87 self.DL.params['subtitleslangs'] = ['it']
88 subtitles = self.getSubtitles()
89 self.assertTrue(subtitles['it'] is not None)
91 def test_youtube_translated_subtitles(self):
92 # This video has a subtitles track, which can be translated
93 self.url = 'Ky9eprVWzlI'
94 self.DL.params['writeautomaticsub'] = True
95 self.DL.params['subtitleslangs'] = ['it']
96 subtitles = self.getSubtitles()
97 self.assertTrue(subtitles['it'] is not None)
99 def test_youtube_nosubtitles(self):
100 self.DL.expect_warning('video doesn\'t have subtitles')
101 self.url = 'n5BB19UTcdA'
102 self.DL.params['writesubtitles'] = True
103 self.DL.params['allsubtitles'] = True
104 subtitles = self.getSubtitles()
105 self.assertEqual(len(subtitles), 0)
107 def test_youtube_multiple_langs(self):
108 self.url = 'QRS8MkLhQmM'
109 self.DL.params['writesubtitles'] = True
110 langs = ['it', 'fr', 'de']
111 self.DL.params['subtitleslangs'] = langs
112 subtitles = self.getSubtitles()
114 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
117 class TestDailymotionSubtitles(BaseTestSubtitles):
118 url = 'http://www.dailymotion.com/video/xczg00'
121 def test_no_writesubtitles(self):
122 subtitles = self.getSubtitles()
123 self.assertEqual(subtitles, None)
125 def test_subtitles(self):
126 self.DL.params['writesubtitles'] = True
127 subtitles = self.getSubtitles()
128 self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f')
130 def test_subtitles_lang(self):
131 self.DL.params['writesubtitles'] = True
132 self.DL.params['subtitleslangs'] = ['fr']
133 subtitles = self.getSubtitles()
134 self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792')
136 def test_allsubtitles(self):
137 self.DL.params['writesubtitles'] = True
138 self.DL.params['allsubtitles'] = True
139 subtitles = self.getSubtitles()
140 self.assertEqual(len(subtitles.keys()), 5)
142 def test_list_subtitles(self):
143 self.DL.expect_warning('Automatic Captions not supported by this server')
144 self.DL.params['listsubtitles'] = True
145 info_dict = self.getInfoDict()
146 self.assertEqual(info_dict, None)
148 def test_automatic_captions(self):
149 self.DL.expect_warning('Automatic Captions not supported by this server')
150 self.DL.params['writeautomaticsub'] = True
151 self.DL.params['subtitleslang'] = ['en']
152 subtitles = self.getSubtitles()
153 self.assertTrue(len(subtitles.keys()) == 0)
155 def test_nosubtitles(self):
156 self.DL.expect_warning('video doesn\'t have subtitles')
157 self.url = 'http://www.dailymotion.com/video/x12u166_le-zapping-tele-star-du-08-aout-2013_tv'
158 self.DL.params['writesubtitles'] = True
159 self.DL.params['allsubtitles'] = True
160 subtitles = self.getSubtitles()
161 self.assertEqual(len(subtitles), 0)
163 def test_multiple_langs(self):
164 self.DL.params['writesubtitles'] = True
165 langs = ['es', 'fr', 'de']
166 self.DL.params['subtitleslangs'] = langs
167 subtitles = self.getSubtitles()
169 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
172 class TestTedSubtitles(BaseTestSubtitles):
173 url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'
176 def test_no_writesubtitles(self):
177 subtitles = self.getSubtitles()
178 self.assertEqual(subtitles, None)
180 def test_subtitles(self):
181 self.DL.params['writesubtitles'] = True
182 subtitles = self.getSubtitles()
183 self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14')
185 def test_subtitles_lang(self):
186 self.DL.params['writesubtitles'] = True
187 self.DL.params['subtitleslangs'] = ['fr']
188 subtitles = self.getSubtitles()
189 self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5')
191 def test_allsubtitles(self):
192 self.DL.params['writesubtitles'] = True
193 self.DL.params['allsubtitles'] = True
194 subtitles = self.getSubtitles()
195 self.assertTrue(len(subtitles.keys()) >= 28)
197 def test_list_subtitles(self):
198 self.DL.expect_warning('Automatic Captions not supported by this server')
199 self.DL.params['listsubtitles'] = True
200 info_dict = self.getInfoDict()
201 self.assertEqual(info_dict, None)
203 def test_automatic_captions(self):
204 self.DL.expect_warning('Automatic Captions not supported by this server')
205 self.DL.params['writeautomaticsub'] = True
206 self.DL.params['subtitleslang'] = ['en']
207 subtitles = self.getSubtitles()
208 self.assertTrue(len(subtitles.keys()) == 0)
210 def test_multiple_langs(self):
211 self.DL.params['writesubtitles'] = True
212 langs = ['es', 'fr', 'de']
213 self.DL.params['subtitleslangs'] = langs
214 subtitles = self.getSubtitles()
216 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
219 class TestBlipTVSubtitles(BaseTestSubtitles):
220 url = 'http://blip.tv/a/a-6603250'
223 def test_list_subtitles(self):
224 self.DL.expect_warning('Automatic Captions not supported by this server')
225 self.DL.params['listsubtitles'] = True
226 info_dict = self.getInfoDict()
227 self.assertEqual(info_dict, None)
229 def test_allsubtitles(self):
230 self.DL.expect_warning('Automatic Captions not supported by this server')
231 self.DL.params['writesubtitles'] = True
232 self.DL.params['allsubtitles'] = True
233 subtitles = self.getSubtitles()
234 self.assertEqual(set(subtitles.keys()), set(['en']))
235 self.assertEqual(md5(subtitles['en']), '5b75c300af65fe4476dff79478bb93e4')
238 class TestVimeoSubtitles(BaseTestSubtitles):
239 url = 'http://vimeo.com/76979871'
242 def test_no_writesubtitles(self):
243 subtitles = self.getSubtitles()
244 self.assertEqual(subtitles, None)
246 def test_subtitles(self):
247 self.DL.params['writesubtitles'] = True
248 subtitles = self.getSubtitles()
249 self.assertEqual(md5(subtitles['en']), '26399116d23ae3cf2c087cea94bc43b4')
251 def test_subtitles_lang(self):
252 self.DL.params['writesubtitles'] = True
253 self.DL.params['subtitleslangs'] = ['fr']
254 subtitles = self.getSubtitles()
255 self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8')
257 def test_allsubtitles(self):
258 self.DL.params['writesubtitles'] = True
259 self.DL.params['allsubtitles'] = True
260 subtitles = self.getSubtitles()
261 self.assertEqual(set(subtitles.keys()), set(['de', 'en', 'es', 'fr']))
263 def test_list_subtitles(self):
264 self.DL.expect_warning('Automatic Captions not supported by this server')
265 self.DL.params['listsubtitles'] = True
266 info_dict = self.getInfoDict()
267 self.assertEqual(info_dict, None)
269 def test_automatic_captions(self):
270 self.DL.expect_warning('Automatic Captions not supported by this server')
271 self.DL.params['writeautomaticsub'] = True
272 self.DL.params['subtitleslang'] = ['en']
273 subtitles = self.getSubtitles()
274 self.assertTrue(len(subtitles.keys()) == 0)
276 def test_nosubtitles(self):
277 self.DL.expect_warning('video doesn\'t have subtitles')
278 self.url = 'http://vimeo.com/56015672'
279 self.DL.params['writesubtitles'] = True
280 self.DL.params['allsubtitles'] = True
281 subtitles = self.getSubtitles()
282 self.assertEqual(len(subtitles), 0)
284 def test_multiple_langs(self):
285 self.DL.params['writesubtitles'] = True
286 langs = ['es', 'fr', 'de']
287 self.DL.params['subtitleslangs'] = langs
288 subtitles = self.getSubtitles()
290 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
293 class TestWallaSubtitles(BaseTestSubtitles):
294 url = 'http://vod.walla.co.il/movie/2705958/the-yes-men'
297 def test_list_subtitles(self):
298 self.DL.expect_warning('Automatic Captions not supported by this server')
299 self.DL.params['listsubtitles'] = True
300 info_dict = self.getInfoDict()
301 self.assertEqual(info_dict, None)
303 def test_allsubtitles(self):
304 self.DL.expect_warning('Automatic Captions not supported by this server')
305 self.DL.params['writesubtitles'] = True
306 self.DL.params['allsubtitles'] = True
307 subtitles = self.getSubtitles()
308 self.assertEqual(set(subtitles.keys()), set(['heb']))
309 self.assertEqual(md5(subtitles['heb']), 'e758c5d7cb982f6bef14f377ec7a3920')
311 def test_nosubtitles(self):
312 self.DL.expect_warning('video doesn\'t have subtitles')
313 self.url = 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one'
314 self.DL.params['writesubtitles'] = True
315 self.DL.params['allsubtitles'] = True
316 subtitles = self.getSubtitles()
317 self.assertEqual(len(subtitles), 0)
320 if __name__ == '__main__':