diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2018-02-22 23:16:39 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-02-22 23:16:39 +0300 |
commit | d7ba1ada8208f6f846b3705f5c6d9933261a625f (patch) | |
tree | 88ff991dbdb5dc9f5fb3f407e1ddd14c0b8b1f35 /tests/python/view_layer | |
parent | e7c4a9d1ef76f6edff95ca9f418a65fc42a453dc (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.txt | 1 | ||||
-rw-r--r-- | tests/python/view_layer/test_group_e.py | 72 |
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() |