3 # Allow direct execution
7 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
9 from test.helper import FakeYDL, md5
12 from youtube_dl.extractor import (
20 class BaseTestSubtitles(unittest.TestCase):
25 self.ie = self.IE(self.DL)
27 def getInfoDict(self):
28 info_dict = self.ie.extract(self.url)
31 def getSubtitles(self):
32 info_dict = self.getInfoDict()
33 return info_dict['subtitles']
36 class TestYoutubeSubtitles(BaseTestSubtitles):
40 def test_youtube_no_writesubtitles(self):
41 self.DL.params['writesubtitles'] = False
42 subtitles = self.getSubtitles()
43 self.assertEqual(subtitles, None)
45 def test_youtube_subtitles(self):
46 self.DL.params['writesubtitles'] = True
47 subtitles = self.getSubtitles()
48 self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
50 def test_youtube_subtitles_lang(self):
51 self.DL.params['writesubtitles'] = True
52 self.DL.params['subtitleslangs'] = ['it']
53 subtitles = self.getSubtitles()
54 self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
56 def test_youtube_allsubtitles(self):
57 self.DL.params['writesubtitles'] = True
58 self.DL.params['allsubtitles'] = True
59 subtitles = self.getSubtitles()
60 self.assertEqual(len(subtitles.keys()), 13)
62 def test_youtube_subtitles_sbv_format(self):
63 self.DL.params['writesubtitles'] = True
64 self.DL.params['subtitlesformat'] = 'sbv'
65 subtitles = self.getSubtitles()
66 self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
68 def test_youtube_subtitles_vtt_format(self):
69 self.DL.params['writesubtitles'] = True
70 self.DL.params['subtitlesformat'] = 'vtt'
71 subtitles = self.getSubtitles()
72 self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
74 def test_youtube_list_subtitles(self):
75 self.DL.expect_warning(u'Video doesn\'t have automatic captions')
76 self.DL.params['listsubtitles'] = True
77 info_dict = self.getInfoDict()
78 self.assertEqual(info_dict, None)
80 def test_youtube_automatic_captions(self):
81 self.url = '8YoUxe5ncPo'
82 self.DL.params['writeautomaticsub'] = True
83 self.DL.params['subtitleslangs'] = ['it']
84 subtitles = self.getSubtitles()
85 self.assertTrue(subtitles['it'] is not None)
87 def test_youtube_nosubtitles(self):
88 self.DL.expect_warning(u'video doesn\'t have subtitles')
89 self.url = 'sAjKT8FhjI8'
90 self.DL.params['writesubtitles'] = True
91 self.DL.params['allsubtitles'] = True
92 subtitles = self.getSubtitles()
93 self.assertEqual(len(subtitles), 0)
95 def test_youtube_multiple_langs(self):
96 self.url = 'QRS8MkLhQmM'
97 self.DL.params['writesubtitles'] = True
98 langs = ['it', 'fr', 'de']
99 self.DL.params['subtitleslangs'] = langs
100 subtitles = self.getSubtitles()
102 self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
105 class TestDailymotionSubtitles(BaseTestSubtitles):
106 url = 'http://www.dailymotion.com/video/xczg00'
109 def test_no_writesubtitles(self):
110 subtitles = self.getSubtitles()
111 self.assertEqual(subtitles, None)
113 def test_subtitles(self):
114 self.DL.params['writesubtitles'] = True
115 subtitles = self.getSubtitles()
116 self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f')
118 def test_subtitles_lang(self):
119 self.DL.params['writesubtitles'] = True
120 self.DL.params['subtitleslangs'] = ['fr']
121 subtitles = self.getSubtitles()
122 self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792')
124 def test_allsubtitles(self):
125 self.DL.params['writesubtitles'] = True
126 self.DL.params['allsubtitles'] = True
127 subtitles = self.getSubtitles()
128 self.assertEqual(len(subtitles.keys()), 5)
130 def test_list_subtitles(self):
131 self.DL.expect_warning(u'Automatic Captions not supported by this server')
132 self.DL.params['listsubtitles'] = True
133 info_dict = self.getInfoDict()
134 self.assertEqual(info_dict, None)
136 def test_automatic_captions(self):
137 self.DL.expect_warning(u'Automatic Captions not supported by this server')
138 self.DL.params['writeautomaticsub'] = True
139 self.DL.params['subtitleslang'] = ['en']
140 subtitles = self.getSubtitles()
141 self.assertTrue(len(subtitles.keys()) == 0)
143 def test_nosubtitles(self):
144 self.DL.expect_warning(u'video doesn\'t have subtitles')
145 self.url = 'http://www.dailymotion.com/video/x12u166_le-zapping-tele-star-du-08-aout-2013_tv'
146 self.DL.params['writesubtitles'] = True
147 self.DL.params['allsubtitles'] = True
148 subtitles = self.getSubtitles()
149 self.assertEqual(len(subtitles), 0)
151 def test_multiple_langs(self):
152 self.DL.params['writesubtitles'] = True
153 langs = ['es', 'fr', 'de']
154 self.DL.params['subtitleslangs'] = langs
155 subtitles = self.getSubtitles()
157 self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
160 class TestTedSubtitles(BaseTestSubtitles):
161 url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'
164 def test_no_writesubtitles(self):
165 subtitles = self.getSubtitles()
166 self.assertEqual(subtitles, None)
168 def test_subtitles(self):
169 self.DL.params['writesubtitles'] = True
170 subtitles = self.getSubtitles()
171 self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14')
173 def test_subtitles_lang(self):
174 self.DL.params['writesubtitles'] = True
175 self.DL.params['subtitleslangs'] = ['fr']
176 subtitles = self.getSubtitles()
177 self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5')
179 def test_allsubtitles(self):
180 self.DL.params['writesubtitles'] = True
181 self.DL.params['allsubtitles'] = True
182 subtitles = self.getSubtitles()
183 self.assertEqual(len(subtitles.keys()), 28)
185 def test_list_subtitles(self):
186 self.DL.expect_warning(u'Automatic Captions not supported by this server')
187 self.DL.params['listsubtitles'] = True
188 info_dict = self.getInfoDict()
189 self.assertEqual(info_dict, None)
191 def test_automatic_captions(self):
192 self.DL.expect_warning(u'Automatic Captions not supported by this server')
193 self.DL.params['writeautomaticsub'] = True
194 self.DL.params['subtitleslang'] = ['en']
195 subtitles = self.getSubtitles()
196 self.assertTrue(len(subtitles.keys()) == 0)
198 def test_multiple_langs(self):
199 self.DL.params['writesubtitles'] = True
200 langs = ['es', 'fr', 'de']
201 self.DL.params['subtitleslangs'] = langs
202 subtitles = self.getSubtitles()
204 self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
207 class TestBlipTVSubtitles(BaseTestSubtitles):
208 url = 'http://blip.tv/a/a-6603250'
211 def test_list_subtitles(self):
212 self.DL.expect_warning(u'Automatic Captions not supported by this server')
213 self.DL.params['listsubtitles'] = True
214 info_dict = self.getInfoDict()
215 self.assertEqual(info_dict, None)
217 def test_allsubtitles(self):
218 self.DL.expect_warning(u'Automatic Captions not supported by this server')
219 self.DL.params['writesubtitles'] = True
220 self.DL.params['allsubtitles'] = True
221 subtitles = self.getSubtitles()
222 self.assertEqual(set(subtitles.keys()), set(['en']))
223 self.assertEqual(md5(subtitles['en']), '5b75c300af65fe4476dff79478bb93e4')
226 if __name__ == '__main__':