Files
manim-slides/tests/test_manim.py
2025-08-27 11:39:43 +02:00

126 lines
2.6 KiB
Python

import importlib
import os
import sys
import pytest
import manim_slides.slide as slide
skip_if_py39 = pytest.mark.skipif(
sys.version_info < (3, 10),
reason="See https://github.com/3b1b/manim/issues/2263",
)
def assert_import(
*,
api_name: str,
manim: bool,
manimgl: bool,
) -> None:
importlib.reload(slide)
assert slide.API_NAME == api_name
assert slide.MANIM == manim
assert slide.MANIMGL == manimgl
@skip_if_py39
def test_force_api() -> None:
# Manimlib parses sys.argv on import, so we clear it temporarily.
old_argv = sys.argv
sys.argv = [__file__]
pytest.importorskip("manimlib")
sys.argv = old_argv
import manim # noqa: F401
if "manimlib" in sys.modules:
del sys.modules["manimlib"]
os.environ[slide.MANIM_API] = "manimlib"
os.environ[slide.FORCE_MANIM_API] = "1"
assert_import(
api_name="manimlib",
manim=False,
manimgl=True,
)
del os.environ[slide.MANIM_API]
del os.environ[slide.FORCE_MANIM_API]
def test_invalid_api() -> None:
os.environ[slide.MANIM_API] = "manim_slides"
with pytest.raises(ImportError):
assert_import(
api_name="",
manim=False,
manimgl=False,
)
del os.environ[slide.MANIM_API]
@skip_if_py39
@pytest.mark.filterwarnings("ignore:assert_import")
def test_manim_and_manimgl_imported() -> None:
# Manimlib parses sys.argv on import, so we clear it temporarily.
old_argv = sys.argv
sys.argv = [__file__]
pytest.importorskip("manimlib")
sys.argv = old_argv
import manim # noqa: F401
assert_import(
api_name="manim",
manim=True,
manimgl=False,
)
def test_manim_imported() -> None:
import manim # noqa: F401
if "manimlib" in sys.modules:
del sys.modules["manimlib"]
assert_import(
api_name="manim",
manim=True,
manimgl=False,
)
@skip_if_py39
def test_manimgl_imported() -> None:
# Manimlib parses sys.argv on import, so we clear it temporarily.
old_argv = sys.argv
sys.argv = [__file__]
pytest.importorskip("manimlib")
sys.argv = old_argv
if "manim" in sys.modules:
del sys.modules["manim"]
assert_import(
api_name="manimlib",
manim=False,
manimgl=True,
)
def test_nothing_imported() -> None:
if "manim" in sys.modules:
del sys.modules["manim"]
if "manimlib" in sys.modules:
del sys.modules["manimlib"]
assert_import(
api_name="manim",
manim=True,
manimgl=False,
)