Add unit tests for MediaInfo frame class detection

- Created a JSON file containing various test cases for different video resolutions and their expected frame classes.
- Implemented a pytest test script that loads the test cases and verifies the frame class detection functionality of the MediaInfoExtractor.
- Utilized mocking to simulate the behavior of the MediaInfoExtractor and its video track attributes.
This commit is contained in:
sha
2025-12-29 22:03:41 +00:00
parent e0637e9981
commit 6694567ab4
8 changed files with 259 additions and 17 deletions
+27 -1
View File
@@ -1,6 +1,7 @@
import pytest
from pathlib import Path
from renamer.extractors.mediainfo_extractor import MediaInfoExtractor
import json
class TestMediaInfoExtractor:
@@ -13,6 +14,13 @@ class TestMediaInfoExtractor:
"""Use the filenames.txt file for testing"""
return Path(__file__).parent / "filenames.txt"
@pytest.fixture
def frame_class_cases(self):
"""Load test cases for frame class extraction"""
cases_file = Path(__file__).parent / "test_mediainfo_frame_class_cases.json"
with open(cases_file, 'r') as f:
return json.load(f)
def test_extract_resolution(self, extractor, test_file):
"""Test extracting resolution from media info"""
resolution = extractor.extract_resolution()
@@ -47,4 +55,22 @@ class TestMediaInfoExtractor:
"""Test checking if video is 3D"""
is_3d = extractor.is_3d()
# Text files don't have video tracks
assert is_3d is False
assert is_3d is False
@pytest.mark.parametrize("case", [
pytest.param(case, id=case["testname"])
for case in json.load(open(Path(__file__).parent / "test_mediainfo_frame_class_cases.json"))
])
def test_extract_frame_class(self, case):
"""Test extracting frame class from various resolutions"""
# Create a mock extractor with the test resolution
extractor = MediaInfoExtractor.__new__(MediaInfoExtractor)
extractor.video_tracks = [{
'width': case["resolution"][0],
'height': case["resolution"][1],
'interlaced': 'Yes' if case["interlaced"] else None
}]
result = extractor.extract_frame_class()
print(f"Case: {case['testname']}, resolution: {case['resolution']}, expected: {case['expected_frame_class']}, got: {result}")
assert result == case["expected_frame_class"], f"Failed for {case['testname']}: expected {case['expected_frame_class']}, got {result}"