You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.3 KiB

12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
12 years ago
  1. #!/usr/bin/env python
  2. # Allow direct execution
  3. import os
  4. import sys
  5. import unittest
  6. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  7. from test.helper import FakeYDL, global_setup, md5
  8. global_setup()
  9. from youtube_dl.extractor import YoutubeIE
  10. class TestYoutubeSubtitles(unittest.TestCase):
  11. def setUp(self):
  12. self.DL = FakeYDL()
  13. self.url = 'QRS8MkLhQmM'
  14. def getInfoDict(self):
  15. IE = YoutubeIE(self.DL)
  16. info_dict = IE.extract(self.url)
  17. return info_dict
  18. def getSubtitles(self):
  19. info_dict = self.getInfoDict()
  20. return info_dict[0]['subtitles']
  21. def test_youtube_no_writesubtitles(self):
  22. self.DL.params['writesubtitles'] = False
  23. subtitles = self.getSubtitles()
  24. self.assertEqual(subtitles, None)
  25. def test_youtube_subtitles(self):
  26. self.DL.params['writesubtitles'] = True
  27. subtitles = self.getSubtitles()
  28. self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
  29. def test_youtube_subtitles_lang(self):
  30. self.DL.params['writesubtitles'] = True
  31. self.DL.params['subtitleslangs'] = ['it']
  32. subtitles = self.getSubtitles()
  33. self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
  34. def test_youtube_allsubtitles(self):
  35. self.DL.params['writesubtitles'] = True
  36. self.DL.params['allsubtitles'] = True
  37. subtitles = self.getSubtitles()
  38. self.assertEqual(len(subtitles.keys()), 13)
  39. def test_youtube_subtitles_sbv_format(self):
  40. self.DL.params['writesubtitles'] = True
  41. self.DL.params['subtitlesformat'] = 'sbv'
  42. subtitles = self.getSubtitles()
  43. self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
  44. def test_youtube_subtitles_vtt_format(self):
  45. self.DL.params['writesubtitles'] = True
  46. self.DL.params['subtitlesformat'] = 'vtt'
  47. subtitles = self.getSubtitles()
  48. self.assertEqual(md5(subtitles['en']), '356cdc577fde0c6783b9b822e7206ff7')
  49. def test_youtube_list_subtitles(self):
  50. self.DL.expect_warning(u'Video doesn\'t have automatic captions')
  51. self.DL.params['listsubtitles'] = True
  52. info_dict = self.getInfoDict()
  53. self.assertEqual(info_dict, None)
  54. def test_youtube_automatic_captions(self):
  55. self.url = '8YoUxe5ncPo'
  56. self.DL.params['writeautomaticsub'] = True
  57. self.DL.params['subtitleslangs'] = ['it']
  58. subtitles = self.getSubtitles()
  59. self.assertTrue(subtitles['it'] is not None)
  60. def test_youtube_nosubtitles(self):
  61. self.DL.expect_warning(u'video doesn\'t have subtitles')
  62. self.url = 'sAjKT8FhjI8'
  63. self.DL.params['writesubtitles'] = True
  64. self.DL.params['allsubtitles'] = True
  65. subtitles = self.getSubtitles()
  66. self.assertEqual(len(subtitles), 0)
  67. def test_youtube_multiple_langs(self):
  68. self.url = 'QRS8MkLhQmM'
  69. self.DL.params['writesubtitles'] = True
  70. langs = ['it', 'fr', 'de']
  71. self.DL.params['subtitleslangs'] = langs
  72. subtitles = self.getSubtitles()
  73. for lang in langs:
  74. self.assertTrue(subtitles.get(lang) is not None, u'Subtitles for \'%s\' not extracted' % lang)
  75. if __name__ == '__main__':
  76. unittest.main()