from __future__ import annotations from pathlib import Path import pytest from click.testing import CliRunner from manim.__main__ import main def _segment_directory( media_dir: Path, *, module_name: str, quality: str, scene_name: str, ) -> Path: return ( media_dir / "videos" / module_name / quality / "partial_movie_files" / scene_name ) def test_cache_clear_resolves_each_scene_without_importing_file(tmp_path): scene_file = tmp_path / "example.py" scene_file.write_text("raise RuntimeError('must not be imported')\n") media_dir = tmp_path / "media" for scene_name in ("FirstScene", "SecondScene"): directory = _segment_directory( media_dir, module_name="example", quality="480p15", scene_name=scene_name, ) directory.mkdir(parents=True) (directory / "segment.mp4").touch() result = CliRunner().invoke( main, [ "cache", "clear", "--media-dir", str(media_dir), "-q", "l", str(scene_file), "FirstScene", "SecondScene", ], prog_name="manim", ) assert result.exception is None, result.output for scene_name in ("FirstScene", "SecondScene"): directory = _segment_directory( media_dir, module_name="example", quality="480p15", scene_name=scene_name, ) assert not (directory / "segment.mp4").exists() assert "Removed 1 cached segment(s) for FirstScene" in result.output assert "Removed 1 cached segment(s) for SecondScene" in result.output @pytest.mark.parametrize("override_media_dir", [False, True]) def test_cache_clear_applies_config_file_and_path_overrides( tmp_path, override_media_dir, ): scene_file = tmp_path / "configured_scene.py" scene_file.touch() configured_media_dir = tmp_path / "configured-media" selected_media_dir = ( tmp_path / "overridden-media" if override_media_dir else configured_media_dir ) config_file = tmp_path / "cache.cfg" config_file.write_text(f"[CLI]\nmedia_dir = {configured_media_dir}\n") directory = _segment_directory( selected_media_dir, module_name="configured_scene", quality="360p12", scene_name="ConfiguredScene", ) directory.mkdir(parents=True) segment = directory / "segment.mp4" segment.touch() options = ["--config-file", str(config_file)] if override_media_dir: options.extend(["--media-dir", str(selected_media_dir)]) result = CliRunner().invoke( main, [ "cache", "clear", *options, "--resolution", "640,360", "--fps", "12", str(scene_file), "ConfiguredScene", ], prog_name="manim", ) assert result.exception is None, result.output assert not segment.exists()