[Bf-blender-cvs] [a7d2ca5064e] soc-2020-testing-frameworks: Post Review: Added DeformModifierTest class to run Deform Tests by name, added run test by name for Modifers and Operators, removed deform flag, modifier is applied separately

calra123 noreply at git.blender.org
Mon Jul 13 20:40:40 CEST 2020


Commit: a7d2ca5064e449747c1ad0b02037d6bf527c0d61
Author: calra123
Date:   Sun Jul 12 01:25:59 2020 +0530
Branches: soc-2020-testing-frameworks
https://developer.blender.org/rBa7d2ca5064e449747c1ad0b02037d6bf527c0d61

Post Review: Added DeformModifierTest class to run Deform Tests by name, added run test by name for Modifers and Operators, removed deform flag, modifier is applied separately

===================================================================

M	tests/python/deform_modifiers.py
M	tests/python/modifiers.py
M	tests/python/modules/mesh_test.py

===================================================================

diff --git a/tests/python/deform_modifiers.py b/tests/python/deform_modifiers.py
index d0277f4b498..03e0b4105b3 100644
--- a/tests/python/deform_modifiers.py
+++ b/tests/python/deform_modifiers.py
@@ -3,7 +3,7 @@ import sys
 import bpy
 
 sys.path.append(os.path.dirname(os.path.realpath(__file__)))
-from modules.mesh_test import MeshTest, ModifierSpec, ObjectOperatorSpec, DeformModifierSpec
+from modules.mesh_test import MeshTest, ModifierSpec, ObjectOperatorSpec, DeformModifierSpec, DeformModifierTest
 
 tests = [
 
@@ -12,7 +12,7 @@ tests = [
 
     MeshTest("SurfaceDeform", "testObjMonkeySurfaceDeform", "expObjMonkeySurfaceDeform",
              [DeformModifierSpec(10, [ModifierSpec('surface_deform', 'SURFACE_DEFORM', {'target': bpy.data.objects["Cube"]})],
-              ObjectOperatorSpec('surfacedeform_bind', {'modifier': 'surface_deform'}))], True, True),
+              ObjectOperatorSpec('surfacedeform_bind', {'modifier': 'surface_deform'}))]),
 
     # Mesh Deform Test, finally can bind to the Target object.
     # Actual deformation occurs by animating imitating user input.
@@ -20,7 +20,7 @@ tests = [
     MeshTest("MeshDeform", "testObjMonkeyMeshDeform", "expObjMonkeyMeshDeform",
              [DeformModifierSpec(10, [ModifierSpec('mesh_deform', 'MESH_DEFORM', {'object': bpy.data.objects["MeshCube"],
                                                                                  'precision': 2})],
-                                 ObjectOperatorSpec('meshdeform_bind', {'modifier': 'mesh_deform'}))], True, True),
+                                 ObjectOperatorSpec('meshdeform_bind', {'modifier': 'mesh_deform'}))]),
 
 
     # Surface Deform Test, finally can bind to the Target object.
@@ -29,7 +29,7 @@ tests = [
     MeshTest("Hook", "testObjHookPlane", "expObjHookPlane",
              [DeformModifierSpec(10, [ModifierSpec('hook', 'HOOK',
                                                   {'object': bpy.data.objects["Empty"], 'falloff_radius': 1,
-                                                   'vertex_group': 'Group'})])], True, True),
+                                                   'vertex_group': 'Group'})])]),
 
 
     # Laplacian Deform Test, first a hook is attached.
@@ -39,20 +39,27 @@ tests = [
                                  [ModifierSpec('hook2', 'HOOK', {'object': bpy.data.objects["Empty.001"],
                                                                 'vertex_group': 'hook_vg'}),
                                  ModifierSpec('laplace', 'LAPLACIANDEFORM', {'vertex_group': 'laplace_vg'})],
-                                 ObjectOperatorSpec('laplaciandeform_bind', {'modifier':'laplace'}))], True, True),
+                                 ObjectOperatorSpec('laplaciandeform_bind', {'modifier':'laplace'}))]),
 
 
     MeshTest("WarpPlane", "testObjPlaneWarp", "expObjPlaneWarp",
              [DeformModifierSpec(10, [ModifierSpec('warp', 'WARP',
                                                    {'object_from': bpy.data.objects["From"], 'object_to': bpy.data.objects["To"],
-                                                    })])], True, True),
+                                                    })])]),
 
 
 
 ]
+
+deform_tests = DeformModifierTest(tests)
 command = list(sys.argv)
 for i, cmd in enumerate(command):
     if cmd == "--run-all-tests":
-        for mesh_test in tests:
-            mesh_test.run_test()
+        deform_tests.apply_modifiers = True
+        deform_tests.run_all_tests()
+        break
+    elif cmd == "--run-test":
+        deform_tests.apply_modifiers = False
+        name = str(command[i + 1])
+        deform_tests.run_test(name)
         break
diff --git a/tests/python/modifiers.py b/tests/python/modifiers.py
index ee68b9d385e..f0b2ef77c37 100644
--- a/tests/python/modifiers.py
+++ b/tests/python/modifiers.py
@@ -278,8 +278,8 @@ def main():
             break
         elif cmd == "--run-test":
             modifiers_test.apply_modifiers = False
-            index = int(command[i + 1])
-            modifiers_test.run_test(index)
+            name = str(command[i + 1])
+            modifiers_test.run_test(name)
             break
 
 
