Fix a few more tests related to scene (#4540)

This commit is contained in:
F. Muenkel 2026-01-26 18:21:54 +01:00 committed by GitHub
commit 771f0152f6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 24 additions and 53 deletions

View file

@ -424,6 +424,7 @@ class Manager(Generic[Scene_co]):
break
else:
self.time += dt
self.scene.time = self.time
self.renderer.render(state)
if self.window is not None and self.window.is_closing:
raise EndSceneEarlyException()

View file

@ -40,22 +40,13 @@ def test_wait_invalid_duration(duration):
test_scene.wait(duration)
@pytest.mark.parametrize("frozen_frame", [False, True])
def test_wait_duration_shorter_than_frame_rate(manim_caplog, frozen_frame):
def test_wait_duration_shorter_than_frame_rate(manim_caplog):
manager = Manager(Scene)
test_scene = manager.scene
test_scene.wait(1e-9, frozen_frame=frozen_frame)
test_scene.wait(1e-9)
assert "too short for the current frame rate" in manim_caplog.text
@pytest.mark.parametrize("duration", [0, -1])
def test_pause_invalid_duration(duration):
manager = Manager(Scene)
test_scene = manager.scene
with pytest.raises(ValueError, match="The duration must be a positive number."):
test_scene.pause(duration)
@pytest.mark.parametrize("max_time", [0, -1])
def test_wait_until_invalid_max_time(max_time):
manager = Manager(Scene)

View file

@ -189,7 +189,8 @@ def test_animationgroup_calls_finish():
def finish(self):
self.finished = True
scene = Scene()
manager = Manager(Scene)
scene = manager.scene
sqr_animation = MyAnimation(Square())
circ_animation = MyAnimation(Circle())
animation_group = AnimationGroup(sqr_animation, circ_animation)

View file

@ -1,10 +1,11 @@
from __future__ import annotations
from manim import Circle, ReplacementTransform, Scene, Square, VGroup
from manim import Circle, Manager, ReplacementTransform, Scene, Square, VGroup
def test_no_duplicate_references():
scene = Scene()
manager = Manager(Scene)
scene = manager.scene
c = Circle()
sq = Square()
scene.add(c, sq)
@ -15,7 +16,8 @@ def test_no_duplicate_references():
def test_duplicate_references_in_group():
scene = Scene()
manager = Manager(Scene)
scene = manager.scene
c = Circle()
sq = Square()
vg = VGroup(c, sq)

View file

@ -1,23 +0,0 @@
from __future__ import annotations
from manim import *
def test_zoom():
s1 = Square()
s1.set_x(-10)
s2 = Square()
s2.set_x(10)
with tempconfig({"dry_run": True, "quality": "low_quality"}):
manager = Manager(MovingCameraScene)
scene = manager.scene
scene.add(s1, s2)
scene.play(scene.camera.auto_zoom([s1, s2]))
assert scene.camera.frame_width == abs(
s1.get_left()[0] - s2.get_right()[0],
)
assert scene.camera.frame.get_center()[0] == (
abs(s1.get_center()[0] + s2.get_center()[0]) / 2
)

View file

@ -4,7 +4,7 @@ import datetime
import pytest
from manim import Circle, FadeIn, Group, Manager, Mobject, Scene, Square
from manim import Circle, FadeIn, Group, Manager, OpenGLMobject, Scene, Square
from manim.animation.animation import Wait
@ -12,27 +12,26 @@ def test_scene_add_remove(dry_run):
manager = Manager(Scene)
scene = manager.scene
assert len(scene.mobjects) == 0
scene.add(Mobject())
scene.add(OpenGLMobject())
assert len(scene.mobjects) == 1
scene.add(*(Mobject() for _ in range(10)))
scene.add(*(OpenGLMobject() for _ in range(10)))
assert len(scene.mobjects) == 11
# Check that adding a mobject twice does not actually add it twice
repeated = Mobject()
repeated = OpenGLMobject()
scene.add(repeated)
assert len(scene.mobjects) == 12
scene.add(repeated)
assert len(scene.mobjects) == 12
# Check that Scene.add() returns the Scene (for chained calls)
assert scene.add(Mobject()) is scene
assert scene.add(OpenGLMobject()) is scene
manager = Manager(Scene)
scene = manager.scene
to_remove = Mobject()
scene = Scene()
to_remove = OpenGLMobject()
scene.add(to_remove)
scene.add(*(Mobject() for _ in range(10)))
scene.add(*(OpenGLMobject() for _ in range(10)))
assert len(scene.mobjects) == 11
scene.remove(to_remove)
assert len(scene.mobjects) == 10
@ -40,7 +39,7 @@ def test_scene_add_remove(dry_run):
assert len(scene.mobjects) == 10
# Check that Scene.remove() returns the instance (for chained calls)
assert scene.add(Mobject()) is scene
assert scene.add(OpenGLMobject()) is scene
def test_scene_time(dry_run):
@ -87,10 +86,10 @@ def test_replace(dry_run):
manager = Manager(Scene)
scene = manager.scene
first = Mobject(name="first")
second = Mobject(name="second")
third = Mobject(name="third")
fourth = Mobject(name="fourth")
first = OpenGLMobject(name="first")
second = OpenGLMobject(name="second")
third = OpenGLMobject(name="third")
fourth = OpenGLMobject(name="fourth")
scene.add(first)
scene.add(Group(second, third, name="group"))
@ -98,8 +97,8 @@ def test_replace(dry_run):
assert_names(scene.mobjects, ["first", "group", "fourth"])
assert_names(scene.mobjects[1], ["second", "third"])
alpha = Mobject(name="alpha")
beta = Mobject(name="beta")
alpha = OpenGLMobject(name="alpha")
beta = OpenGLMobject(name="beta")
scene.replace(first, alpha)
assert_names(scene.mobjects, ["alpha", "group", "fourth"])