]> jfr.im git - yt-dlp.git/blame - test/test_subtitles.py
[vimeo] Add support for subtitles (Closes #2239)
[yt-dlp.git] / test / test_subtitles.py
CommitLineData
ae84f879
JMF
1#!/usr/bin/env python
2
3# Allow direct execution
4import os
5import sys
6import unittest
7sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
8
d0efb9ec 9from test.helper import FakeYDL, md5
ae84f879
JMF
10
11
12from youtube_dl.extractor import (
b4bcffef 13 BlipTVIE,
ae84f879
JMF
14 YoutubeIE,
15 DailymotionIE,
16 TEDIE,
17)
18
19
20class BaseTestSubtitles(unittest.TestCase):
21 url = None
22 IE = None
23 def setUp(self):
24 self.DL = FakeYDL()
25 self.ie = self.IE(self.DL)
26
27 def getInfoDict(self):
28 info_dict = self.ie.extract(self.url)
29 return info_dict
30
31 def getSubtitles(self):
32 info_dict = self.getInfoDict()
33 return info_dict['subtitles']
34
35
36class TestYoutubeSubtitles(BaseTestSubtitles):
37 url = 'QRS8MkLhQmM'
38 IE = YoutubeIE
39
ae84f879
JMF
40 def test_youtube_no_writesubtitles(self):
41 self.DL.params['writesubtitles'] = False
42 subtitles = self.getSubtitles()
43 self.assertEqual(subtitles, None)
44
45 def test_youtube_subtitles(self):
46 self.DL.params['writesubtitles'] = True
47 subtitles = self.getSubtitles()
48 self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
49
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')
55
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)
61
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')
67
68 def test_youtube_subtitles_vtt_format(self):
69 self.DL.params['writesubtitles'] = True
70 self.DL.params['subtitlesformat'] = 'vtt'
71 subtitles = self.getSubtitles()
4e0084d9 72 self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
ae84f879
JMF
73
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)
79
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)
86
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)
94
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()
101 for lang in langs:
102 self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
103
104
105class TestDailymotionSubtitles(BaseTestSubtitles):
106 url = 'http://www.dailymotion.com/video/xczg00'
107 IE = DailymotionIE
108
109 def test_no_writesubtitles(self):
110 subtitles = self.getSubtitles()
111 self.assertEqual(subtitles, None)
112
113 def test_subtitles(self):
114 self.DL.params['writesubtitles'] = True
115 subtitles = self.getSubtitles()
116 self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f')
117
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')
123
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)
129
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)
135
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)
142
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)
150
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()
156 for lang in langs:
157 self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
158
159
160class TestTedSubtitles(BaseTestSubtitles):
161 url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'
162 IE = TEDIE
163
164 def test_no_writesubtitles(self):
165 subtitles = self.getSubtitles()
166 self.assertEqual(subtitles, None)
167
168 def test_subtitles(self):
169 self.DL.params['writesubtitles'] = True
170 subtitles = self.getSubtitles()
26dca166 171 self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14')
ae84f879
JMF
172
173 def test_subtitles_lang(self):
174 self.DL.params['writesubtitles'] = True
175 self.DL.params['subtitleslangs'] = ['fr']
176 subtitles = self.getSubtitles()
26dca166 177 self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5')
ae84f879
JMF
178
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)
184
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)
190
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)
197
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()
203 for lang in langs:
204 self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
205
b4bcffef
PH
206
207class TestBlipTVSubtitles(BaseTestSubtitles):
208 url = 'http://blip.tv/a/a-6603250'
209 IE = BlipTVIE
210
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)
216
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')
224
225
ae84f879
JMF
226if __name__ == '__main__':
227 unittest.main()