|
import pytest |
|
from utils.vtt_parser import parse_vtt_offsets |
|
|
|
def test_parse_simple_vtt(): |
|
"""Test parsing a simple VTT file with one timestamp and coordinates""" |
|
vtt_content = """WEBVTT |
|
|
|
00:00:05.000 --> 00:00:10.000 |
|
xywh=100,200,300,400 |
|
""" |
|
result = list(parse_vtt_offsets(vtt_content.encode('utf-8'))) |
|
assert len(result) == 1 |
|
left, top, right, bottom, time = result[0] |
|
assert left == 100 |
|
assert top == 200 |
|
assert right == 300 |
|
assert bottom == 400 |
|
assert time == 5.0 |
|
|
|
def test_parse_multiple_entries(): |
|
"""Test parsing multiple timestamps and coordinates""" |
|
vtt_content = """WEBVTT |
|
|
|
00:00:05.000 --> 00:00:10.000 |
|
xywh=100,200,300,400 |
|
|
|
00:01:30.500 --> 00:01:35.000 |
|
xywh=150,250,350,450 |
|
""" |
|
result = list(parse_vtt_offsets(vtt_content.encode('utf-8'))) |
|
assert len(result) == 2 |
|
|
|
|
|
left, top, right, bottom, time = result[0] |
|
assert (left, top, right, bottom) == (100, 200, 300, 400) |
|
assert time == 5.0 |
|
|
|
|
|
left, top, right, bottom, time = result[1] |
|
assert (left, top, right, bottom) == (150, 250, 350, 450) |
|
assert time == 90.5 |
|
|
|
def test_parse_empty_vtt(): |
|
"""Test parsing an empty VTT file""" |
|
vtt_content = "WEBVTT\n" |
|
result = list(parse_vtt_offsets(vtt_content.encode('utf-8'))) |
|
assert len(result) == 0 |
|
|
|
def test_parse_invalid_format(): |
|
"""Test parsing VTT with invalid format should not yield results""" |
|
vtt_content = """WEBVTT |
|
|
|
00:00:05.000 --> 00:00:10.000 |
|
invalid_line |
|
""" |
|
result = list(parse_vtt_offsets(vtt_content.encode('utf-8'))) |
|
assert len(result) == 0 |
|
|
|
def test_parse_hour_timestamp(): |
|
"""Test parsing timestamp with hours""" |
|
vtt_content = """WEBVTT |
|
|
|
01:30:05.000 --> 01:30:10.000 |
|
xywh=100,200,300,400 |
|
""" |
|
result = list(parse_vtt_offsets(vtt_content.encode('utf-8'))) |
|
assert len(result) == 1 |
|
left, top, right, bottom, time = result[0] |
|
assert time == 5405.0 |
|
|
|
def test_parse_missing_coordinates(): |
|
"""Test that entries without coordinates are skipped""" |
|
vtt_content = """WEBVTT |
|
|
|
00:00:05.000 --> 00:00:10.000 |
|
Some text content |
|
|
|
00:00:10.000 --> 00:00:15.000 |
|
xywh=100,200,300,400 |
|
""" |
|
result = list(parse_vtt_offsets(vtt_content.encode('utf-8'))) |
|
assert len(result) == 1 |
|
left, top, right, bottom, time = result[0] |
|
assert time == 10.0 |
|
assert (left, top, right, bottom) == (100, 200, 300, 400) |