diff --git a/tests/python/render_layer/CMakeLists.txt b/tests/python/render_layer/CMakeLists.txt index a546bdbf741..962c1f7da36 100644 --- a/tests/python/render_layer/CMakeLists.txt +++ b/tests/python/render_layer/CMakeLists.txt @@ -69,6 +69,7 @@ RENDER_LAYER_TEST(evaluation_selectability_b) RENDER_LAYER_TEST(evaluation_selectability_c) RENDER_LAYER_TEST(evaluation_selectability_d) RENDER_LAYER_TEST(evaluation_selectability_e) +RENDER_LAYER_TEST(evaluation_selectability_f) RENDER_LAYER_TEST(object_add_cylinder) RENDER_LAYER_TEST(object_add_empty) RENDER_LAYER_TEST(object_add_torus) @@ -76,7 +77,8 @@ RENDER_LAYER_TEST(object_add_no_collection_cylinder) RENDER_LAYER_TEST(object_add_no_collection_empty) RENDER_LAYER_TEST(object_add_no_collection_torus) RENDER_LAYER_TEST(object_copy) -RENDER_LAYER_TEST(object_delete) +RENDER_LAYER_TEST(object_delete_a) +RENDER_LAYER_TEST(object_delete_b) RENDER_LAYER_TEST(object_link_a) RENDER_LAYER_TEST(object_link_b) RENDER_LAYER_TEST(object_link_c) diff --git a/tests/python/render_layer/render_layer_common.py b/tests/python/render_layer/render_layer_common.py index 5d4389482bb..abf0296a5c7 100644 --- a/tests/python/render_layer/render_layer_common.py +++ b/tests/python/render_layer/render_layer_common.py @@ -382,6 +382,67 @@ class RenderLayerTesting(unittest.TestCase): ), "Scene copy \"{0}\" test failed".format(copy_mode.title())) + def do_object_delete(self, del_mode): + import bpy + import os + import tempfile + import filecmp + + ROOT = self.get_root() + with tempfile.TemporaryDirectory() as dirpath: + filepath_layers = os.path.join(ROOT, 'layers.blend') + filepath_reference_json = os.path.join(ROOT, 'layers_object_delete.json') + + # open file + bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers) + self.rename_collections() + + # create sub-collections + three_b = bpy.data.objects.get('T.3b') + three_d = bpy.data.objects.get('T.3d') + + scene = bpy.context.scene + + # mangle the file a bit with some objects linked across collections + subzero = scene.master_collection.collections['1'].collections.new('sub-zero') + scorpion = subzero.collections.new('scorpion') + subzero.objects.link(three_d) + scorpion.objects.link(three_b) + scorpion.objects.link(three_d) + + # object to delete + ob = three_d + + # delete object + if del_mode == 'DATA': + bpy.data.objects.remove(ob, do_unlink=True) + + elif del_mode == 'OPERATOR': + bpy.context.scene.update() # update depsgraph + bpy.ops.object.select_all(action='DESELECT') + ob.select_set(action='SELECT') + self.assertTrue(ob.select_get()) + bpy.ops.object.delete() + + # save file + filepath_generated = os.path.join(dirpath, 'generated.blend') + bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_generated) + + # get the generated json + datas = query_scene(filepath_generated, 'Main', (get_scene_collections, get_layers)) + self.assertTrue(datas, "Data is not valid") + + filepath_generated_json = os.path.join(dirpath, "generated.json") + with open(filepath_generated_json, "w") as f: + for data in datas: + f.write(dump(data)) + + self.assertTrue(compare_files( + filepath_generated_json, + filepath_reference_json, + ), + "Scene dump files differ") + def cleanup_tree(self): """ Remove any existent layer and collections, diff --git a/tests/python/render_layer/test_evaluation_selectability_f.py b/tests/python/render_layer/test_evaluation_selectability_f.py new file mode 100644 index 00000000000..436f2f5dfc7 --- /dev/null +++ b/tests/python/render_layer/test_evaluation_selectability_f.py @@ -0,0 +1,48 @@ +# ############################################################ +# Importing - Same For All Render Layer Tests +# ############################################################ + +import unittest +import os +import sys + +sys.path.append(os.path.dirname(__file__)) +from render_layer_common import * + + +# ############################################################ +# Testing +# ############################################################ + +class UnitTesting(RenderLayerTesting): + def test_selectability(self): + import bpy + scene = bpy.context.scene + + cube = bpy.data.objects.new('guinea pig', bpy.data.meshes.new('mesh')) + scene_collection = scene.master_collection.collections.new('collection') + layer_collection = scene.render_layers.active.collections.link(scene_collection) + + bpy.context.scene.update() # update depsgraph + + scene_collection.objects.link(cube) + + self.assertFalse(layer_collection.hide) + self.assertFalse(layer_collection.hide_select) + + bpy.context.scene.update() # update depsgraph + cube.select_set(action='SELECT') + self.assertTrue(cube.select_get()) + +# ############################################################ +# 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() diff --git a/tests/python/render_layer/test_object_delete.py b/tests/python/render_layer/test_object_delete.py deleted file mode 100644 index 9b97c97c741..00000000000 --- a/tests/python/render_layer/test_object_delete.py +++ /dev/null @@ -1,103 +0,0 @@ -# ############################################################ -# Importing - Same For All Render Layer Tests -# ############################################################ - -import unittest -import os -import sys - -sys.path.append(os.path.dirname(__file__)) -from render_layer_common import * - - -# ############################################################ -# Testing -# ############################################################ - -class UnitTesting(RenderLayerTesting): - def do_object_delete(self, del_mode): - import bpy - import os - import tempfile - import filecmp - - ROOT = self.get_root() - with tempfile.TemporaryDirectory() as dirpath: - filepath_layers = os.path.join(ROOT, 'layers.blend') - filepath_reference_json = os.path.join(ROOT, 'layers_object_delete.json') - - # open file - bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath_layers) - self.rename_collections() - - # create sub-collections - three_b = bpy.data.objects.get('T.3b') - three_d = bpy.data.objects.get('T.3d') - - scene = bpy.context.scene - - # mangle the file a bit with some objects linked across collections - subzero = scene.master_collection.collections['1'].collections.new('sub-zero') - scorpion = subzero.collections.new('scorpion') - subzero.objects.link(three_d) - scorpion.objects.link(three_b) - scorpion.objects.link(three_d) - - # object to delete - ob = three_d - - # delete object - if del_mode == 'DATA': - bpy.data.objects.remove(ob, do_unlink=True) - - elif del_mode == 'OPERATOR': - bpy.ops.object.select_all(action='DESELECT') - ob.select_set(action='SELECT') - bpy.ops.object.delete() - - # save file - filepath_generated = os.path.join(dirpath, 'generated.blend') - bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath_generated) - - # get the generated json - datas = query_scene(filepath_generated, 'Main', (get_scene_collections, get_layers)) - self.assertTrue(datas, "Data is not valid") - - filepath_generated_json = os.path.join(dirpath, "generated.json") - with open(filepath_generated_json, "w") as f: - for data in datas: - f.write(dump(data)) - - self.assertTrue(compare_files( - filepath_generated_json, - filepath_reference_json, - ), - "Scene dump files differ") - - def test_object_delete_data(self): - """ - See if objects are removed correctly from all related collections - bpy.data.objects.remove() - """ - self.do_object_delete('DATA') - - def test_object_delete_operator(self): - """ - See if new objects are added to the correct collection - bpy.ops.object.del() - """ - self.do_object_delete('OPERATOR') - - -# ############################################################ -# 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() diff --git a/tests/python/render_layer/test_object_delete_a.py b/tests/python/render_layer/test_object_delete_a.py new file mode 100644 index 00000000000..4a72ca06f46 --- /dev/null +++ b/tests/python/render_layer/test_object_delete_a.py @@ -0,0 +1,37 @@ +# ############################################################ +# Importing - Same For All Render Layer Tests +# ############################################################ + +import unittest +import os +import sys + +sys.path.append(os.path.dirname(__file__)) +from render_layer_common import * + + +# ############################################################ +# Testing +# ############################################################ + +class UnitTesting(RenderLayerTesting): + def test_object_delete_data(self): + """ + See if objects are removed correctly from all related collections + bpy.data.objects.remove() + """ + self.do_object_delete('DATA') + + +# ############################################################ +# 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() diff --git a/tests/python/render_layer/test_object_delete_b.py b/tests/python/render_layer/test_object_delete_b.py new file mode 100644 index 00000000000..f6451c4256c --- /dev/null +++ b/tests/python/render_layer/test_object_delete_b.py @@ -0,0 +1,37 @@ +# ############################################################ +# Importing - Same For All Render Layer Tests +# ############################################################ + +import unittest +import os +import sys + +sys.path.append(os.path.dirname(__file__)) +from render_layer_common import * + + +# ############################################################ +# Testing +# ############################################################ + +class UnitTesting(RenderLayerTesting): + def test_object_delete_operator(self): + """ + See if new objects are added to the correct collection + bpy.ops.object.del() + """ + self.do_object_delete('OPERATOR') + + +# ############################################################ +# 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()