diff --git a/tests/python/modules/mesh_test.py b/tests/python/modules/mesh_test.py
index b7686e78fe6..d8c81396f41 100644
--- a/tests/python/modules/mesh_test.py
+++ b/tests/python/modules/mesh_test.py
@@ -165,7 +165,7 @@ class MeshTest:
     the public method run_test().
     """
 
-    def __init__(self, test_name: str, test_object_name: str, expected_object_name: str, operations_stack=None, apply_modifiers=False, apply_object_operator=False, threshold=None):
+    def __init__(self, test_name: str, test_object_name: str, expected_object_name: str, operations_stack=None, apply_modifiers=False, threshold=None):
         """
         Constructs a MeshTest object. Raises a KeyError if objects with names expected_object_name
         or test_object_name don't exist.
@@ -174,7 +174,7 @@ class MeshTest:
                                 geometry after running the operations.
         :param operations_stack: list - stack holding operations to perform on the test_object.
         :param apply_modifier: bool - True if we want to apply the modifiers right after adding them to the object.
-                               This affects operations of type ModifierSpec only.
+                               This affects operations of type ModifierSpec and DeformModifierSpec.
         :param test_name: str - unique test name identifier.
         """
         if operations_stack is None:
@@ -188,7 +188,6 @@ class MeshTest:
                                         type(operation)))
         self.operations_stack = operations_stack
         self.apply_modifier = apply_modifiers
-        self.apply_object_operator = apply_object_operator
         self.threshold = threshold
         self.test_name = test_name
 
@@ -298,13 +297,6 @@ class MeshTest:
                 raise AttributeError("Modifier '{}' has no parameter named '{}'".
                                      format(modifier_spec.modifier_type, param_name))
 
-        if self.apply_modifier:
-            if not self.apply_object_operator:
-                self._apply_modifier(modifier_spec.modifier_name)
-
-    def _apply_modifier(self, modifier_name):
-        bpy.ops.object.modifier_apply(modifier=modifier_name)
-
     def _bake_current_simulation(self, obj, test_mod_type, test_mod_name, frame_end):
         for scene in bpy.data.scenes:
             for modifier in obj.modifiers:
@@ -386,7 +378,7 @@ class MeshTest:
 
     def _apply_object_operator(self, operator: ObjectOperatorSpec):
         """
-        Applies the operator of the modifier.
+        Applies the object operator.
         """
         bpy.ops.object.mode_set(mode='OBJECT')
         object_operator = getattr(bpy.ops.object, operator.operator_name)
@@ -395,11 +387,6 @@ class MeshTest:
         if not object_operator:
             raise AttributeError("No object operator {} found!".format(operator.operator_name))
 
-        # # Modifier name should be passed to the "modifier_apply" function,
-        # # since this is an operator of the modifier itself, the parameters are the same.
-        # if self.apply_object_operator:
-        #     bpy.ops.object.modifier_apply(**operator.operator_parameters)
-
         if retval != {'FINISHED'}:
             raise RuntimeError("Unexpected operator return value: {}".format(retval))
         if self.verbose:
@@ -424,9 +411,10 @@ class MeshTest:
         print("NAME", list(test_object.modifiers))
 
         scene.frame_set(operation.frame_number)
-        if self.apply_object_operator:
+
+        if self.apply_modifier:
             for mod_name in modifier_names:
-                self._apply_modifier(mod_name)
+                bpy.ops.object.modifier_apply(modifier=mod_name)
 
     def run_test(self):
         """
@@ -447,12 +435,15 @@ class MeshTest:
         evaluated_test_object = bpy.context.active_object
         evaluated_test_object.name = "evaluated_object"
         if self.verbose:
+            print()
             print(evaluated_test_object.name, "is set to active")
 
         # Add modifiers and operators.
         for operation in self.operations_stack:
             if isinstance(operation, ModifierSpec):
                 self._add_modifier(evaluated_test_object, operation)
+                if self.apply_modifier:
+                    bpy.ops.object.modifier_apply(modifier=operation.modifier_name)
 
             elif isinstance(operation, OperatorSpec):
                 self._apply_operator(evaluated_test_object, operation)
@@ -547,13 +538,23 @@ class OperatorTest:
             else:
                 seen_name.add(ele)
 
-    def run_test(self, index: int):
+    def run_test(self, test_name: str):
         """
         Run a single test from operator_tests list
-        :param index: int - index of test
+        :param test_name: str - name of test
         :return: bool - True if test is successful. False otherwise.
         """
-        case = self.operator_tests[index]
+        case = self.operator_tests[0]
+        len_test = len(self.operator_tests)
+        count = 0
+        for index,_ in enumerate(self.operator_tests):
+            if test_name == self.operator_tests[index][2]:
+                case = self.operator_tests[index]
+                break
+            count = count + 1
+        if count == len_test:
+            raise Exception("No test {} found!".format(test_name))
+
         if len(case) != 7:
             raise ValueError("Expected exactly 7 parameters for each test case, got {}".format(len(case)))
         select_mode = case[0]
@@ -577,13 +578,14 @@ class OperatorTest:
 
     def run_all_tests(self):
         for index, _ in enumerate(self.operator_tests):
+            test_name = self.operator_tests[index][2]
             if self.verbose:
                 print()
                 print("Running test {}...".format(index))
-            success = self.run_test(index)
+            success = self.run_test(test_name)
 
             if not success:
-                self._failed_tests_list.append(index)
+                self._failed_tests_list.append(test_name)
 
         if len(s

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list