Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2018-02-22 23:16:39 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-02-22 23:16:39 +0300
commitd7ba1ada8208f6f846b3705f5c6d9933261a625f (patch)
tree88ff991dbdb5dc9f5fb3f407e1ddd14c0b8b1f35 /tests/python/view_layer
parente7c4a9d1ef76f6edff95ca9f418a65fc42a453dc (diff)
Fix T54136: Crash when deleting an object that is in an instanced group
We were not cleaning up groups after deleting objects, leaving groups with Bases that had no object. It includes a unittest. Reviewers: mont29
Diffstat (limited to 'tests/python/view_layer')
-rw-r--r--tests/python/view_layer/CMakeLists.txt1
-rw-r--r--tests/python/view_layer/test_group_e.py72
2 files changed, 73 insertions, 0 deletions
diff --git a/tests/python/view_layer/CMakeLists.txt b/tests/python/view_layer/CMakeLists.txt
index cc5a3ba54b1..77a56fb47f9 100644
--- a/tests/python/view_layer/CMakeLists.txt
+++ b/tests/python/view_layer/CMakeLists.txt
@@ -94,6 +94,7 @@ VIEW_LAYER_TEST(group_a)
VIEW_LAYER_TEST(group_b)
VIEW_LAYER_TEST(group_c)
VIEW_LAYER_TEST(group_d)
+VIEW_LAYER_TEST(group_e)
VIEW_LAYER_TEST(object_add_cylinder)
VIEW_LAYER_TEST(object_add_empty)
VIEW_LAYER_TEST(object_add_torus)
diff --git a/tests/python/view_layer/test_group_e.py b/tests/python/view_layer/test_group_e.py
new file mode 100644
index 00000000000..566c043572e
--- /dev/null
+++ b/tests/python/view_layer/test_group_e.py
@@ -0,0 +1,72 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_delete_object(self):
+ """
+ See if we can safely remove instanced objects
+ """
+ import bpy
+ scene = bpy.context.scene
+ view_layer = bpy.context.view_layer
+ ob = bpy.context.object
+
+ # clean up the scene a bit
+ for o in (o for o in view_layer.objects if o != ob):
+ view_layer.collections[0].collection.objects.unlink(o)
+
+ for v in (v for v in scene.view_layers if v != view_layer):
+ scene.view_layers.remove(v)
+
+ # update depsgraph
+ scene.update()
+
+ # create group
+ group = bpy.data.groups.new("Switch")
+ group.objects.link(ob)
+
+ # update depsgraph
+ scene.update()
+
+ # instance the group
+ empty = bpy.data.objects.new("Empty", None)
+ bpy.context.scene_collection.objects.link(empty)
+ layer_collection = bpy.context.layer_collection
+ empty.dupli_type = 'GROUP'
+ empty.dupli_group = group
+
+ # prepare to delete the original object
+ # we could just pass an overridden context
+ # but let's do it the old fashion way
+ view_layer.objects.active = ob
+ ob.select_set('SELECT')
+ self.assertTrue(ob.select_get())
+ empty.select_set('DESELECT')
+ self.assertFalse(empty.select_get())
+
+ # update depsgraph
+ scene.update()
+
+ # delete the original object
+ bpy.ops.object.delete()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()