def test_opengl_mobject_copy(using_opengl_renderer): """Test that a copy is a deepcopy.""" orig = OpenGLMobject() orig.add(*(OpenGLMobject() for _ in range(10))) copy = orig.copy() assert orig is orig assert orig is not copy assert orig.submobjects is not copy.submobjects for i in range(10): assert orig.submobjects[i] is not copy.submobjects[i]
def test_opengl_mobject_remove(using_opengl_renderer): """Test OpenGLMobject.remove().""" obj = OpenGLMobject() to_remove = OpenGLMobject() obj.add(to_remove) obj.add(*(OpenGLMobject() for _ in range(10))) assert len(obj.submobjects) == 11 obj.remove(to_remove) assert len(obj.submobjects) == 10 obj.remove(to_remove) assert len(obj.submobjects) == 10 assert obj.remove(OpenGLMobject()) is obj
def test_family(using_opengl_renderer): """Check that the family is gathered correctly.""" # Check that an empty OpenGLMobject's family only contains itself mob = OpenGLMobject() assert mob.get_family() == [mob] # Check that all children are in the family mob = OpenGLMobject() children = [OpenGLMobject() for _ in range(10)] mob.add(*children) family = mob.get_family() assert len(family) == 1 + 10 assert mob in family for c in children: assert c in family # Nested children should be in the family mob = OpenGLMobject() grandchildren = {} for _ in range(10): child = OpenGLMobject() grandchildren[child] = [OpenGLMobject() for _ in range(10)] child.add(*grandchildren[child]) mob.add(*list(grandchildren.keys())) family = mob.get_family() assert len(family) == 1 + 10 + 10 * 10 assert mob in family for c in grandchildren: assert c in family for gc in grandchildren[c]: assert gc in family
def test_opengl_mobject_add(using_opengl_renderer): """Test OpenGLMobject.add().""" """Call this function with a Container instance to test its add() method.""" # check that obj.submobjects is updated correctly obj = OpenGLMobject() assert len(obj.submobjects) == 0 obj.add(OpenGLMobject()) assert len(obj.submobjects) == 1 obj.add(*(OpenGLMobject() for _ in range(10))) assert len(obj.submobjects) == 11 # check that adding a OpenGLMobject twice does not actually add it twice repeated = OpenGLMobject() obj.add(repeated) assert len(obj.submobjects) == 12 obj.add(repeated) assert len(obj.submobjects) == 12 # check that OpenGLMobject.add() returns the OpenGLMobject (for chained calls) assert obj.add(OpenGLMobject()) is obj obj = OpenGLMobject() # a OpenGLMobject cannot contain itself with pytest.raises(ValueError): obj.add(obj) # can only add OpenGLMobjects with pytest.raises(TypeError): obj.add("foo")