mirror of
https://github.com/ManimCommunity/manim.git
synced 2026-06-22 10:01:47 +00:00
130 lines
3.2 KiB
Python
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
|