[Bf-blender-cvs] [1020914980] render-layers: unittest: check context overriden passed to operator

Dalai Felinto noreply at git.blender.org
Fri Jan 6 19:14:11 CET 2017


Commit: 1020914980ad60459954b2a381177cbe847f5e83
Author: Dalai Felinto
Date:   Fri Jan 6 17:04:23 2017 +0100
Branches: render-layers
https://developer.blender.org/rB1020914980ad60459954b2a381177cbe847f5e83

unittest: check context overriden passed to operator

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

M	tests/python/bl_render_layer.py

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

diff --git a/tests/python/bl_render_layer.py b/tests/python/bl_render_layer.py
index 5744e1d5d3..96ef5b5402 100644
--- a/tests/python/bl_render_layer.py
+++ b/tests/python/bl_render_layer.py
@@ -755,6 +755,102 @@ class UnitsTesting(unittest.TestCase):
         master_collection = bpy.context.scene_collection
         self.do_link(master_collection)
 
+    def test_operator_context(self):
+        """
+        See if render layer context is properly set/get with operators overrides
+        when we set render_layer in context, the collection should change as well
+        """
+        import bpy
+        import os
+
+        class SampleOperator(bpy.types.Operator):
+            bl_idname = "testing.sample"
+            bl_label = "Sample Operator"
+
+            render_layer = bpy.props.StringProperty(
+                    default="Not Set",
+                    options={'SKIP_SAVE'},
+                    )
+
+            scene_collection = bpy.props.StringProperty(
+                    default="",
+                    options={'SKIP_SAVE'},
+                    )
+
+            use_verbose = bpy.props.BoolProperty(
+                    default=False,
+                    options={'SKIP_SAVE'},
+                    )
+
+            def execute(self, context):
+                render_layer = context.render_layer
+                ret = {'FINISHED'}
+
+                # this is simply playing safe
+                if render_layer.name != self.render_layer:
+                    if self.use_verbose:
+                        print('ERROR: Render Layer mismatch: "{0}" != "{1}"'.format(
+                            render_layer.name, self.render_layer))
+                    ret = {'CANCELLED'}
+
+                scene_collection_name = None
+                if self.scene_collection:
+                    scene_collection_name = self.scene_collection
+                else:
+                    scene_collection_name = render_layer.collections.active.name
+
+                # while this is the real test
+                if context.scene_collection.name != scene_collection_name:
+                    if self.use_verbose:
+                        print('ERROR: Scene Collection mismatch: "{0}" != "{1}"'.format(
+                            context.scene_collection.name, scene_collection_name))
+                    ret = {'CANCELLED'}
+                return ret
+
+        bpy.utils.register_class(SampleOperator)
+
+        # open sample file
+        ROOT = self.get_root()
+        filepath_layers = os.path.join(ROOT, 'layers.blend')
+        bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers)
+
+        # change the file
+        three_b = bpy.data.objects.get('T.3b')
+        three_c = bpy.data.objects.get('T.3c')
+        scene = bpy.context.scene
+        subzero = scene.master_collection.collections['1'].collections.new('sub-zero')
+        scorpion = subzero.collections.new('scorpion')
+        subzero.objects.link(three_b)
+        scorpion.objects.link(three_c)
+        layer = scene.render_layers.new('Fresh new Layer')
+        layer.collections.link(subzero)
+        layer.collections.active_index = 3
+        self.assertEqual(layer.collections.active.name, 'scorpion')
+
+        # old layer
+        self.assertEqual(bpy.ops.testing.sample(render_layer='Render Layer', use_verbose=True), {'FINISHED'})
+
+        # expected to fail
+        self.assertTrue(bpy.ops.testing.sample(render_layer=layer.name), {'CANCELLED'})
+
+        # set render layer and scene collection
+        override = bpy.context.copy()
+        override["render_layer"] = layer
+        override["scene_collection"] = subzero
+        self.assertEqual(bpy.ops.testing.sample(override,
+            render_layer=layer.name,
+            scene_collection=subzero.name, # 'sub-zero'
+            use_verbose=True), {'FINISHED'})
+
+        # set only render layer
+        override = bpy.context.copy()
+        override["render_layer"] = layer
+
+        self.assertEqual(bpy.ops.testing.sample(override,
+            render_layer=layer.name,
+            scene_collection=layer.collections.active.name, # 'scorpion'
+            use_verbose=True), {'FINISHED'})
+
     def do_object_add(self, filepath_json, add_mode):
         import bpy
         import os




More information about the Bf-blender-cvs mailing list