diff options
Diffstat (limited to 'tests/python/view_layer/test_operator_context.py')
-rw-r--r-- | tests/python/view_layer/test_operator_context.py | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/tests/python/view_layer/test_operator_context.py b/tests/python/view_layer/test_operator_context.py new file mode 100644 index 00000000000..d11666de118 --- /dev/null +++ b/tests/python/view_layer/test_operator_context.py @@ -0,0 +1,131 @@ +# ############################################################ +# Importing - Same For All Render Layer Tests +# ############################################################ + +import unittest +import os +import sys + +from view_layer_common import * + + +# ############################################################ +# Testing +# ############################################################ + +class UnitTesting(ViewLayerTesting): + def test_operator_context(self): + """ + See if view layer context is properly set/get with operators overrides + when we set view_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" + + view_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): + view_layer = context.view_layer + ret = {'FINISHED'} + + # this is simply playing safe + if view_layer.name != self.view_layer: + if self.use_verbose: + print('ERROR: Render Layer mismatch: "{0}" != "{1}"'.format( + view_layer.name, self.view_layer)) + ret = {'CANCELLED'} + + scene_collection_name = None + if self.scene_collection: + scene_collection_name = self.scene_collection + else: + scene_collection_name = view_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) + self.rename_collections() + + # 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.view_layers.new('Fresh new Layer') + layer.collections.unlink(layer.collections.active) + layer.collections.link(subzero) + layer.collections.active_index = 3 + self.assertEqual(layer.collections.active.name, 'scorpion') + + # Change active scene layer (do it for window too just to don't get mangled in window bugs) + scene = bpy.context.scene + bpy.context.window.view_layer = bpy.context.scene.view_layers['Viewport'] + + # old layer + self.assertEqual(bpy.ops.testing.sample(view_layer='Viewport', use_verbose=True), {'FINISHED'}) + + # expected to fail + self.assertTrue(bpy.ops.testing.sample(view_layer=layer.name), {'CANCELLED'}) + + # set view layer and scene collection + override = bpy.context.copy() + override["view_layer"] = layer + override["scene_collection"] = subzero + self.assertEqual(bpy.ops.testing.sample( + override, + view_layer=layer.name, + scene_collection=subzero.name, # 'sub-zero' + use_verbose=True), {'FINISHED'}) + + # set only view layer + override = bpy.context.copy() + override["view_layer"] = layer + + self.assertNotEqual(bpy.context.view_layer.name, layer.name) + self.assertNotEqual(bpy.context.scene_collection.name, layer.collections.active.name) + + self.assertEqual(bpy.ops.testing.sample( + override, + view_layer=layer.name, + scene_collection=layer.collections.active.name, # 'scorpion' + use_verbose=False), {'CANCELLED'}) + + +# ############################################################ +# Main - Same For All Render Layer Tests +# ############################################################ + +if __name__ == '__main__': + UnitTesting._extra_arguments = setup_extra_arguments(__file__) + unittest.main() |