manim/tests/conftest.py
2024-12-16 20:46:31 -05:00

130 lines
3.2 KiB
Python

from __future__ import annotations
import logging
import sys
from pathlib import Path
import moderngl
import pytest
import manim
def pytest_report_header(config):
try:
ctx = moderngl.create_standalone_context()
info = ctx.info
ctx.release()
except Exception as e:
raise Exception("Error while creating moderngl context") from e
return (
"\nOpenGL information",
"------------------",
f"vendor: {info['GL_VENDOR'].strip()}",
f"renderer: {info['GL_RENDERER'].strip()}",
f"version: {info['GL_VERSION'].strip()}\n",
)
def pytest_addoption(parser):
parser.addoption(
"--skip_slow",
action="store_true",
default=False,
help="Will skip all the slow marked tests. Slow tests are arbitrarily marked as such.",
)
parser.addoption(
"--show_diff",
action="store_true",
default=False,
help="Will show a visual comparison if a graphical unit test fails.",
)
parser.addoption(
"--set_test",
action="store_true",
default=False,
help="Will create the control data for EACH running tests. ",
)
def pytest_configure(config):
config.addinivalue_line("markers", "skip_end_to_end: mark test as end_to_end test")
def pytest_collection_modifyitems(config, items):
if not config.getoption("--skip_slow"):
return
else:
slow_skip = pytest.mark.skip(
reason="Slow test skipped due to --disable_slow flag.",
)
for item in items:
if "slow" in item.keywords:
item.add_marker(slow_skip)
@pytest.fixture(autouse=True)
def temp_media_dir(tmpdir, monkeypatch, request):
if isinstance(request.node, pytest.DoctestItem):
monkeypatch.chdir(tmpdir)
yield tmpdir
else:
with manim.tempconfig({"media_dir": str(tmpdir)}):
assert manim.config.media_dir == str(tmpdir)
yield tmpdir
@pytest.fixture
def manim_caplog(caplog):
logger = logging.getLogger("manim")
logger.propagate = True
caplog.set_level(logging.INFO, logger="manim")
yield caplog
logger.propagate = False
@pytest.fixture
def config():
saved = manim.config.copy()
manim.config.renderer = "cairo"
# we need to return the actual config so that tests
# using tempconfig pass
yield manim.config
manim.config.update(saved)
@pytest.fixture
def dry_run(config):
config.dry_run = True
@pytest.fixture(scope="session")
def python_version():
# use the same python executable as it is running currently
# rather than randomly calling using python or python3, which
# may create problems.
return sys.executable
@pytest.fixture
def reset_cfg_file():
cfgfilepath = Path(__file__).parent / "test_cli" / "manim.cfg"
original = cfgfilepath.read_text()
yield
cfgfilepath.write_text(original)
@pytest.fixture
def using_opengl_renderer():
"""Standard fixture for running with opengl that makes tests use a standard_config.cfg with a temp dir.
.. warning::
As of experimental, this fixture is deprecated and should not be using
"""
@pytest.fixture
def write_to_movie(config):
config.write_to_movie = True