From 07de8eff774dbb312039133d38b28ade5ab8093d Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Tue, 2 Jan 2018 18:19:25 -0200 Subject: Layers/Collections: Fix crash when deleting collection If the collection to be deleted has a nested collection that is directly linked to a view layer, we were getting a crash. --- tests/python/view_layer/CMakeLists.txt | 1 + .../view_layer/test_scene_collection_delete.py | 54 ++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 tests/python/view_layer/test_scene_collection_delete.py (limited to 'tests/python/view_layer') diff --git a/tests/python/view_layer/CMakeLists.txt b/tests/python/view_layer/CMakeLists.txt index 1c0648afead..eaaf25b3889 100644 --- a/tests/python/view_layer/CMakeLists.txt +++ b/tests/python/view_layer/CMakeLists.txt @@ -170,6 +170,7 @@ VIEW_LAYER_TEST(move_into_layer_collection_i) VIEW_LAYER_TEST(move_into_layer_collection_j) VIEW_LAYER_TEST(layer_linking) VIEW_LAYER_TEST(layer_syncing) +VIEW_LAYER_TEST(scene_collection_delete) VIEW_LAYER_TEST(scene_copy_a) VIEW_LAYER_TEST(scene_copy_b) VIEW_LAYER_TEST(scene_copy_c) diff --git a/tests/python/view_layer/test_scene_collection_delete.py b/tests/python/view_layer/test_scene_collection_delete.py new file mode 100644 index 00000000000..3f917e5a35c --- /dev/null +++ b/tests/python/view_layer/test_scene_collection_delete.py @@ -0,0 +1,54 @@ +# ############################################################ +# Importing - Same For All Render Layer Tests +# ############################################################ + +import unittest +import os +import sys + +from view_layer_common import * + + +# ############################################################ +# Testing +# ############################################################ + +class UnitTesting(ViewLayerTesting): + def test_scene_collection_delete(self): + """ + See if a scene collection can be properly deleted even + when linked + """ + import bpy + + # delete all initial objects + while bpy.data.objects: + bpy.data.objects.remove(bpy.data.objects[0]) + + # delete all initial collections + scene = bpy.context.scene + master_collection = scene.master_collection + while master_collection.collections: + master_collection.collections.remove(master_collection.collections[0]) + + collection_parent = master_collection.collections.new('parent') + collection_nested = collection_parent.collections.new('child linked') + bpy.context.view_layer.collections.link(collection_nested) + master_collection.collections.remove(collection_parent) + + # Update depsgraph. + scene.update() + + +# ############################################################ +# Main - Same For All Render Layer Tests +# ############################################################ + +if __name__ == '__main__': + import sys + + extra_arguments = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [] + sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 2:] if "--" in sys.argv else []) + + UnitTesting._extra_arguments = extra_arguments + unittest.main() -- cgit v1.2.3