Commit: 75c1016853f4a0e2938f7d5b1b374d6b5c6b380d
Author: calra123
Date:   Wed Aug 5 23:45:44 2020 +0530
Branches: soc-2020-testing-frameworks
https://developer.blender.org/rB75c1016853f4a0e2938f7d5b1b374d6b5c6b380d

Refactor 1: Traversing nested parameters using DFS

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

M       tests/python/modules/mesh_test.py
M       tests/python/physics_fluid.py

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

diff --git a/tests/python/modules/mesh_test.py 
b/tests/python/modules/mesh_test.py
index 4dc643ba6a3..c181b76c492 100644
--- a/tests/python/modules/mesh_test.py
+++ b/tests/python/modules/mesh_test.py
@@ -278,7 +278,7 @@ class MeshTest:
         """
         self.operations_stack.append(modifier_spec)
         if self.verbose:
-            print("Added modififier {}".format(modifier_spec))
+            print("Added modifier {}".format(modifier_spec))
 
     def add_operator(self, operator_spec: OperatorSpec):
         """
@@ -323,6 +323,43 @@ class MeshTest:
         """
         return self._test_updated
 
+    def _set_parameters_util(self, modifier, modifier_parameters, settings):
+        """
+        Doing a depth first traversal of the modifier parameters and setting 
their values.
+        """
+        if not isinstance(modifier_parameters, dict):
+            param_setting = None
+            for i, setting in enumerate(settings):
+                if i == len(settings)-1:
+                    setattr(modifier, setting, modifier_parameters)
+                else:
+                    try:
+                        param_setting = getattr(modifier, setting)
+                        modifier = param_setting
+                    except AttributeError:
+                        # Clean up first
+                        bpy.ops.object.delete()
+                        raise AttributeError("Modifier '{}' has no parameter 
named '{}'".
+                                             format(modifier.name, setting))
+
+                settings.pop()
+                return
+
+        for key in modifier_parameters:
+            settings.append(key)
+            self._set_parameters_util(modifier, modifier_parameters[key], 
settings)
+
+        if len(settings) != 0:
+            settings.pop()
+
+    def set_parameters(self, modifier, modifier_parameters):
+        """
+        Outer interface for _set_parameters_util
+        """
+        settings = []
+        modifier_copy = modifier
+        self._set_parameters_util(modifier_copy, modifier_parameters, settings)
+
     def _add_modifier(self, test_object, modifier_spec: ModifierSpec):
         """
         Add modifier to object and apply (if modifier_spec.apply_modifier is 
True)
@@ -335,17 +372,8 @@ class MeshTest:
             print("Created modifier '{}' of type '{}'.".
                   format(modifier_spec.modifier_name, 
modifier_spec.modifier_type))
 
-        for param_name in modifier_spec.modifier_parameters:
-            try:
-                setattr(modifier, param_name, 
modifier_spec.modifier_parameters[param_name])
-                if self.verbose:
-                    print("\t set parameter '{}' with value '{}'".
-                          format(param_name, 
modifier_spec.modifier_parameters[param_name]))
-            except AttributeError:
-                # Clean up first
-                bpy.ops.object.delete()
-                raise AttributeError("Modifier '{}' has no parameter named 
'{}'".
-                                     format(modifier_spec.modifier_type, 
param_name))
+        self.set_parameters(test_object.modifiers[modifier_spec.modifier_name],
+                                modifier_spec.modifier_parameters)
 
     def _apply_modifier(self, test_object, modifier_name):
         # Modifier automatically gets applied when converting from Curve to 
Mesh.
diff --git a/tests/python/physics_fluid.py b/tests/python/physics_fluid.py
index fc4829b425d..4ac2ff4e90f 100644
--- a/tests/python/physics_fluid.py
+++ b/tests/python/physics_fluid.py
@@ -24,15 +24,20 @@ import sys
 import bpy
 
 sys.path.append(os.path.dirname(os.path.realpath(__file__)))
-from modules.mesh_test import ModifierTest, FluidSpec
+from modules.mesh_test import ModifierTest, ModifierSpec
 
 
 def main():
     test = [
         #
+        # ["FluidLiquid", "test", "exp",
+        #  [FluidSpec('fluid_liquid', 'FLUID', 'DOMAIN', {'domain_type': 
'LIQUID', 'use_mesh': True, 'cache_type': 'ALL',
+        #                                        'cache_frame_end': 20}, 20)]],
+
         ["FluidLiquid", "test", "exp",
-         [FluidSpec('fluid_liquid', 'FLUID', 'DOMAIN', {'domain_type': 
'LIQUID', 'use_mesh': True, 'cache_type': 'ALL',
-                                               'cache_frame_end': 20}, 20)]],
+         [ModifierSpec('fluid_liquid', 'FLUID', {'fluid_type': 'DOMAIN', 
'domain_settings': {'domain_type': 'LIQUID', 'use_mesh': True, 'cache_type': 
'ALL',
+                                                                               
            'cache_frame_end': 20}})]],
+
     ]
     fluid_test = ModifierTest(test)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to