Add unittests for formatters.py
This commit is contained in:
parent
c4b8b5b18d
commit
216abbe023
|
@ -0,0 +1,99 @@
|
|||
from unittest import TestCase
|
||||
from mock import MagicMock
|
||||
import json
|
||||
|
||||
from youtube_transcript_api.formatters import (
|
||||
JSONTranscriptFormatter,
|
||||
parse_timecode,
|
||||
SRTTranscriptFormatter,
|
||||
TextTranscriptFormatter,
|
||||
TranscriptFormatter,
|
||||
TranscriptFormatterFactory
|
||||
)
|
||||
|
||||
|
||||
class TestTranscriptFormatters(TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.transcript = [
|
||||
{
|
||||
'text': 'Hey, this is just a test',
|
||||
'start': 0.0,
|
||||
'duration': 1.54
|
||||
},
|
||||
{
|
||||
'text': 'this is not the original transcript',
|
||||
'start': 1.54,
|
||||
'duration': 4.16
|
||||
},
|
||||
{
|
||||
'text': 'just something shorter, I made up for testing',
|
||||
'start': 5.7,
|
||||
'duration': 3.239
|
||||
}
|
||||
]
|
||||
|
||||
def test_base_formatter_combine(self):
|
||||
expecting = ''.join([str(line) for line in self.transcript])
|
||||
|
||||
self.assertEqual(
|
||||
TranscriptFormatter.combine(self.transcript),
|
||||
expecting
|
||||
)
|
||||
|
||||
def test_base_format_not_implemented(self):
|
||||
with self.assertRaises(NotImplementedError):
|
||||
TranscriptFormatter.format(self.transcript)
|
||||
|
||||
def test_text_formatter_format(self):
|
||||
text = '\n'.join([line.get('text') for line in self.transcript])
|
||||
text_fmt = TextTranscriptFormatter.format(self.transcript)
|
||||
self.assertIn(text + '\n', text_fmt)
|
||||
|
||||
def test_srt_formatter_format(self):
|
||||
start = self.transcript[0].get('start')
|
||||
duration = self.transcript[0].get('duration')
|
||||
srt_fmt = SRTTranscriptFormatter.format(self.transcript)
|
||||
self.assertIn('{start} --> {end}'.format(
|
||||
start=parse_timecode(start),
|
||||
end=parse_timecode(start+duration)
|
||||
), srt_fmt)
|
||||
|
||||
def test_json_formatter_format(self):
|
||||
json_fmt = JSONTranscriptFormatter.format(self.transcript)
|
||||
self.assertIsInstance(json.dumps(json_fmt), str)
|
||||
|
||||
def test_invalid_parse_timecode(self):
|
||||
start_time = 'not_float'
|
||||
|
||||
with self.assertRaises(ValueError):
|
||||
parse_timecode(start_time)
|
||||
|
||||
def test_valid_parse_timecode(self):
|
||||
start_time = 0.0
|
||||
end_time = 5.20
|
||||
|
||||
self.assertEqual(
|
||||
parse_timecode(start_time),
|
||||
'00:00:00,000'
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
parse_timecode(end_time),
|
||||
'00:00:05,200'
|
||||
)
|
||||
|
||||
def test_formatter_factory_valid_single_add(self):
|
||||
factory = TranscriptFormatterFactory()
|
||||
factory.add_formatter('json', JSONTranscriptFormatter)
|
||||
|
||||
self.assertDictEqual(
|
||||
getattr(factory, '_formatters'),
|
||||
{'json': JSONTranscriptFormatter}
|
||||
)
|
||||
|
||||
def test_formatter_factory_invalid_single_add(self):
|
||||
factory = TranscriptFormatterFactory()
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
factory.add_formatter('magic', MagicMock)
|
Loading…
Reference in New Issue