From e7b698327cd91b371ff4fd43d1c117637224fded Mon Sep 17 00:00:00 2001 From: Himanshi Kalra Date: Thu, 17 Dec 2020 20:44:55 +0530 Subject: Updated and extended Regression Testing frameworks (Gsoc 2020) This revision contains the following changes- - Updated the existing testing framework for Modifiers for Regression Testing. - Tests for Physics modifiers and remaining Generate and Deform modifiers are added. - The existing `ModifierSpec` is updated with backward compatibility to support Physics Modifiers. - Now there is support for frame number and giving nested parameters for attributes. - Some Deform modifiers required Object Operators, e.g. "Bind" in Mesh Deform, so a new class was added to support that functionality. - A separate class for holding Particles System, they are tested by converting all the particles to mesh and joining it to the mesh they were added. - Updated the format to add tests for Bevel, Boolean and Operators as well. Reviewed By: zazizizou, mont29, campbellbarton Differential Revision: https://developer.blender.org/D8507 --- tests/python/modifiers.py | 352 ++++++++++++++++++++++++++++++---------------- 1 file changed, 230 insertions(+), 122 deletions(-) (limited to 'tests/python/modifiers.py') diff --git a/tests/python/modifiers.py b/tests/python/modifiers.py index ba156cef8ea..24f71c4066d 100644 --- a/tests/python/modifiers.py +++ b/tests/python/modifiers.py @@ -26,7 +26,7 @@ from random import shuffle, seed import bpy sys.path.append(os.path.dirname(os.path.realpath(__file__))) -from modules.mesh_test import ModifierTest, ModifierSpec +from modules.mesh_test import RunTest, ModifierSpec, MeshTest seed(0) @@ -47,7 +47,7 @@ def get_generate_modifiers_list(test_object_name, randomize=False): ModifierSpec('array', 'ARRAY', {}), ModifierSpec('bevel', 'BEVEL', {'width': 0.1}), ModifierSpec('boolean', 'BOOLEAN', {'object': boolean_test_object, 'solver': 'FAST'}), - ModifierSpec('build', 'BUILD', {'frame_start': 0, 'frame_duration': 1}), + ModifierSpec('build', 'BUILD', {'frame_start': 1, 'frame_duration': 1}, 2), ModifierSpec('decimate', 'DECIMATE', {}), ModifierSpec('edge split', 'EDGE_SPLIT', {}), @@ -62,7 +62,6 @@ def get_generate_modifiers_list(test_object_name, randomize=False): # ModifierSpec('remesh', 'REMESH', {}), # ModifierSpec('screw', 'SCREW', {}), # screw can make the test very slow. Skipping for now. - # ModifierSpec('skin', 'SKIN', {}), # skin is not reproducible . ModifierSpec('solidify', 'SOLIDIFY', {}), ModifierSpec('subsurf', 'SUBSURF', {}), @@ -78,7 +77,6 @@ def get_generate_modifiers_list(test_object_name, randomize=False): def main(): - mask_first_list = get_generate_modifiers_list("testCubeMaskFirst", randomize=True) mask_vertex_group = "testCubeMaskFirst" + "_mask" mask_first_list.insert(0, ModifierSpec('mask', 'MASK', {'vertex_group': mask_vertex_group})) @@ -88,169 +86,279 @@ def main(): # List of 'Generate' modifiers on a cube ############################### # 0 - # ["testCube", "expectedCube", get_generate_modifiers_list("testCube")], - ["testCubeRandom", "expectedCubeRandom", get_generate_modifiers_list("testCubeRandom", randomize=True)], - ["testCubeMaskFirst", "expectedCubeMaskFirst", mask_first_list], - - ["testCollapseDecimate", "expectedCollapseDecimate", - [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2}), - ModifierSpec('decimate', 'DECIMATE', {'decimate_type': 'COLLAPSE', 'ratio': 0.25, 'use_collapse_triangulate': True})]], - ["testPlanarDecimate", "expectedPlanarDecimate", - [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2}), - ModifierSpec('decimate', 'DECIMATE', {'decimate_type': 'DISSOLVE', 'angle_limit': math.radians(30)})]], - ["testUnsubdivideDecimate", "expectedUnsubdivideDecimate", - [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2}), - ModifierSpec('decimate', 'DECIMATE', {'decimate_type': 'UNSUBDIV', 'iterations': 2})]], + # MeshTest("testCube", "expectedCube", get_generate_modifiers_list("testCube")), + MeshTest("CubeRandom", "testCubeRandom", "expectedCubeRandom", + get_generate_modifiers_list("testCubeRandom", randomize=True)), + MeshTest("CubeMaskFirst", "testCubeMaskFirst", "expectedCubeMaskFirst", mask_first_list), + + MeshTest("CollapseDecimate", "testCollapseDecimate", "expectedCollapseDecimate", + [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2}), + ModifierSpec('decimate', 'DECIMATE', + {'decimate_type': 'COLLAPSE', 'ratio': 0.25, 'use_collapse_triangulate': True})]), + MeshTest("PlanarDecimate", "testPlanarDecimate", "expectedPlanarDecimate", + [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2}), + ModifierSpec('decimate', 'DECIMATE', + {'decimate_type': 'DISSOLVE', 'angle_limit': math.radians(30)})]), + MeshTest("UnsubdivideDecimate", "testUnsubdivideDecimate", "expectedUnsubdivideDecimate", + [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2}), + ModifierSpec('decimate', 'DECIMATE', {'decimate_type': 'UNSUBDIV', 'iterations': 2})]), # 5 - ["testRadialBisectMirror", "expectedRadialBisectMirror", - [ModifierSpec('mirror1', 'MIRROR', {'use_bisect_axis': (True, False, False)}), - ModifierSpec('mirror2', 'MIRROR', {'use_bisect_axis': (True, False, False), 'mirror_object': bpy.data.objects["testRadialBisectMirrorHelper"]}), - ModifierSpec('mirror3', 'MIRROR', {'use_axis': (False, True, False), 'use_bisect_axis': (False, True, False), 'use_bisect_flip_axis': (False, True, False), 'mirror_object': bpy.data.objects["testRadialBisectMirrorHelper"]})]], - ["regressT58411Mirror", "expectedT58411Mirror", - [ModifierSpec('mirror', 'MIRROR', {}), - ModifierSpec('bevel', 'BEVEL', {'segments': 2, 'limit_method': 'WEIGHT'}), - ModifierSpec('subd', 'SUBSURF', {'levels': 1})]], - - ["testBasicScrew", "expectedBasicScrew", - [ModifierSpec('mirror', 'MIRROR', {'mirror_object': bpy.data.objects["testBasicScrewHelper"]}), - ModifierSpec("screw", 'SCREW', {'angle': math.radians(400), 'steps': 20, 'iterations': 2, 'screw_offset': 2, 'use_normal_calculate': True})]], - ["testObjectScrew", "expectedObjectScrew", - [ModifierSpec('mirror', 'MIRROR', {'mirror_object': bpy.data.objects["testObjectScrewHelper2"]}), - ModifierSpec("screw", 'SCREW', {"angle": math.radians(600), 'steps': 32, 'iterations': 1, 'use_object_screw_offset': True, 'use_normal_calculate': True, 'object': bpy.data.objects["testObjectScrewHelper1"]})]], + MeshTest("RadialBisectMirror", "testRadialBisectMirror", "expectedRadialBisectMirror", + [ModifierSpec('mirror1', 'MIRROR', {'use_bisect_axis': (True, False, False)}), + ModifierSpec('mirror2', 'MIRROR', {'use_bisect_axis': (True, False, False), + 'mirror_object': bpy.data.objects[ + "testRadialBisectMirrorHelper"]}), + ModifierSpec('mirror3', 'MIRROR', + {'use_axis': (False, True, False), 'use_bisect_axis': (False, True, False), + 'use_bisect_flip_axis': (False, True, False), + 'mirror_object': bpy.data.objects["testRadialBisectMirrorHelper"]})]), + MeshTest("T58411Mirror", "regressT58411Mirror", "expectedT58411Mirror", + [ModifierSpec('mirror', 'MIRROR', {}), + ModifierSpec('bevel', 'BEVEL', {'segments': 2, 'limit_method': 'WEIGHT'}), + ModifierSpec('subd', 'SUBSURF', {'levels': 1})]), + + MeshTest("BasicScrew", "testBasicScrew", "expectedBasicScrew", + [ModifierSpec('mirror', 'MIRROR', {'mirror_object': bpy.data.objects["testBasicScrewHelper"]}), + ModifierSpec("screw", 'SCREW', + {'angle': math.radians(400), 'steps': 20, 'iterations': 2, 'screw_offset': 2, + 'use_normal_calculate': True})]), + MeshTest("ObjectScrew", "testObjectScrew", "expectedObjectScrew", + [ModifierSpec('mirror', 'MIRROR', {'mirror_object': bpy.data.objects["testObjectScrewHelper2"]}), + ModifierSpec("screw", 'SCREW', + {"angle": math.radians(600), 'steps': 32, 'iterations': 1, + 'use_object_screw_offset': True, + 'use_normal_calculate': True, 'object': bpy.data.objects["testObjectScrewHelper1"]})]), # 9 - ["testMergedScrewWeld", "expectedMergedScrewWeld", - [ModifierSpec("screw", 'SCREW', {'angle': math.radians(360), 'steps': 12, 'iterations': 1, 'screw_offset': 1, 'use_normal_calculate': True, 'use_merge_vertices': True}), - ModifierSpec("weld", 'WELD', {"merge_threshold": 0.001})]], - ["regressT72380Weld", "expectedT72380Weld", - [ModifierSpec('vedit', 'VERTEX_WEIGHT_EDIT', {'vertex_group': 'Group', 'use_remove': True, 'remove_threshold': 1}), - ModifierSpec("weld", 'WELD', {"merge_threshold": 0.2, "vertex_group": "Group"})]], - ["regressT72792Weld", "expectedT72792Weld", - [ModifierSpec('array', 'ARRAY', {'fit_type': 'FIXED_COUNT', 'count': 2}), - ModifierSpec("weld", 'WELD', {"merge_threshold": 0.1, "vertex_group": "Group"})]], + MeshTest("MergedScrewWeld", "testMergedScrewWeld", "expectedMergedScrewWeld", + [ModifierSpec("screw", 'SCREW', + {'angle': math.radians(360), 'steps': 12, 'iterations': 1, 'screw_offset': 1, + 'use_normal_calculate': True, 'use_merge_vertices': True}), + ModifierSpec("weld", 'WELD', {"merge_threshold": 0.001})]), + MeshTest("T72380Weld", "regressT72380Weld", "expectedT72380Weld", + [ModifierSpec('vedit', 'VERTEX_WEIGHT_EDIT', + {'vertex_group': 'Group', 'use_remove': True, 'remove_threshold': 1}), + ModifierSpec("weld", 'WELD', {"merge_threshold": 0.2, "vertex_group": "Group"})]), + MeshTest("T72792Weld", "regressT72792Weld", "expectedT72792Weld", + [ModifierSpec('array', 'ARRAY', {'fit_type': 'FIXED_COUNT', 'count': 2}), + ModifierSpec("weld", 'WELD', {"merge_threshold": 0.1, "vertex_group": "Group"})]), ############################################ # One 'Generate' modifier on primitive meshes ############################################# # 12 - ["testCubeArray", "expectedCubeArray", [ModifierSpec('array', 'ARRAY', {})]], - ["testCapArray", "expectedCapArray", - [ModifierSpec('array', 'ARRAY', {'fit_type': 'FIT_LENGTH', 'fit_length': 2.0, 'start_cap': bpy.data.objects["testCapStart"], 'end_cap': bpy.data.objects["testCapEnd"]})]], - ["testCurveArray", "expectedCurveArray", - [ModifierSpec('array', 'ARRAY', {'fit_type': 'FIT_CURVE', 'curve': bpy.data.objects["testCurveArrayHelper"], 'use_relative_offset': False, 'use_constant_offset': True, 'constant_offset_displace': (0.5, 0, 0)})]], - ["testRadialArray", "expectedRadialArray", - [ModifierSpec('array', 'ARRAY', {'fit_type': 'FIXED_COUNT', 'count': 3, 'use_merge_vertices': True, 'use_merge_vertices_cap': True, 'use_relative_offset': False, 'use_object_offset': True, 'offset_object': bpy.data.objects["testRadialArrayHelper"]})]], - - ["testCylinderBuild", "expectedCylinderBuild", [ModifierSpec('build', 'BUILD', {'frame_start': 0, 'frame_duration': 1})]], + MeshTest("CubeArray", "testCubeArray", "expectedCubeArray", + [ModifierSpec('array', 'ARRAY', {})]), + MeshTest("CapArray", "testCapArray", "expectedCapArray", + [ModifierSpec('array', 'ARRAY', + {'fit_type': 'FIT_LENGTH', 'fit_length': 2.0, + 'start_cap': bpy.data.objects["testCapStart"], + 'end_cap': bpy.data.objects["testCapEnd"]})]), + MeshTest("CurveArray", "testCurveArray", "expectedCurveArray", + [ModifierSpec('array', 'ARRAY', + {'fit_type': 'FIT_CURVE', 'curve': bpy.data.objects["testCurveArrayHelper"], + 'use_relative_offset': False, 'use_constant_offset': True, + 'constant_offset_displace': (0.5, 0, 0)})]), + MeshTest("RadialArray", "testRadialArray", "expectedRadialArray", + [ModifierSpec('array', 'ARRAY', {'fit_type': 'FIXED_COUNT', 'count': 3, 'use_merge_vertices': True, + 'use_merge_vertices_cap': True, 'use_relative_offset': False, + 'use_object_offset': True, + 'offset_object': bpy.data.objects["testRadialArrayHelper"]})]), + + MeshTest("CylinderBuild", "testCylinderBuild", "expectedCylinderBuild", + [ModifierSpec('build', 'BUILD', {'frame_start': 1, 'frame_duration': 1}, 2)]), # 17 - ["testConeDecimate", "expectedConeDecimate", [ModifierSpec('decimate', 'DECIMATE', {'ratio': 0.5})]], - ["testCubeEdgeSplit", "expectedCubeEdgeSplit", [ModifierSpec('edge split', 'EDGE_SPLIT', {})]], - - ["testSphereMirror", "expectedSphereMirror", [ModifierSpec('mirror', 'MIRROR', {})]], - ["testLocalMirror", "expectedLocalMirror", - [ModifierSpec('mirror', 'MIRROR', {'use_clip': True})]], - ["testObjectOffsetMirror", "expectedObjectOffsetMirror", - [ModifierSpec('mirror', 'MIRROR', {'mirror_object': bpy.data.objects["testObjectOffsetMirrorHelper"]})]], - - ["testCylinderMask", "expectedCylinderMask", [ModifierSpec('mask', 'MASK', {'vertex_group': "mask_vertex_group"})]], - ["testConeMultiRes", "expectedConeMultiRes", [ModifierSpec('multires', 'MULTIRES', {})]], + MeshTest("ConeDecimate", "testConeDecimate", "expectedConeDecimate", + [ModifierSpec('decimate', 'DECIMATE', {'ratio': 0.5})]), + MeshTest("CubeEdgeSplit", "testCubeEdgeSplit", "expectedCubeEdgeSplit", + [ModifierSpec('edge split', 'EDGE_SPLIT', {})]), + + MeshTest("SphereMirror", "testSphereMirror", "expectedSphereMirror", + [ModifierSpec('mirror', 'MIRROR', {})]), + MeshTest("LocalMirror", "testLocalMirror", "expectedLocalMirror", + [ModifierSpec('mirror', 'MIRROR', {'use_clip': True})]), + MeshTest("ObjectOffsetMirror", "testObjectOffsetMirror", "expectedObjectOffsetMirror", + [ModifierSpec('mirror', 'MIRROR', + {'mirror_object': bpy.data.objects["testObjectOffsetMirrorHelper"]})]), + + MeshTest("CylinderMask", "testCylinderMask", "expectedCylinderMask", + [ModifierSpec('mask', 'MASK', {'vertex_group': "mask_vertex_group"})]), + MeshTest("ConeMultiRes", "testConeMultiRes", "expectedConeMultiRes", + [ModifierSpec('multires', 'MULTIRES', {})]), # 24 - ["testCubeScrew", "expectedCubeScrew", [ModifierSpec('screw', 'SCREW', {})]], - - ["testCubeSolidify", "expectedCubeSolidify", [ModifierSpec('solidify', 'SOLIDIFY', {})]], - ["testComplexSolidify", "expectedComplexSolidify", - [ModifierSpec('solidify', 'SOLIDIFY', {'solidify_mode': 'NON_MANIFOLD', 'thickness': 0.05, 'offset': 0, 'nonmanifold_thickness_mode': 'CONSTRAINTS'})]], - ["regressT63063Solidify", "expectedT63063Solidify", - [ModifierSpec('solid', 'SOLIDIFY', {'thickness': 0.1, 'offset': 0.7})]], - ["regressT61979Solidify", "expectedT61979Solidify", - [ModifierSpec('solid', 'SOLIDIFY', {'thickness': -0.25, 'use_even_offset': True, 'use_quality_normals': True})]], - - ["testMonkeySubsurf", "expectedMonkeySubsurf", [ModifierSpec('subsurf', 'SUBSURF', {})]], - ["testCatmullClarkSubdivisionSurface", "expectedCatmullClarkSubdivisionSurface", - [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2})]], - ["testSimpleSubdivisionSurface", "expectedSimpleSubdivisionSurface", - [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2, 'subdivision_type': 'SIMPLE'})]], - ["testCrease2dSubdivisionSurface", "expectedCrease2dSubdivisionSurface", - [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2})]], - ["testCrease3dSubdivisionSurface", "expectedCrease3dSubdivisionSurface", - [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2})]], + MeshTest("CubeScrew", "testCubeScrew", "expectedCubeScrew", + [ModifierSpec('screw', 'SCREW', {})]), + + MeshTest("CubeSolidify", "testCubeSolidify", "expectedCubeSolidify", + [ModifierSpec('solidify', 'SOLIDIFY', {})]), + MeshTest("ComplexSolidify", "testComplexSolidify", "expectedComplexSolidify", + [ModifierSpec('solidify', 'SOLIDIFY', {'solidify_mode': 'NON_MANIFOLD', 'thickness': 0.05, 'offset': 0, + 'nonmanifold_thickness_mode': 'CONSTRAINTS'})]), + MeshTest("T63063Solidify", "regressT63063Solidify", "expectedT63063Solidify", + [ModifierSpec('solid', 'SOLIDIFY', {'thickness': 0.1, 'offset': 0.7})]), + MeshTest("T61979Solidify", "regressT61979Solidify", "expectedT61979Solidify", + [ModifierSpec('solid', 'SOLIDIFY', + {'thickness': -0.25, 'use_even_offset': True, 'use_quality_normals': True})]), + + MeshTest("MonkeySubsurf", "testMonkeySubsurf", "expectedMonkeySubsurf", + [ModifierSpec('subsurf', 'SUBSURF', {})]), + MeshTest("CatmullClarkSubdivisionSurface", "testCatmullClarkSubdivisionSurface", + "expectedCatmullClarkSubdivisionSurface", + [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2})]), + MeshTest("SimpleSubdivisionSurface", "testSimpleSubdivisionSurface", "expectedSimpleSubdivisionSurface", + [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2, 'subdivision_type': 'SIMPLE'})]), + MeshTest("Crease2dSubdivisionSurface", "testCrease2dSubdivisionSurface", "expectedCrease2dSubdivisionSurface", + [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2})]), + MeshTest("Crease3dSubdivisionSurface", "testCrease3dSubdivisionSurface", "expectedCrease3dSubdivisionSurface", + [ModifierSpec("subdivision", 'SUBSURF', {"levels": 2})]), # 34 - ["testSphereTriangulate", "expectedSphereTriangulate", [ModifierSpec('triangulate', 'TRIANGULATE', {})]], - ["testMonkeyWireframe", "expectedMonkeyWireframe", [ModifierSpec('wireframe', 'WIREFRAME', {})]], - #ModifierSpec('skin', 'SKIN', {}), # skin is not reproducible . - ["testMergedWeld", "expectedMergedWeld", - [ModifierSpec("weld", 'WELD', {"merge_threshold": 0.021})]], - ["testMergedAllWeld", "expectedMergedAllWeld", - [ModifierSpec("weld", 'WELD', {"merge_threshold": 1.8})]], - ["testMergedNoneWeld", "expectedMergedNoneWeld", - [ModifierSpec("weld", 'WELD', {"merge_threshold": 0.019})]], + MeshTest("SphereTriangulate", "testSphereTriangulate", "expectedSphereTriangulate", + [ModifierSpec('triangulate', 'TRIANGULATE', {})]), + MeshTest("MonkeyWireframe", "testMonkeyWireframe", "expectedMonkeyWireframe", + [ModifierSpec('wireframe', 'WIREFRAME', {})]), + + # Duplicate the object, test object and expected object have same world coordinates. + MeshTest("Skin", "testObjPlaneSkin", "expObjPlaneSkin", + [ModifierSpec('skin', 'SKIN', {})]), + + MeshTest("MergedWeld", "testMergedWeld", "expectedMergedWeld", + [ModifierSpec("weld", 'WELD', {"merge_threshold": 0.021})]), + MeshTest("MergedAllWeld", "testMergedAllWeld", "expectedMergedAllWeld", + [ModifierSpec("weld", 'WELD', {"merge_threshold": 1.8})]), + MeshTest("MergedNoneWeld", "testMergedNoneWeld", "expectedMergedNoneWeld", + [ModifierSpec("weld", 'WELD', {"merge_threshold": 0.019})]), + ############################################# # One 'Deform' modifier on primitive meshes ############################################# # 39 - ["testMonkeyArmature", "expectedMonkeyArmature", - [ModifierSpec('armature', 'ARMATURE', {'object': bpy.data.objects['testArmature'], 'use_vertex_groups': True})]], - ["testTorusCast", "expectedTorusCast", [ModifierSpec('cast', 'CAST', {'factor': 2.64})]], - ["testCubeCurve", "expectedCubeCurve", - [ModifierSpec('curve', 'CURVE', {'object': bpy.data.objects['testBezierCurve']})]], - ["testMonkeyDisplace", "expectedMonkeyDisplace", [ModifierSpec('displace', "DISPLACE", {})]], - - # Hook modifier requires moving the hook object to get a mesh change, so can't test it with the current framework - # ["testMonkeyHook", "expectedMonkeyHook", - # [ModifierSpec('hook', 'HOOK', {'object': bpy.data.objects["EmptyHook"], 'vertex_group': "HookVertexGroup"})]], + MeshTest("MonkeyArmature", "testMonkeyArmature", "expectedMonkeyArmature", + [ModifierSpec('armature', 'ARMATURE', + {'object': bpy.data.objects['testArmature'], 'use_vertex_groups': True})]), + MeshTest("TorusCast", "testTorusCast", "expectedTorusCast", + [ModifierSpec('cast', 'CAST', {'factor': 2.64})]), + MeshTest("CubeCurve", "testCubeCurve", "expectedCubeCurve", + [ModifierSpec('curve', 'CURVE', {'object': bpy.data.objects['testBezierCurve']})]), + MeshTest("MonkeyDisplace", "testMonkeyDisplace", "expectedMonkeyDisplace", + [ModifierSpec('displace', "DISPLACE", {})]), + + # Hook modifier requires moving the hook object to get a mesh change + # so can't test it with the current framework + # MeshTest("MonkeyHook", "testMonkeyHook", "expectedMonkeyHook", + # [ModifierSpec('hook', 'HOOK', {'object': bpy.data.objects["EmptyHook"], 'vertex_group': + # "HookVertexGroup"})]), # 43 - #ModifierSpec('laplacian_deform', 'LAPLACIANDEFORM', {}) Laplacian requires a more complex mesh - ["testCubeLattice", "expectedCubeLattice", - [ModifierSpec('lattice', 'LATTICE', {'object': bpy.data.objects["testLattice"]})]], - # ModifierSpec('laplacian_deform', 'LAPLACIANDEFORM', {}) Laplacian requires a more complex mesh + MeshTest("CubeLattice", "testCubeLattice", "expectedCubeLattice", + [ModifierSpec('lattice', 'LATTICE', {'object': bpy.data.objects["testLattice"]})]), + + MeshTest("PlaneShrinkWrap", "testPlaneShrinkWrap", "expectedPlaneShrinkWrap", + [ModifierSpec('shrinkwrap', 'SHRINKWRAP', + {'target': bpy.data.objects["testCubeWrap"], 'offset': 0.5})]), - # Mesh Deform Modifier requires user input, so skip. + MeshTest("CylinderSimpleDeform", "testCylinderSimpleDeform", "expectedCylinderSimpleDeform", + [ModifierSpec('simple_deform', 'SIMPLE_DEFORM', {'angle': math.radians(180), 'deform_axis': 'Z'})]), - # mesh_test = MeshTest("testMonkeyDeform", "expectedMonkeyDeform",[ - # ModifierSpec('mesh_deform', 'MESH_DEFORM', {'object': bpy.data.objects["testDeformStructure"]}), - # OperatorSpec('meshdeform_bind',{'modifier':'MeshDeform'},'FACE',{i for in range(500)}) - # ] ,True) + MeshTest("PlaneSmooth", "testPlaneSmooth", "expectedPlaneSmooth", + [ModifierSpec('smooth', 'SMOOTH', {'iterations': 11})]), - ["testPlaneShrinkWrap", "expectedPlaneShrinkWrap", - [ModifierSpec('shrinkwrap', 'SHRINKWRAP', {'target': bpy.data.objects["testCubeWrap"], 'offset': 0.5})]], + # Smooth corrective requires a complex mesh. - ["testCylinderSimpleDeform", "expectedCylinderSimpleDeform", - [ModifierSpec('simple_deform', 'SIMPLE_DEFORM', {'angle': math.radians(180), 'deform_axis': 'Z'})]], + MeshTest("BalloonLaplacianSmooth", "testBalloonLaplacianSmooth", "expectedBalloonLaplacianSmooth", + [ModifierSpec('laplaciansmooth', 'LAPLACIANSMOOTH', {'lambda_factor': 12, 'lambda_border': 12})]), - ["testPlaneSmooth", "expectedPlaneSmooth", - [ModifierSpec('smooth', 'SMOOTH', {'iterations': 11})]], + # Gets updated often + MeshTest("WavePlane", "testObjPlaneWave", "expObjPlaneWave", + [ModifierSpec('wave', 'WAVE', {})]), - # Smooth corrective requires a complex mesh. + ############################################# + # CURVES Generate Modifiers + ############################################# + # Caution: Make sure test object has no modifier in "added" state, the test may fail. + MeshTest("BezCurveArray", "testObjBezierCurveArray", "expObjBezierCurveArray", + [ModifierSpec('array', 'ARRAY', {})]), + + MeshTest("CurveBevel", "testObjBezierCurveBevel", "expObjBezierCurveBevel", + [ModifierSpec('bevel', 'BEVEL', {})]), + + MeshTest("CurveBuild", "testObjBezierCurveBuild", "expObjBezierCurveBuild", + [ModifierSpec('build', 'BUILD', {'frame_start': 1, 'frame_duration': 1}, 2)]), + + MeshTest("CurveDecimate", "testObjBezierCurveDecimate", "expObjBezierCurveDecimate", + [ModifierSpec('decimate', 'DECIMATE', {'ratio': 0.5})]), + + MeshTest("CurveEdgeSplit", "testObjBezierCurveEdgeSplit", "expObjBezierCurveEdgeSplit", + [ModifierSpec('edgeSplit', 'EDGE_SPLIT', {})]), + + MeshTest("CurveMirror", "testObjBezierCurveMirror", "expObjBezierCurveMirror", + [ModifierSpec('mirror', 'MIRROR', {'use_axis': (True, True, False)})]), + + MeshTest("CurveScrew", "testObjBezierCurveScrew", "expObjBezierCurveScrew", + [ModifierSpec('screw', 'SCREW', {})]), + + MeshTest("CurveSolidify", "testObjBezierCurveSolidify", "expObjBezierCurveSolidify", + [ModifierSpec('solidify', 'SOLIDIFY', {'thickness': 1})]), + + MeshTest("CurveSubSurf", "testObjBezierCurveSubSurf", "expObjBezierCurveSubSurf", + [ModifierSpec('subSurf', 'SUBSURF', {})]), + + MeshTest("CurveTriangulate", "testObjBezierCurveTriangulate", "expObjBezierCurveTriangulate", + [ModifierSpec('triangulate', 'TRIANGULATE', {})]), + + # Test 60 + # Caution Weld: if the distance is increased beyond a limit, the object disappears + MeshTest("CurveWeld", "testObjBezierCurveWeld", "expObjBezierCurveWeld", + [ModifierSpec('weld', 'WELD', {})]), + + MeshTest("CurveWeld2", "testObjBezierCurveWeld2", "expObjBezierCurveWeld2", + [ModifierSpec('weld', 'WELD', {})]), + + ############################################# + # Curves Deform Modifiers + ############################################# + # Test 62 + MeshTest("CurveCast", "testObjBezierCurveCast", "expObjBezierCurveCast", + [ModifierSpec('Cast', 'CAST', {'cast_type': 'CYLINDER', 'factor': 10})]), + + MeshTest("CurveShrinkWrap", "testObjBezierCurveShrinkWrap", "expObjBezierCurveShrinkWrap", + [ModifierSpec('ShrinkWrap', 'SHRINKWRAP', + {'target': bpy.data.objects['testShrinkWrapHelperSuzanne']})]), + + MeshTest("CurveSimpleDeform", "testObjBezierCurveSimpleDeform", "expObjBezierCurveSimpleDeform", + [ModifierSpec('simple_deform', 'SIMPLE_DEFORM', {'angle': math.radians(90)})]), - ["testBalloonLaplacianSmooth", "expectedBalloonLaplacianSmooth", - [ModifierSpec('laplaciansmooth', 'LAPLACIANSMOOTH', {'lambda_factor': 12, 'lambda_border': 12})]], + MeshTest("CurveSmooth", "testObjBezierCurveSmooth", "expObjBezierCurveSmooth", + [ModifierSpec('smooth', 'SMOOTH', {'factor': 10})]), - # Surface Deform and Warp requires user input, so skip. + MeshTest("CurveWave", "testObjBezierCurveWave", "expObjBezierCurveWave", + [ModifierSpec('curve_wave', 'WAVE', {'time_offset': -1.5})]), - # Wave - requires complex mesh, so skip. + MeshTest("CurveCurve", "testObjBezierCurveCurve", "expObjBezierCurveCurve", + [ModifierSpec('curve_Curve', 'CURVE', {'object': bpy.data.objects['NurbsCurve']})]), ] - modifiers_test = ModifierTest(tests) + modifiers_test = RunTest(tests) command = list(sys.argv) for i, cmd in enumerate(command): if cmd == "--run-all-tests": modifiers_test.apply_modifiers = True + modifiers_test.do_compare = True modifiers_test.run_all_tests() break elif cmd == "--run-test": modifiers_test.apply_modifiers = False - index = int(command[i + 1]) - modifiers_test.run_test(index) + modifiers_test.do_compare = False + name = command[i + 1] + modifiers_test.run_test(name) break -- cgit v1.2.3