]> jfr.im git - yt-dlp.git/blame - test/test_youtube_subtitles.py
[subtitles] fixed multiple subtitles language separated by comma after merge
[yt-dlp.git] / test / test_youtube_subtitles.py
CommitLineData
5e5ddcfb
FV
1#!/usr/bin/env python
2
3import sys
4import unittest
5e5ddcfb
FV
5import json
6import io
7import hashlib
8
9# Allow direct execution
10import os
11sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
12
0824c28c 13from youtube_dl.extractor import YoutubeIE
5e5ddcfb 14from youtube_dl.utils import *
112da0a0 15from helper import FakeYDL
5e5ddcfb
FV
16
17md5 = lambda s: hashlib.md5(s.encode('utf-8')).hexdigest()
18
19class TestYoutubeSubtitles(unittest.TestCase):
ae608b80 20 def setUp(self):
447591e1
IM
21 self.DL = FakeYDL()
22 self.url = 'QRS8MkLhQmM'
23 def getInfoDict(self):
24 IE = YoutubeIE(self.DL)
25 info_dict = IE.extract(self.url)
26 return info_dict
27 def getSubtitles(self):
28 info_dict = self.getInfoDict()
29 return info_dict[0]['subtitles']
d80a064e 30 def test_youtube_no_writesubtitles(self):
447591e1
IM
31 self.DL.params['writesubtitles'] = False
32 subtitles = self.getSubtitles()
ae608b80 33 self.assertEqual(subtitles, None)
5e5ddcfb 34 def test_youtube_subtitles(self):
447591e1
IM
35 self.DL.params['writesubtitles'] = True
36 subtitles = self.getSubtitles()
37 self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
d80a064e 38 def test_youtube_subtitles_lang(self):
447591e1 39 self.DL.params['writesubtitles'] = True
d6e203b3 40 self.DL.params['subtitleslangs'] = ['it']
447591e1
IM
41 subtitles = self.getSubtitles()
42 self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
ae608b80 43 def test_youtube_allsubtitles(self):
447591e1
IM
44 self.DL.params['allsubtitles'] = True
45 subtitles = self.getSubtitles()
5d51a883 46 self.assertEqual(len(subtitles.keys()), 13)
65cceef8 47 def test_youtube_subtitles_sbv_format(self):
447591e1
IM
48 self.DL.params['writesubtitles'] = True
49 self.DL.params['subtitlesformat'] = 'sbv'
50 subtitles = self.getSubtitles()
51 self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
65cceef8 52 def test_youtube_subtitles_vtt_format(self):
447591e1
IM
53 self.DL.params['writesubtitles'] = True
54 self.DL.params['subtitlesformat'] = 'vtt'
55 subtitles = self.getSubtitles()
56 self.assertEqual(md5(subtitles['en']), '356cdc577fde0c6783b9b822e7206ff7')
2a4093ea 57 def test_youtube_list_subtitles(self):
447591e1
IM
58 self.DL.params['listsubtitles'] = True
59 info_dict = self.getInfoDict()
2a4093ea 60 self.assertEqual(info_dict, None)
dc1c355b 61 def test_youtube_automatic_captions(self):
447591e1
IM
62 self.url = '8YoUxe5ncPo'
63 self.DL.params['writeautomaticsub'] = True
d6e203b3 64 self.DL.params['subtitleslangs'] = ['it']
447591e1
IM
65 subtitles = self.getSubtitles()
66 self.assertTrue(subtitles['it'] is not None)
d80a064e
IM
67 def test_youtube_nosubtitles(self):
68 self.url = 'sAjKT8FhjI8'
69 self.DL.params['allsubtitles'] = True
70 subtitles = self.getSubtitles()
71 self.assertEqual(len(subtitles), 0)
d6e203b3
IM
72 def test_youtube_multiple_langs(self):
73 self.url = 'QRS8MkLhQmM'
74 self.DL.params['writesubtitles'] = True
75 langs = ['it', 'fr', 'de']
76 self.DL.params['subtitleslangs'] = langs
77 subtitles = self.getSubtitles()
78 for lang in langs:
79 self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
cdb130b0 80
5e5ddcfb
FV
81if __name__ == '__main__':
82 unittest.main()