from __future__ import annotations from pathlib import Path import sys import unittest SRC_ROOT = Path(__file__).resolve().parents[2] / "src" if str(SRC_ROOT) not in sys.path: sys.path.insert(0, str(SRC_ROOT)) from ffx.media_descriptor import MediaDescriptor # noqa: E402 from ffx.media_descriptor_change_set import MediaDescriptorChangeSet # noqa: E402 from ffx.track_descriptor import TrackDescriptor # noqa: E402 from ffx.track_type import TrackType # noqa: E402 from ffx.logging_utils import get_ffx_logger # noqa: E402 class StaticConfig: def __init__(self, data: dict): self._data = data def getData(self): return self._data class MediaDescriptorChangeSetTests(unittest.TestCase): def test_external_subtitle_preserves_source_only_tags_except_removed_keys(self): context = { "logger": get_ffx_logger(), "config": StaticConfig( { "metadata": { "streams": { "remove": ["BPS"], } } } ), } source_track = TrackDescriptor( index=0, source_index=0, sub_index=0, track_type=TrackType.SUBTITLE, tags={ "language": "eng", "title": "Embedded Title", "THIS_IS": "embedded-subtitle", "EXTERNAL_KEEP": "keep-me", "BPS": "remove-me", }, ) target_track = TrackDescriptor( index=0, source_index=0, sub_index=0, track_type=TrackType.SUBTITLE, tags={"language": "deu"}, external_source_file="/tmp/external-subtitle.vtt", ) change_set = MediaDescriptorChangeSet( context, MediaDescriptor(track_descriptors=[target_track]), MediaDescriptor(track_descriptors=[source_track]), ) metadata_tokens = change_set.generateMetadataTokens() self.assertIn("-metadata:s:s:0", metadata_tokens) self.assertIn("language=deu", metadata_tokens) self.assertIn("title=Embedded Title", metadata_tokens) self.assertIn("THIS_IS=embedded-subtitle", metadata_tokens) self.assertIn("EXTERNAL_KEEP=keep-me", metadata_tokens) self.assertNotIn("BPS=remove-me", metadata_tokens) self.assertNotIn("BPS=", metadata_tokens) if __name__ == "__main__": unittest.main()