diff options
author | Michael Kowalski <makowalski@nvidia.com> | 2022-09-23 23:56:14 +0300 |
---|---|---|
committer | Michael Kowalski <makowalski@nvidia.com> | 2022-09-23 23:56:14 +0300 |
commit | b2ad97ba97f3e55d1dd463e29ca0b2ec6fe761e1 (patch) | |
tree | f94394835c6b731e4e379f4ef48fb78b4af4b9ca /tests | |
parent | b31807c75f0c18c43ac6979e6da57dc9d420167a (diff) | |
parent | 7e980f2b8cb96aa6d04dc72899d08473367eeeb9 (diff) |
Merge branch 'master' into tmp-usd-alab-v2-T100452tmp-usd-alab-v2-T100452
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 13 | ||||
-rw-r--r-- | tests/blender_as_python_module/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tests/blender_as_python_module/import_bpy.py | 4 | ||||
-rw-r--r-- | tests/gtests/runner/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tests/python/CMakeLists.txt | 16 | ||||
-rw-r--r-- | tests/python/bl_blendfile_io.py | 4 | ||||
-rw-r--r-- | tests/python/bl_blendfile_liblink.py | 264 | ||||
-rw-r--r-- | tests/python/bl_blendfile_library_overrides.py | 140 | ||||
-rw-r--r-- | tests/python/bl_keymap_validate.py | 2 | ||||
-rw-r--r-- | tests/python/bl_load_addons.py | 6 | ||||
-rw-r--r-- | tests/python/bl_load_py_modules.py | 2 | ||||
-rw-r--r-- | tests/python/bl_mesh_modifiers.py | 6 | ||||
-rw-r--r-- | tests/python/bl_pyapi_idprop.py | 2 | ||||
-rw-r--r-- | tests/python/bl_rna_manual_reference.py | 8 | ||||
-rw-r--r-- | tests/python/bl_run_operators_event_simulate.py | 2 | ||||
-rw-r--r-- | tests/python/collada/CMakeLists.txt | 4 | ||||
-rw-r--r-- | tests/python/modifiers.py | 10 | ||||
-rw-r--r-- | tests/python/modules/mesh_test.py | 96 | ||||
-rwxr-xr-x | tests/python/modules/test_utils.py | 4 | ||||
-rw-r--r-- | tests/python/view_layer/CMakeLists.txt | 254 |
20 files changed, 419 insertions, 422 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 484ffd17046..68fcfc89b96 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,39 +5,30 @@ # # Getting the install path of the executable is somewhat involved, as there are # no direct CMake generator expressions to get the install paths of executables. -get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(GENERATOR_IS_MULTI_CONFIG) - string(REPLACE "\${BUILD_TYPE}" "$<CONFIG>" TEST_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) -else() - string(REPLACE "\${BUILD_TYPE}" "" TEST_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) -endif() +set(TEST_INSTALL_DIR ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}) # Path to Blender and Python executables for all platforms. if(MSVC) set(TEST_BLENDER_EXE ${TEST_INSTALL_DIR}/blender.exe) - set(_default_test_python_exe "${TEST_INSTALL_DIR}/${BLENDER_VERSION_MAJOR}.${BLENDER_VERSION_MINOR}/python/bin/python$<$<CONFIG:Debug>:_d>") elseif(APPLE) set(TEST_BLENDER_EXE ${TEST_INSTALL_DIR}/Blender.app/Contents/MacOS/Blender) - set(_default_test_python_exe ${PYTHON_EXECUTABLE}) else() if(WITH_INSTALL_PORTABLE) set(TEST_BLENDER_EXE ${TEST_INSTALL_DIR}/blender) else() set(TEST_BLENDER_EXE ${TEST_INSTALL_DIR}/bin/blender) endif() - set(_default_test_python_exe ${PYTHON_EXECUTABLE}) endif() # The installation directory's Python is the best one to use. However, it can only be there after the install step, # which means that Python will never be there on a fresh system. To suit different needs, the user can pass # -DTEST_PYTHON_EXE=/path/to/python to CMake. if(NOT TEST_PYTHON_EXE) - set(TEST_PYTHON_EXE ${_default_test_python_exe}) + set(TEST_PYTHON_EXE ${PYTHON_EXECUTABLE}) message(STATUS "Tests: Using Python executable: ${TEST_PYTHON_EXE}") elseif(NOT EXISTS ${TEST_PYTHON_EXE}) message(FATAL_ERROR "Tests: TEST_PYTHON_EXE ${TEST_PYTHON_EXE} does not exist") endif() -unset(_default_test_python_exe) # For testing with Valgrind diff --git a/tests/blender_as_python_module/CMakeLists.txt b/tests/blender_as_python_module/CMakeLists.txt index 334b3288246..4f6cf0adfdb 100644 --- a/tests/blender_as_python_module/CMakeLists.txt +++ b/tests/blender_as_python_module/CMakeLists.txt @@ -12,4 +12,4 @@ function(add_blender_as_python_module_test testname testscript) ) endfunction() -add_blender_as_python_module_test(import_bpy ${CMAKE_CURRENT_LIST_DIR}/import_bpy.py) +add_blender_as_python_module_test(import_bpy ${CMAKE_CURRENT_LIST_DIR}/import_bpy.py ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}) diff --git a/tests/blender_as_python_module/import_bpy.py b/tests/blender_as_python_module/import_bpy.py index ea75c0f2fe6..223ed998707 100644 --- a/tests/blender_as_python_module/import_bpy.py +++ b/tests/blender_as_python_module/import_bpy.py @@ -1,4 +1,8 @@ # SPDX-License-Identifier: GPL-2.0-or-later +# Add directory with module to the path. +import sys +sys.path.append(sys.argv[1]) + # Just import bpy and see if there are any dynamic loader errors. import bpy diff --git a/tests/gtests/runner/CMakeLists.txt b/tests/gtests/runner/CMakeLists.txt index 97b95851be8..be0aa65d409 100644 --- a/tests/gtests/runner/CMakeLists.txt +++ b/tests/gtests/runner/CMakeLists.txt @@ -27,7 +27,7 @@ else() endif() # This builds `bin/tests/blender_test`, but does not add it as a single test. -BLENDER_SRC_GTEST_EX( +blender_src_gtest_ex( NAME blender SRC "${SRC}" EXTRA_LIBS "${TEST_LIBS}" diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index ca3070b60ad..27473061304 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -632,13 +632,13 @@ endif() if(WITH_CYCLES OR WITH_OPENGL_RENDER_TESTS) if(NOT OPENIMAGEIO_IDIFF) - MESSAGE(WARNING "Disabling render tests because OIIO idiff does not exist") + message(WARNING "Disabling render tests because OIIO idiff does not exist") elseif(NOT EXISTS "${TEST_SRC_DIR}/render/shader") - MESSAGE(WARNING "Disabling render tests because tests folder does not exist at ${TEST_SRC_DIR}") + message(WARNING "Disabling render tests because tests folder does not exist at ${TEST_SRC_DIR}") elseif(NOT WITH_COMPOSITOR_CPU) - MESSAGE(WARNING "Disabling render tests because WITH_COMPOSITOR_CPU is disabled") + message(WARNING "Disabling render tests because WITH_COMPOSITOR_CPU is disabled") elseif(NOT WITH_OPENCOLORIO) - MESSAGE(WARNING "Disabling render tests because WITH_OPENCOLORIO is disabled") + message(WARNING "Disabling render tests because WITH_OPENCOLORIO is disabled") else() set(render_tests camera @@ -801,15 +801,15 @@ foreach(geo_node_test ${geo_node_tests}) ) endforeach() else() - MESSAGE(STATUS "Directory named ${TEST_SRC_DIR}/modeling/geometry_nodes/${geo_node_test}/ Not Found, disabling test.") + message(STATUS "Directory named ${TEST_SRC_DIR}/modeling/geometry_nodes/${geo_node_test}/ Not Found, disabling test.") endif() endforeach() if(WITH_OPENGL_DRAW_TESTS) if(NOT OPENIMAGEIO_IDIFF) - MESSAGE(STATUS "Disabling OpenGL draw tests because OIIO idiff does not exist") + message(STATUS "Disabling OpenGL draw tests because OIIO idiff does not exist") elseif(NOT EXISTS "${TEST_SRC_DIR}/opengl") - MESSAGE(STATUS "Disabling OpenGL draw tests because tests folder does not exist at ${TEST_SRC_DIR}") + message(STATUS "Disabling OpenGL draw tests because tests folder does not exist at ${TEST_SRC_DIR}") else() # Use all subdirectories of opengl folder. file(GLOB children RELATIVE ${TEST_SRC_DIR}/opengl ${TEST_SRC_DIR}/opengl/*) @@ -881,7 +881,7 @@ endif() # SEQUENCER RENDER TESTS if(NOT OPENIMAGEIO_IDIFF) - MESSAGE(STATUS "Disabling sequencer render tests because OIIO idiff does not exist") + message(STATUS "Disabling sequencer render tests because OIIO idiff does not exist") else() set(render_tests transform diff --git a/tests/python/bl_blendfile_io.py b/tests/python/bl_blendfile_io.py index f79ee2a240b..fa63b789751 100644 --- a/tests/python/bl_blendfile_io.py +++ b/tests/python/bl_blendfile_io.py @@ -33,7 +33,7 @@ class TestBlendFileSaveLoadBasic(TestHelper): read_data = self.blender_data_to_tuple(bpy.data, "read_data 1") # We have orphaned data, which should be removed by file reading, so there should not be equality here. - assert(orig_data != read_data) + assert orig_data != read_data bpy.data.orphans_purge() @@ -44,7 +44,7 @@ class TestBlendFileSaveLoadBasic(TestHelper): read_data = self.blender_data_to_tuple(bpy.data, "read_data 2") - assert(orig_data == read_data) + assert orig_data == read_data TESTS = ( diff --git a/tests/python/bl_blendfile_liblink.py b/tests/python/bl_blendfile_liblink.py index 120afba4911..a4ca845da4e 100644 --- a/tests/python/bl_blendfile_liblink.py +++ b/tests/python/bl_blendfile_liblink.py @@ -93,9 +93,9 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): link_dir = os.path.join(output_lib_path, "Mesh") bpy.ops.wm.link(directory=link_dir, filename="LibMesh", instance_object_data=False) - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 0) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 0 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here orig_data = self.blender_data_to_tuple(bpy.data, "orig_data") @@ -106,8 +106,8 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): read_data = self.blender_data_to_tuple(bpy.data, "read_data") # Since there is no usage of linked mesh, it is lost during save/reload. - assert(len(bpy.data.meshes) == 0) - assert(orig_data != read_data) + assert len(bpy.data.meshes) == 0 + assert orig_data != read_data # Simple link of a single ObData with obdata instantiation. self.reset_blender() @@ -115,9 +115,9 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): link_dir = os.path.join(output_lib_path, "Mesh") bpy.ops.wm.link(directory=link_dir, filename="LibMesh", instance_object_data=True) - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 1) # Instance created for the mesh ObData. - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 1 # Instance created for the mesh ObData. + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here orig_data = self.blender_data_to_tuple(bpy.data, "orig_data") @@ -126,7 +126,7 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): read_data = self.blender_data_to_tuple(bpy.data, "read_data") - assert(orig_data == read_data) + assert orig_data == read_data # Simple link of a single Object. self.reset_blender() @@ -134,9 +134,9 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): link_dir = os.path.join(output_lib_path, "Object") bpy.ops.wm.link(directory=link_dir, filename="LibMesh") - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 1) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 1 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here orig_data = self.blender_data_to_tuple(bpy.data, "orig_data") @@ -145,7 +145,7 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): read_data = self.blender_data_to_tuple(bpy.data, "read_data") - assert(orig_data == read_data) + assert orig_data == read_data # Simple link of a single Collection, with Empty-instantiation. self.reset_blender() @@ -153,9 +153,9 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): link_dir = os.path.join(output_lib_path, "Collection") bpy.ops.wm.link(directory=link_dir, filename="LibMesh", instance_collections=True) - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 2) # linked object and local empty instancing the collection - assert(len(bpy.data.collections) == 1) # Scene's master collection is not listed here + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 2 # linked object and local empty instancing the collection + assert len(bpy.data.collections) == 1 # Scene's master collection is not listed here orig_data = self.blender_data_to_tuple(bpy.data, "orig_data") @@ -164,7 +164,7 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): read_data = self.blender_data_to_tuple(bpy.data, "read_data") - assert(orig_data == read_data) + assert orig_data == read_data # Simple link of a single Collection, with ViewLayer-instantiation. self.reset_blender() @@ -172,11 +172,11 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): link_dir = os.path.join(output_lib_path, "Collection") bpy.ops.wm.link(directory=link_dir, filename="LibMesh", instance_collections=False) - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 1) - assert(len(bpy.data.collections) == 1) # Scene's master collection is not listed here + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 1 + assert len(bpy.data.collections) == 1 # Scene's master collection is not listed here # Linked collection should have been added to the scene's master collection children. - assert(bpy.data.collections[0] in set(bpy.data.scenes[0].collection.children)) + assert bpy.data.collections[0] in set(bpy.data.scenes[0].collection.children) orig_data = self.blender_data_to_tuple(bpy.data, "orig_data") @@ -185,7 +185,7 @@ class TestBlendLibLinkSaveLoadBasic(TestBlendLibLinkHelper): read_data = self.blender_data_to_tuple(bpy.data, "read_data") - assert(orig_data == read_data) + assert orig_data == read_data class TestBlendLibAppendBasic(TestBlendLibLinkHelper): @@ -211,15 +211,15 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper): bpy.data.materials[0].use_fake_user, ) - assert(len(bpy.data.materials) == 1) - assert(bpy.data.materials[0].library is not None) - assert(bpy.data.materials[0].users == 2) # Fake user is not cleared when linking. - assert(len(bpy.data.meshes) == 1) - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].use_fake_user is False) - assert(bpy.data.meshes[0].users == 0) - assert(len(bpy.data.objects) == 0) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.materials) == 1 + assert bpy.data.materials[0].library is not None + assert bpy.data.materials[0].users == 2 # Fake user is not cleared when linking. + assert len(bpy.data.meshes) == 1 + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].use_fake_user is False + assert bpy.data.meshes[0].users == 0 + assert len(bpy.data.objects) == 0 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here # Simple append of a single ObData with obdata instantiation. self.reset_blender() @@ -228,16 +228,16 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper): bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=True, set_fake=False, use_recursive=False, do_reuse_local_id=False) - assert(len(bpy.data.materials) == 1) - assert(bpy.data.materials[0].library is not None) - assert(bpy.data.materials[0].users == 2) # Fake user is not cleared when linking. - assert(len(bpy.data.meshes) == 1) - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].use_fake_user is False) - assert(bpy.data.meshes[0].users == 1) - assert(len(bpy.data.objects) == 1) # Instance created for the mesh ObData. - assert(bpy.data.objects[0].library is None) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.materials) == 1 + assert bpy.data.materials[0].library is not None + assert bpy.data.materials[0].users == 2 # Fake user is not cleared when linking. + assert len(bpy.data.meshes) == 1 + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].use_fake_user is False + assert bpy.data.meshes[0].users == 1 + assert len(bpy.data.objects) == 1 # Instance created for the mesh ObData. + assert bpy.data.objects[0].library is None + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here # Simple append of a single ObData with fake user. self.reset_blender() @@ -246,15 +246,15 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper): bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=True, use_recursive=False, do_reuse_local_id=False) - assert(len(bpy.data.materials) == 1) - assert(bpy.data.materials[0].library is not None) - assert(bpy.data.materials[0].users == 2) # Fake user is not cleared when linking. - assert(len(bpy.data.meshes) == 1) - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].use_fake_user is True) - assert(bpy.data.meshes[0].users == 1) - assert(len(bpy.data.objects) == 0) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.materials) == 1 + assert bpy.data.materials[0].library is not None + assert bpy.data.materials[0].users == 2 # Fake user is not cleared when linking. + assert len(bpy.data.meshes) == 1 + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].use_fake_user is True + assert bpy.data.meshes[0].users == 1 + assert len(bpy.data.objects) == 0 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here # Simple append of a single Object. self.reset_blender() @@ -263,16 +263,16 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper): bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=False, use_recursive=False, do_reuse_local_id=False) - assert(len(bpy.data.materials) == 1) - assert(bpy.data.materials[0].library is not None) - assert(bpy.data.materials[0].users == 2) # Fake user is not cleared when linking. - assert(len(bpy.data.meshes) == 1) - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].users == 1) - assert(len(bpy.data.objects) == 1) - assert(bpy.data.objects[0].library is None) - assert(bpy.data.objects[0].users == 1) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.materials) == 1 + assert bpy.data.materials[0].library is not None + assert bpy.data.materials[0].users == 2 # Fake user is not cleared when linking. + assert len(bpy.data.meshes) == 1 + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].users == 1 + assert len(bpy.data.objects) == 1 + assert bpy.data.objects[0].library is None + assert bpy.data.objects[0].users == 1 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here # Simple recursive append of a single Object. self.reset_blender() @@ -281,16 +281,16 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper): bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=False, use_recursive=True, do_reuse_local_id=False) - assert(len(bpy.data.materials) == 1) - assert(bpy.data.materials[0].library is None) - assert(bpy.data.materials[0].users == 1) # Fake user is cleared when appending. - assert(len(bpy.data.meshes) == 1) - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].users == 1) - assert(len(bpy.data.objects) == 1) - assert(bpy.data.objects[0].library is None) - assert(bpy.data.objects[0].users == 1) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.materials) == 1 + assert bpy.data.materials[0].library is None + assert bpy.data.materials[0].users == 1 # Fake user is cleared when appending. + assert len(bpy.data.meshes) == 1 + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].users == 1 + assert len(bpy.data.objects) == 1 + assert bpy.data.objects[0].library is None + assert bpy.data.objects[0].users == 1 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here # Simple recursive append of a single Collection. self.reset_blender() @@ -299,17 +299,17 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper): bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=False, use_recursive=True, do_reuse_local_id=False) - assert(len(bpy.data.materials) == 1) - assert(bpy.data.materials[0].library is None) - assert(bpy.data.materials[0].users == 1) # Fake user is cleared when appending. - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].users == 1) - assert(len(bpy.data.objects) == 1) - assert(bpy.data.objects[0].library is None) - assert(bpy.data.objects[0].users == 1) - assert(len(bpy.data.collections) == 1) # Scene's master collection is not listed here - assert(bpy.data.collections[0].library is None) - assert(bpy.data.collections[0].users == 1) + assert len(bpy.data.materials) == 1 + assert bpy.data.materials[0].library is None + assert bpy.data.materials[0].users == 1 # Fake user is cleared when appending. + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].users == 1 + assert len(bpy.data.objects) == 1 + assert bpy.data.objects[0].library is None + assert bpy.data.objects[0].users == 1 + assert len(bpy.data.collections) == 1 # Scene's master collection is not listed here + assert bpy.data.collections[0].library is None + assert bpy.data.collections[0].users == 1 class TestBlendLibAppendReuseID(TestBlendLibLinkHelper): @@ -328,51 +328,51 @@ class TestBlendLibAppendReuseID(TestBlendLibLinkHelper): bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=False, use_recursive=True, do_reuse_local_id=False) - assert(len(bpy.data.meshes) == 1) - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].use_fake_user is False) - assert(bpy.data.meshes[0].users == 1) - assert(bpy.data.meshes[0].library_weak_reference is not None) - assert(bpy.data.meshes[0].library_weak_reference.filepath == output_lib_path) - assert(bpy.data.meshes[0].library_weak_reference.id_name == "MELibMesh") - assert(len(bpy.data.objects) == 1) + assert len(bpy.data.meshes) == 1 + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].use_fake_user is False + assert bpy.data.meshes[0].users == 1 + assert bpy.data.meshes[0].library_weak_reference is not None + assert bpy.data.meshes[0].library_weak_reference.filepath == output_lib_path + assert bpy.data.meshes[0].library_weak_reference.id_name == "MELibMesh" + assert len(bpy.data.objects) == 1 for ob in bpy.data.objects: - assert(ob.library is None) - assert(ob.library_weak_reference is None) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert ob.library is None + assert ob.library_weak_reference is None + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=False, use_recursive=True, do_reuse_local_id=True) - assert(len(bpy.data.meshes) == 1) - assert(bpy.data.meshes[0].library is None) - assert(bpy.data.meshes[0].use_fake_user is False) - assert(bpy.data.meshes[0].users == 2) - assert(bpy.data.meshes[0].library_weak_reference is not None) - assert(bpy.data.meshes[0].library_weak_reference.filepath == output_lib_path) - assert(bpy.data.meshes[0].library_weak_reference.id_name == "MELibMesh") - assert(len(bpy.data.objects) == 2) + assert len(bpy.data.meshes) == 1 + assert bpy.data.meshes[0].library is None + assert bpy.data.meshes[0].use_fake_user is False + assert bpy.data.meshes[0].users == 2 + assert bpy.data.meshes[0].library_weak_reference is not None + assert bpy.data.meshes[0].library_weak_reference.filepath == output_lib_path + assert bpy.data.meshes[0].library_weak_reference.id_name == "MELibMesh" + assert len(bpy.data.objects) == 2 for ob in bpy.data.objects: - assert(ob.library is None) - assert(ob.library_weak_reference is None) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert ob.library is None + assert ob.library_weak_reference is None + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here bpy.ops.wm.append(directory=link_dir, filename="LibMesh", instance_object_data=False, set_fake=False, use_recursive=True, do_reuse_local_id=False) - assert(len(bpy.data.meshes) == 2) - assert(bpy.data.meshes[0].library_weak_reference is None) - assert(bpy.data.meshes[1].library is None) - assert(bpy.data.meshes[1].use_fake_user is False) - assert(bpy.data.meshes[1].users == 1) - assert(bpy.data.meshes[1].library_weak_reference is not None) - assert(bpy.data.meshes[1].library_weak_reference.filepath == output_lib_path) - assert(bpy.data.meshes[1].library_weak_reference.id_name == "MELibMesh") - assert(len(bpy.data.objects) == 3) + assert len(bpy.data.meshes) == 2 + assert bpy.data.meshes[0].library_weak_reference is None + assert bpy.data.meshes[1].library is None + assert bpy.data.meshes[1].use_fake_user is False + assert bpy.data.meshes[1].users == 1 + assert bpy.data.meshes[1].library_weak_reference is not None + assert bpy.data.meshes[1].library_weak_reference.filepath == output_lib_path + assert bpy.data.meshes[1].library_weak_reference.id_name == "MELibMesh" + assert len(bpy.data.objects) == 3 for ob in bpy.data.objects: - assert(ob.library is None) - assert(ob.library_weak_reference is None) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert ob.library is None + assert ob.library_weak_reference is None + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here class TestBlendLibLibraryReload(TestBlendLibLinkHelper): @@ -390,9 +390,9 @@ class TestBlendLibLibraryReload(TestBlendLibLinkHelper): link_dir = os.path.join(output_lib_path, "Object") bpy.ops.wm.link(directory=link_dir, filename="LibMesh") - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 1) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 1 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here orig_data = self.blender_data_to_tuple(bpy.data, "orig_data") @@ -402,7 +402,7 @@ class TestBlendLibLibraryReload(TestBlendLibLinkHelper): print(orig_data) print(reload_data) - assert(orig_data == reload_data) + assert orig_data == reload_data class TestBlendLibLibraryRelocate(TestBlendLibLinkHelper): @@ -420,9 +420,9 @@ class TestBlendLibLibraryRelocate(TestBlendLibLinkHelper): link_dir = os.path.join(output_lib_path, "Object") bpy.ops.wm.link(directory=link_dir, filename="LibMesh") - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 1) - assert(len(bpy.data.collections) == 0) # Scene's master collection is not listed here + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 1 + assert len(bpy.data.collections) == 0 # Scene's master collection is not listed here orig_data = self.blender_data_to_tuple(bpy.data, "orig_data") @@ -436,7 +436,7 @@ class TestBlendLibLibraryRelocate(TestBlendLibLinkHelper): print(orig_data) print(relocate_data) - assert(orig_data == relocate_data) + assert orig_data == relocate_data class TestBlendLibDataLibrariesLoad(TestBlendLibLinkHelper): @@ -454,21 +454,21 @@ class TestBlendLibDataLibrariesLoad(TestBlendLibLinkHelper): with bpy.data.libraries.load(filepath=output_lib_path) as lib_ctx: lib_src, lib_link = lib_ctx - assert(len(lib_src.meshes) == 1) - assert(len(lib_src.objects) == 1) - assert(len(lib_src.collections) == 1) + assert len(lib_src.meshes) == 1 + assert len(lib_src.objects) == 1 + assert len(lib_src.collections) == 1 - assert(len(lib_link.meshes) == 0) - assert(len(lib_link.objects) == 0) - assert(len(lib_link.collections) == 0) + assert len(lib_link.meshes) == 0 + assert len(lib_link.objects) == 0 + assert len(lib_link.collections) == 0 lib_link.collections.append(lib_src.collections[0]) # Linking happens when living the context manager. - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.objects) == 1) # This code does no instantiation. - assert(len(bpy.data.collections) == 1) + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.objects) == 1 # This code does no instantiation. + assert len(bpy.data.collections) == 1 TESTS = ( diff --git a/tests/python/bl_blendfile_library_overrides.py b/tests/python/bl_blendfile_library_overrides.py index 3ba99bd61e4..6890bb1e660 100644 --- a/tests/python/bl_blendfile_library_overrides.py +++ b/tests/python/bl_blendfile_library_overrides.py @@ -57,49 +57,49 @@ class TestLibraryOverrides(TestHelper, unittest.TestCase): local_id = obj.override_create() self.assertIsNotNone(local_id.override_library) self.assertIsNone(local_id.data.override_library) - assert(len(local_id.override_library.properties) == 0) + assert len(local_id.override_library.properties) == 0 # #### Generate an override property & operation automatically by editing the local override data. local_id.location.y = 1.0 local_id.override_library.operations_update() - assert(len(local_id.override_library.properties) == 1) + assert len(local_id.override_library.properties) == 1 override_prop = local_id.override_library.properties[0] - assert(override_prop.rna_path == "location") - assert(len(override_prop.operations) == 1) + assert override_prop.rna_path == "location" + assert len(override_prop.operations) == 1 override_operation = override_prop.operations[0] - assert(override_operation.operation == 'REPLACE') + assert override_operation.operation == 'REPLACE' # Setting location.y overrode all elements in the location array. -1 is a wildcard. - assert(override_operation.subitem_local_index == -1) + assert override_operation.subitem_local_index == -1 # #### Reset the override to its linked reference data. local_id.override_library.reset() - assert(len(local_id.override_library.properties) == 0) - assert(local_id.location == local_id.override_library.reference.location) + assert len(local_id.override_library.properties) == 0 + assert local_id.location == local_id.override_library.reference.location # #### Generate an override property & operation manually using the API. override_property = local_id.override_library.properties.add(rna_path="location") override_property.operations.add(operation='REPLACE') - assert(len(local_id.override_library.properties) == 1) + assert len(local_id.override_library.properties) == 1 override_prop = local_id.override_library.properties[0] - assert(override_prop.rna_path == "location") - assert(len(override_prop.operations) == 1) + assert override_prop.rna_path == "location" + assert len(override_prop.operations) == 1 override_operation = override_prop.operations[0] - assert(override_operation.operation == 'REPLACE') + assert override_operation.operation == 'REPLACE' # Setting location.y overrode all elements in the location array. -1 is a wildcard. - assert(override_operation.subitem_local_index == -1) + assert override_operation.subitem_local_index == -1 override_property = local_id.override_library.properties[0] override_property.operations.remove(override_property.operations[0]) local_id.override_library.properties.remove(override_property) - assert(len(local_id.override_library.properties) == 0) + assert len(local_id.override_library.properties) == 0 # #### Delete the override. local_id_name = local_id.name - assert(bpy.data.objects.get((local_id_name, None), None) == local_id) + assert bpy.data.objects.get((local_id_name, None), None) == local_id local_id.override_library.destroy() - assert(bpy.data.objects.get((local_id_name, None), None) is None) + assert bpy.data.objects.get((local_id_name, None), None) is None def test_link_permissive(self): """ @@ -119,39 +119,39 @@ class TestLibraryOverrides(TestHelper, unittest.TestCase): local_id = obj.override_create() self.assertIsNotNone(local_id.override_library) self.assertIsNone(local_id.data.override_library) - assert(len(local_id.override_library.properties) == 1) + assert len(local_id.override_library.properties) == 1 override_prop = local_id.override_library.properties[0] - assert(override_prop.rna_path == "scale") - assert(len(override_prop.operations) == 1) + assert override_prop.rna_path == "scale" + assert len(override_prop.operations) == 1 override_operation = override_prop.operations[0] - assert(override_operation.operation == 'NOOP') - assert(override_operation.subitem_local_index == -1) + assert override_operation.operation == 'NOOP' + assert override_operation.subitem_local_index == -1 local_id.location.y = 1.0 local_id.scale.x = 0.5 # `scale.x` will apply, but will be reverted when the library overrides # are updated. This is by design so python scripts can still alter the # properties locally what is a typical usecase in productions. - assert(local_id.scale.x == 0.5) - assert(local_id.location.y == 1.0) + assert local_id.scale.x == 0.5 + assert local_id.location.y == 1.0 local_id.override_library.operations_update() - assert(local_id.scale.x == 1.0) - assert(local_id.location.y == 1.0) + assert local_id.scale.x == 1.0 + assert local_id.location.y == 1.0 - assert(len(local_id.override_library.properties) == 2) + assert len(local_id.override_library.properties) == 2 override_prop = local_id.override_library.properties[0] - assert(override_prop.rna_path == "scale") - assert(len(override_prop.operations) == 1) + assert override_prop.rna_path == "scale" + assert len(override_prop.operations) == 1 override_operation = override_prop.operations[0] - assert(override_operation.operation == 'NOOP') - assert(override_operation.subitem_local_index == -1) + assert override_operation.operation == 'NOOP' + assert override_operation.subitem_local_index == -1 override_prop = local_id.override_library.properties[1] - assert(override_prop.rna_path == "location") - assert(len(override_prop.operations) == 1) + assert override_prop.rna_path == "location" + assert len(override_prop.operations) == 1 override_operation = override_prop.operations[0] - assert(override_operation.operation == 'REPLACE') - assert (override_operation.subitem_local_index == -1) + assert override_operation.operation == 'REPLACE' + assert override_operation.subitem_local_index == -1 class TestLibraryTemplate(TestHelper, unittest.TestCase): @@ -169,16 +169,16 @@ class TestLibraryTemplate(TestHelper, unittest.TestCase): mesh = bpy.data.meshes.new(TestLibraryTemplate.MESH_LIBRARY_PERMISSIVE) obj = bpy.data.objects.new(TestLibraryTemplate.OBJECT_LIBRARY_PERMISSIVE, object_data=mesh) bpy.context.collection.objects.link(obj) - assert(obj.override_library is None) + assert obj.override_library is None obj.override_template_create() - assert(obj.override_library is not None) - assert(len(obj.override_library.properties) == 0) + assert obj.override_library is not None + assert len(obj.override_library.properties) == 0 prop = obj.override_library.properties.add(rna_path='scale') - assert(len(obj.override_library.properties) == 1) - assert(len(prop.operations) == 0) + assert len(obj.override_library.properties) == 1 + assert len(prop.operations) == 0 operation = prop.operations.add(operation='NOOP') - assert(len(prop.operations) == 1) - assert(operation.operation == 'NOOP') + assert len(prop.operations) == 1 + assert operation.operation == 'NOOP' class TestLibraryOverridesResync(TestHelper, unittest.TestCase): @@ -237,30 +237,30 @@ class TestLibraryOverridesResync(TestHelper, unittest.TestCase): ) linked_collection_container = bpy.data.collections[TestLibraryOverridesResync.DATA_NAME_CONTAINER] - assert(linked_collection_container.library is not None) - assert(linked_collection_container.override_library is None) - assert(len(bpy.data.collections) == 2) - assert(all(id_.library is not None for id_ in bpy.data.collections)) - assert(len(bpy.data.objects) == 4) - assert(all(id_.library is not None for id_ in bpy.data.objects)) - assert(len(bpy.data.meshes) == 1) - assert(all(id_.library is not None for id_ in bpy.data.meshes)) - assert(len(bpy.data.armatures) == 1) - assert(all(id_.library is not None for id_ in bpy.data.armatures)) + assert linked_collection_container.library is not None + assert linked_collection_container.override_library is None + assert len(bpy.data.collections) == 2 + assert all(id_.library is not None for id_ in bpy.data.collections) + assert len(bpy.data.objects) == 4 + assert all(id_.library is not None for id_ in bpy.data.objects) + assert len(bpy.data.meshes) == 1 + assert all(id_.library is not None for id_ in bpy.data.meshes) + assert len(bpy.data.armatures) == 1 + assert all(id_.library is not None for id_ in bpy.data.armatures) override_collection_container = linked_collection_container.override_hierarchy_create( bpy.context.scene, bpy.context.view_layer, ) - assert(override_collection_container.library is None) - assert(override_collection_container.override_library is not None) + assert override_collection_container.library is None + assert override_collection_container.override_library is not None # Objects and collections are duplicated as overrides, but meshes and armatures remain only linked data. - assert(len(bpy.data.collections) == 4) - assert(all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.collections[:2])) - assert(len(bpy.data.objects) == 8) - assert(all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.objects[:4])) - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.armatures) == 1) + assert len(bpy.data.collections) == 4 + assert all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.collections[:2]) + assert len(bpy.data.objects) == 8 + assert all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.objects[:4]) + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.armatures) == 1 bpy.ops.wm.save_as_mainfile(filepath=str(self.test_output_path), check_existing=False, compress=False) @@ -279,21 +279,21 @@ class TestLibraryOverridesResync(TestHelper, unittest.TestCase): bpy.ops.wm.open_mainfile(filepath=str(self.test_output_path)) override_collection_container = bpy.data.collections[TestLibraryOverridesResync.DATA_NAME_CONTAINER] - assert(override_collection_container.library is None) - assert(override_collection_container.override_library is not None) + assert override_collection_container.library is None + assert override_collection_container.override_library is not None # Objects and collections are duplicated as overrides, but meshes and armatures remain only linked data. - assert(len(bpy.data.collections) == 4) - assert(all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.collections[:2])) - assert(len(bpy.data.objects) == 8) - assert(all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.objects[:4])) - assert(len(bpy.data.meshes) == 1) - assert(len(bpy.data.armatures) == 1) + assert len(bpy.data.collections) == 4 + assert all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.collections[:2]) + assert len(bpy.data.objects) == 8 + assert all((id_.library is None and id_.override_library is not None) for id_ in bpy.data.objects[:4]) + assert len(bpy.data.meshes) == 1 + assert len(bpy.data.armatures) == 1 obj_armature = bpy.data.objects[TestLibraryOverridesResync.DATA_NAME_RIG] obj_ctrl2 = bpy.data.objects[TestLibraryOverridesResync.DATA_NAME_CONTROLLER_2] - assert(obj_armature.library is None and obj_armature.override_library is not None) - assert(obj_ctrl2.library is None and obj_ctrl2.override_library is not None) - assert(obj_armature.constraints[0].target == obj_ctrl2) + assert obj_armature.library is None and obj_armature.override_library is not None + assert obj_ctrl2.library is None and obj_ctrl2.override_library is not None + assert obj_armature.constraints[0].target == obj_ctrl2 TESTS = ( diff --git a/tests/python/bl_keymap_validate.py b/tests/python/bl_keymap_validate.py index 83d41c8a9f6..11da4d562b0 100644 --- a/tests/python/bl_keymap_validate.py +++ b/tests/python/bl_keymap_validate.py @@ -228,7 +228,7 @@ def keyconfig_activate_and_extract_data( bpy.ops.preferences.keyconfig_activate(filepath=filepath) # If called multiple times, something strange is happening. - assert(len(args_collected) == 1) + assert len(args_collected) == 1 args, _kw = args_collected[0] # Ignore the type check as `temp_fn_argument_extractor` is a generic function # which doesn't contain type information of the function being wrapped. diff --git a/tests/python/bl_load_addons.py b/tests/python/bl_load_addons.py index b94c56541af..b67bc22102c 100644 --- a/tests/python/bl_load_addons.py +++ b/tests/python/bl_load_addons.py @@ -57,7 +57,7 @@ def disable_addons(): addons = bpy.context.preferences.addons for mod_name in list(addons.keys()): addon_utils.disable(mod_name, default_set=True) - assert(bool(addons) is False) + assert bool(addons) is False def test_load_addons(): @@ -97,13 +97,13 @@ def reload_addons(do_reload=True, do_reverse=True): mod_name = mod.__name__ print("\tenabling:", mod_name) addon_utils.enable(mod_name, default_set=True) - assert(mod_name in addons) + assert mod_name in addons for mod in modules: mod_name = mod.__name__ print("\tdisabling:", mod_name) addon_utils.disable(mod_name, default_set=True) - assert(not (mod_name in addons)) + assert not (mod_name in addons) # now test reloading if do_reload: diff --git a/tests/python/bl_load_py_modules.py b/tests/python/bl_load_py_modules.py index 7ad5895ce86..784d8984935 100644 --- a/tests/python/bl_load_py_modules.py +++ b/tests/python/bl_load_py_modules.py @@ -161,7 +161,7 @@ def load_modules(): sys.path[:] = sys_path_back # check we load what we ask for. - assert(os.path.samefile(mod_imp.__file__, submod_full)) + assert os.path.samefile(mod_imp.__file__, submod_full) modules.append(mod_imp) except Exception: diff --git a/tests/python/bl_mesh_modifiers.py b/tests/python/bl_mesh_modifiers.py index 640cf1c30f2..5498316b267 100644 --- a/tests/python/bl_mesh_modifiers.py +++ b/tests/python/bl_mesh_modifiers.py @@ -55,8 +55,8 @@ def render_gl(context, filepath, shade): def render_gl_all_modes(context, obj, filepath=""): - assert(obj is not None) - assert(filepath != "") + assert obj is not None + assert filepath != "" scene = context.scene @@ -91,7 +91,7 @@ def render_gl_all_modes(context, obj, filepath=""): render_gl(context, filepath + "_wp_wire", shade='WIREFRAME') - assert(1) + assert 1 bpy.ops.object.mode_set(mode='OBJECT', toggle=False) diff --git a/tests/python/bl_pyapi_idprop.py b/tests/python/bl_pyapi_idprop.py index ddb5be03594..ddce132dd5a 100644 --- a/tests/python/bl_pyapi_idprop.py +++ b/tests/python/bl_pyapi_idprop.py @@ -22,7 +22,7 @@ class TestHelper: def setUp(self): self._id = bpy.context.scene self._id.pop("cycles", None) - assert(len(self._id.keys()) == 0) + assert len(self._id.keys()) == 0 def tearDown(self): for key in list(self._id.keys()): diff --git a/tests/python/bl_rna_manual_reference.py b/tests/python/bl_rna_manual_reference.py index 257c8b7601a..958cc46ae29 100644 --- a/tests/python/bl_rna_manual_reference.py +++ b/tests/python/bl_rna_manual_reference.py @@ -15,12 +15,12 @@ import bpy def test_data(): import rna_manual_reference - assert(isinstance(rna_manual_reference.url_manual_mapping, tuple)) + assert isinstance(rna_manual_reference.url_manual_mapping, tuple) for i, value in enumerate(rna_manual_reference.url_manual_mapping): try: - assert(len(value) == 2) - assert(isinstance(value[0], str)) - assert(isinstance(value[1], str)) + assert len(value) == 2 + assert isinstance(value[0], str) + assert isinstance(value[1], str) except: print("Expected a tuple of 2 strings, instead item %d is a %s: %r" % (i, type(value), value)) import traceback diff --git a/tests/python/bl_run_operators_event_simulate.py b/tests/python/bl_run_operators_event_simulate.py index d218e6b1bc0..e17eaef0480 100644 --- a/tests/python/bl_run_operators_event_simulate.py +++ b/tests/python/bl_run_operators_event_simulate.py @@ -461,7 +461,7 @@ class BlenderAction(argparse.Action): except ArgumentTypeError as ex: raise ArgumentTypeError("Invalid 'action' arguments \"%s\" at index %d, %s" % (value, index, str(ex))) # Validation should never yield any events. - assert(not dummy_result) + assert not dummy_result return (op, args, kwargs) diff --git a/tests/python/collada/CMakeLists.txt b/tests/python/collada/CMakeLists.txt index ecc092250c9..27388337de6 100644 --- a/tests/python/collada/CMakeLists.txt +++ b/tests/python/collada/CMakeLists.txt @@ -47,5 +47,5 @@ endmacro() # Tests are disabled because they only work on Windows # Tests will be redone completely to work reliable # -# COLLADA_TEST(mesh simple mesh_simple.blend) -# COLLADA_TEST(animation simple suzannes_parent_inverse.blend) +# collada_test(mesh simple mesh_simple.blend) +# collada_test(animation simple suzannes_parent_inverse.blend) diff --git a/tests/python/modifiers.py b/tests/python/modifiers.py index 11d696c3bed..93448841dfd 100644 --- a/tests/python/modifiers.py +++ b/tests/python/modifiers.py @@ -16,10 +16,12 @@ seed(0) def get_generate_modifiers_list(test_object_name, randomize=False): """ Construct a list of 'Generate' modifiers with default parameters. - :param test_object_name: str - name of test object. Some modifiers like boolean need an extra parameter beside - the default one. E.g. boolean needs object, mask needs vertex group etc... - The extra parameter name will be <test_object_name>_<modifier_type> - :param randomize: bool - if True shuffle the list of modifiers. + :arg test_object_name: Name of test object. Some modifiers like boolean need an extra parameter beside + the default one. E.g. boolean needs object, mask needs vertex group etc... + The extra parameter name will be <test_object_name>_<modifier_type> + :type test_object_name: str + :arg randomize: If True shuffle the list of modifiers. + :type randomize: bool :return: list of 'Generate' modifiers with default parameters. """ diff --git a/tests/python/modules/mesh_test.py b/tests/python/modules/mesh_test.py index 5b01bfeee94..b698540c367 100644 --- a/tests/python/modules/mesh_test.py +++ b/tests/python/modules/mesh_test.py @@ -43,10 +43,10 @@ class ModifierSpec: def __init__(self, modifier_name: str, modifier_type: str, modifier_parameters: dict, frame_end=0): """ Constructs a modifier spec. - :param modifier_name: str - name of object modifier, e.g. "myFirstSubsurfModif" - :param modifier_type: str - type of object modifier, e.g. "SUBSURF" - :param modifier_parameters: dict - {name : val} dictionary giving modifier parameters, e.g. {"quality" : 4} - :param frame_end: int - frame at which simulation needs to be baked or modifier needs to be applied. + :arg modifier_name: str - name of object modifier, e.g. "myFirstSubsurfModif" + :arg modifier_type: str - type of object modifier, e.g. "SUBSURF" + :arg modifier_parameters: dict - {name : val} dictionary giving modifier parameters, e.g. {"quality" : 4} + :arg frame_end: int - frame at which simulation needs to be baked or modifier needs to be applied. """ self.modifier_name = modifier_name self.modifier_type = modifier_type @@ -66,10 +66,10 @@ class ParticleSystemSpec: def __init__(self, modifier_name: str, modifier_type: str, modifier_parameters: dict, frame_end: int): """ Constructs a particle system spec. - :param modifier_name: str - name of object modifier, e.g. "Particles" - :param modifier_type: str - type of object modifier, e.g. "PARTICLE_SYSTEM" - :param modifier_parameters: dict - {name : val} dictionary giving modifier parameters, e.g. {"seed" : 1} - :param frame_end: int - the last frame of the simulation at which the modifier is applied + :arg modifier_name: str - name of object modifier, e.g. "Particles" + :arg modifier_type: str - type of object modifier, e.g. "PARTICLE_SYSTEM" + :arg modifier_parameters: dict - {name : val} dictionary giving modifier parameters, e.g. {"seed" : 1} + :arg frame_end: int - the last frame of the simulation at which the modifier is applied """ self.modifier_name = modifier_name self.modifier_type = modifier_type @@ -97,11 +97,11 @@ class OperatorSpecEditMode: ): """ Constructs an OperatorSpecEditMode. Raises ValueError if selec_mode is invalid. - :param operator_name: str - name of mesh operator from bpy.ops.mesh, e.g. "bevel" or "fill" - :param operator_parameters: dict - {name : val} dictionary containing operator parameters. - :param select_mode: str - mesh selection mode, must be either 'VERT', 'EDGE' or 'FACE' - :param selection: sequence - vertices/edges/faces indices to select, e.g. [0, 9, 10]. - :param: select_history: bool - load selection into bmesh selection history. + :arg operator_name: str - name of mesh operator from bpy.ops.mesh, e.g. "bevel" or "fill" + :arg operator_parameters: dict - {name : val} dictionary containing operator parameters. + :arg select_mode: str - mesh selection mode, must be either 'VERT', 'EDGE' or 'FACE' + :arg selection: sequence - vertices/edges/faces indices to select, e.g. [0, 9, 10]. + :arg: select_history: bool - load selection into bmesh selection history. """ self.operator_name = operator_name self.operator_parameters = operator_parameters @@ -125,8 +125,8 @@ class OperatorSpecObjectMode: def __init__(self, operator_name: str, operator_parameters: dict): """ - :param operator_name: str - name of the object operator from bpy.ops.object, e.g. "shade_smooth" or "shape_keys" - :param operator_parameters: dict - contains operator parameters. + :arg operator_name: str - name of the object operator from bpy.ops.object, e.g. "shade_smooth" or "shape_keys" + :arg operator_parameters: dict - contains operator parameters. """ self.operator_name = operator_name self.operator_parameters = operator_parameters @@ -144,9 +144,9 @@ class DeformModifierSpec: def __init__(self, frame_number: int, modifier_list: list, object_operator_spec: OperatorSpecObjectMode = None): """ Constructs a Deform Modifier spec (for user input) - :param frame_number: int - the frame at which animated keyframe is inserted - :param modifier_list: ModifierSpec - contains modifiers - :param object_operator_spec: OperatorSpecObjectMode - contains object operators + :arg frame_number: int - the frame at which animated keyframe is inserted + :arg modifier_list: ModifierSpec - contains modifiers + :arg object_operator_spec: OperatorSpecObjectMode - contains object operators """ self.frame_number = frame_number self.modifier_list = modifier_list @@ -163,12 +163,12 @@ class MeshTest(ABC): def __init__(self, test_object_name, exp_object_name, test_name=None, threshold=None, do_compare=True): """ - :param test_object_name: str - Name of object of mesh type to run the operations on. - :param exp_object_name: str - Name of object of mesh type that has the expected + :arg test_object_name: str - Name of object of mesh type to run the operations on. + :arg exp_object_name: str - Name of object of mesh type that has the expected geometry after running the operations. - :param test_name: str - Name of the test. - :param threshold: exponent: To allow variations and accept difference to a certain degree. - :param do_compare: bool - True if we want to compare the test and expected objects, False otherwise. + :arg test_name: str - Name of the test. + :arg threshold: exponent: To allow variations and accept difference to a certain degree. + :arg do_compare: bool - True if we want to compare the test and expected objects, False otherwise. """ self.test_object_name = test_object_name self.exp_object_name = exp_object_name @@ -302,10 +302,10 @@ class MeshTest(ABC): def do_selection(self, mesh: bpy.types.Mesh, select_mode: str, selection, select_history: bool): """ Do selection on a mesh. - :param mesh: bpy.types.Mesh - input mesh - :param: select_mode: str - selection mode. Must be 'VERT', 'EDGE' or 'FACE' - :param: selection: sequence - indices of selection. - :param: select_history: bool - load selection into bmesh selection history + :arg mesh: bpy.types.Mesh - input mesh + :arg: select_mode: str - selection mode. Must be 'VERT', 'EDGE' or 'FACE' + :arg: selection: sequence - indices of selection. + :arg: select_history: bool - load selection into bmesh selection history Example: select_mode='VERT' and selection={1,2,3} selects veritces 1, 2 and 3 of input mesh """ @@ -366,9 +366,9 @@ class MeshTest(ABC): def compare_meshes(evaluated_object, expected_object, threshold): """ Compares evaluated object mesh with expected object mesh. - :param evaluated_object: first object for comparison. - :param expected_object: second object for comparison. - :param threshold: exponent: To allow variations and accept difference to a certain degree. + :arg evaluated_object: first object for comparison. + :arg expected_object: second object for comparison. + :arg threshold: exponent: To allow variations and accept difference to a certain degree. :return: dict: Contains results of different comparisons. """ objects = bpy.data.objects @@ -439,14 +439,14 @@ class SpecMeshTest(MeshTest): """ Constructor for SpecMeshTest. - :param test_name: str - Name of the test. - :param test_object_name: str - Name of object of mesh type to run the operations on. - :param exp_object_name: str - Name of object of mesh type that has the expected - geometry after running the operations. - :param operations_stack: list - stack holding operations to perform on the test_object. - :param apply_modifier: bool - True if we want to apply the modifiers right after adding them to the object. - - True if we want to apply the modifier to list of modifiers, after some operation. - This affects operations of type ModifierSpec and DeformModifierSpec. + :arg test_name: str - Name of the test. + :arg test_object_name: str - Name of object of mesh type to run the operations on. + :arg exp_object_name: str - Name of object of mesh type that has the expected + geometry after running the operations. + :arg operations_stack: list - stack holding operations to perform on the test_object. + :arg apply_modifier: bool - True if we want to apply the modifiers right after adding them to the object. + - True if we want to apply the modifier to list of modifiers, after some operation. + This affects operations of type ModifierSpec and DeformModifierSpec. """ super().__init__(test_object_name, exp_object_name, test_name, threshold) @@ -491,9 +491,9 @@ class SpecMeshTest(MeshTest): def _set_parameters_impl(self, modifier, modifier_parameters, nested_settings_path, modifier_name): """ Doing a depth first traversal of the modifier parameters and setting their values. - :param: modifier: Of type modifier, its altered to become a setting in recursion. - :param: modifier_parameters : dict or sequence, a simple/nested dictionary of modifier parameters. - :param: nested_settings_path : list(stack): helps in tracing path to each node. + :arg: modifier: Of type modifier, its altered to become a setting in recursion. + :arg: modifier_parameters : dict or sequence, a simple/nested dictionary of modifier parameters. + :arg: nested_settings_path : list(stack): helps in tracing path to each node. """ if not isinstance(modifier_parameters, dict): param_setting = None @@ -540,8 +540,8 @@ class SpecMeshTest(MeshTest): def _add_modifier(self, test_object, modifier_spec: ModifierSpec): """ Add modifier to object. - :param test_object: bpy.types.Object - Blender object to apply modifier on. - :param modifier_spec: ModifierSpec - ModifierSpec object with parameters + :arg test_object: bpy.types.Object - Blender object to apply modifier on. + :arg modifier_spec: ModifierSpec - ModifierSpec object with parameters """ bakers_list = ['CLOTH', 'SOFT_BODY', 'DYNAMIC_PAINT', 'FLUID'] scene = bpy.context.scene @@ -645,8 +645,8 @@ class SpecMeshTest(MeshTest): def _apply_operator_edit_mode(self, test_object, operator: OperatorSpecEditMode): """ Apply operator on test object. - :param test_object: bpy.types.Object - Blender object to apply operator on. - :param operator: OperatorSpecEditMode - OperatorSpecEditMode object with parameters. + :arg test_object: bpy.types.Object - Blender object to apply operator on. + :arg operator: OperatorSpecEditMode - OperatorSpecEditMode object with parameters. """ self.do_selection( test_object.data, @@ -695,7 +695,7 @@ class SpecMeshTest(MeshTest): def _apply_deform_modifier(self, test_object, operation: list): """ - param: operation: list: List of modifiers or combination of modifier and object operator. + arg: operation: list: List of modifiers or combination of modifier and object operator. """ scene = bpy.context.scene @@ -761,7 +761,7 @@ class RunTest: def __init__(self, tests, apply_modifiers=False, do_compare=False): """ Construct a test suite. - :param tests: list - list of modifier or operator test cases. Each element in the list must contain the + :arg tests: list - list of modifier or operator test cases. Each element in the list must contain the following in the correct order: 0) test_name: str - unique test name @@ -825,7 +825,7 @@ class RunTest: def run_test(self, test_name: str): """ Run a single test from self.tests list - :param test_name: int - name of test + :arg test_name: int - name of test :return: bool - True if test passed, False otherwise. """ case = None diff --git a/tests/python/modules/test_utils.py b/tests/python/modules/test_utils.py index 6aba3a75263..60c0c668835 100755 --- a/tests/python/modules/test_utils.py +++ b/tests/python/modules/test_utils.py @@ -46,8 +46,8 @@ class AbstractBlenderRunnerTest(unittest.TestCase): Returns Blender's stdout + stderr combined into one string. - :param filepath: taken relative to self.testdir. - :param timeout: in seconds + :arg filepath: taken relative to self.testdir. + :arg timeout: in seconds """ assert self.blender, "Path to Blender binary is to be set in setUpClass()" diff --git a/tests/python/view_layer/CMakeLists.txt b/tests/python/view_layer/CMakeLists.txt index 56dc1c8b5e9..8052d375d23 100644 --- a/tests/python/view_layer/CMakeLists.txt +++ b/tests/python/view_layer/CMakeLists.txt @@ -20,7 +20,7 @@ set(TEST_BLENDER_EXE $<TARGET_FILE:blender> --background -noaudio --factory-star # ------------------------------------------------------------------------------ -macro(VIEW_LAYER_TEST test_name) +macro(view_layer_test test_name) # Adds ${CMAKE_CURRENT_LIST_DIR} to sys.path so that the tests can import # things from view_layer_common.py add_test(view_layer_${test_name} ${TEST_BLENDER_EXE} @@ -31,129 +31,129 @@ macro(VIEW_LAYER_TEST test_name) ) endmacro() -VIEW_LAYER_TEST(active_collection) -VIEW_LAYER_TEST(background_set) -VIEW_LAYER_TEST(collection_new_sync) -VIEW_LAYER_TEST(collection_rename_a) -VIEW_LAYER_TEST(collection_rename_b) -# VIEW_LAYER_TEST(evaluation_render_settings_a) -# VIEW_LAYER_TEST(evaluation_render_settings_b) -# VIEW_LAYER_TEST(evaluation_render_settings_c) -# VIEW_LAYER_TEST(evaluation_render_settings_d) -# VIEW_LAYER_TEST(evaluation_render_settings_e) -# VIEW_LAYER_TEST(evaluation_render_settings_f) -# VIEW_LAYER_TEST(evaluation_render_settings_g) -# VIEW_LAYER_TEST(evaluation_render_settings_h) -# VIEW_LAYER_TEST(evaluation_render_settings_i) -VIEW_LAYER_TEST(evaluation_visibility_a) -VIEW_LAYER_TEST(evaluation_visibility_b) -VIEW_LAYER_TEST(evaluation_visibility_c) -VIEW_LAYER_TEST(evaluation_visibility_d) -VIEW_LAYER_TEST(evaluation_visibility_e) -VIEW_LAYER_TEST(evaluation_visibility_f) -VIEW_LAYER_TEST(evaluation_visibility_g) -VIEW_LAYER_TEST(evaluation_visibility_h) -VIEW_LAYER_TEST(evaluation_visibility_i) -VIEW_LAYER_TEST(evaluation_visibility_j) -VIEW_LAYER_TEST(evaluation_selectability_a) -VIEW_LAYER_TEST(evaluation_selectability_b) -VIEW_LAYER_TEST(evaluation_selectability_c) -VIEW_LAYER_TEST(evaluation_selectability_d) -VIEW_LAYER_TEST(evaluation_selectability_e) -VIEW_LAYER_TEST(evaluation_selectability_f) -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) -VIEW_LAYER_TEST(object_add_no_collection_cylinder) -VIEW_LAYER_TEST(object_add_no_collection_empty) -VIEW_LAYER_TEST(object_add_no_collection_torus) -VIEW_LAYER_TEST(object_copy) -VIEW_LAYER_TEST(object_delete_a) -VIEW_LAYER_TEST(object_delete_b) -VIEW_LAYER_TEST(object_link_a) -VIEW_LAYER_TEST(object_link_b) -VIEW_LAYER_TEST(object_link_c) -VIEW_LAYER_TEST(operator_context) -VIEW_LAYER_TEST(make_single_user) -VIEW_LAYER_TEST(move_above_below_scene_collection_a) -VIEW_LAYER_TEST(move_above_below_scene_collection_b) -VIEW_LAYER_TEST(move_above_below_scene_collection_c) -VIEW_LAYER_TEST(move_above_below_scene_collection_d) -VIEW_LAYER_TEST(move_above_below_scene_collection_e) -VIEW_LAYER_TEST(move_above_below_scene_collection_f) -VIEW_LAYER_TEST(move_above_below_scene_collection_g) -VIEW_LAYER_TEST(move_above_below_scene_collection_h) -VIEW_LAYER_TEST(move_above_below_scene_collection_i) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_a) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_b) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_c) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_d) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_e) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_f) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_g) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_h) -VIEW_LAYER_TEST(move_above_below_scene_collection_sync_i) -VIEW_LAYER_TEST(move_into_scene_collection_a) -VIEW_LAYER_TEST(move_into_scene_collection_b) -VIEW_LAYER_TEST(move_into_scene_collection_c) -VIEW_LAYER_TEST(move_into_scene_collection_d) -VIEW_LAYER_TEST(move_into_scene_collection_e) -VIEW_LAYER_TEST(move_into_scene_collection_f) -VIEW_LAYER_TEST(move_into_scene_collection_g) -VIEW_LAYER_TEST(move_into_scene_collection_h) -VIEW_LAYER_TEST(move_into_scene_collection_i) -VIEW_LAYER_TEST(move_into_scene_collection_j) -VIEW_LAYER_TEST(move_into_scene_collection_k) -VIEW_LAYER_TEST(move_into_scene_collection_l) -VIEW_LAYER_TEST(move_into_scene_collection_sync_a) -VIEW_LAYER_TEST(move_into_scene_collection_sync_b) -VIEW_LAYER_TEST(move_into_scene_collection_sync_c) -VIEW_LAYER_TEST(move_into_scene_collection_sync_d) -VIEW_LAYER_TEST(move_into_scene_collection_sync_e) -VIEW_LAYER_TEST(move_into_scene_collection_sync_f) -VIEW_LAYER_TEST(move_into_scene_collection_sync_g) -VIEW_LAYER_TEST(move_into_scene_collection_sync_h) -VIEW_LAYER_TEST(move_into_scene_collection_sync_i) -VIEW_LAYER_TEST(move_into_scene_collection_sync_j) -VIEW_LAYER_TEST(move_into_scene_collection_sync_k) -VIEW_LAYER_TEST(move_into_scene_collection_sync_l) -VIEW_LAYER_TEST(move_above_below_layer_collection_a) -VIEW_LAYER_TEST(move_above_below_layer_collection_b) -VIEW_LAYER_TEST(move_above_below_layer_collection_c) -VIEW_LAYER_TEST(move_above_below_layer_collection_d) -VIEW_LAYER_TEST(move_above_below_layer_collection_e) -VIEW_LAYER_TEST(move_above_below_layer_collection_f) -VIEW_LAYER_TEST(move_above_below_layer_collection_g) -VIEW_LAYER_TEST(move_above_below_layer_collection_h) -VIEW_LAYER_TEST(move_above_below_layer_collection_i) -VIEW_LAYER_TEST(move_above_below_layer_collection_j) -VIEW_LAYER_TEST(move_above_below_layer_collection_k) -VIEW_LAYER_TEST(move_above_below_layer_collection_l) -VIEW_LAYER_TEST(move_into_layer_collection_a) -VIEW_LAYER_TEST(move_into_layer_collection_b) -VIEW_LAYER_TEST(move_into_layer_collection_c) -VIEW_LAYER_TEST(move_into_layer_collection_d) -VIEW_LAYER_TEST(move_into_layer_collection_e) -VIEW_LAYER_TEST(move_into_layer_collection_f) -VIEW_LAYER_TEST(move_into_layer_collection_g) -VIEW_LAYER_TEST(move_into_layer_collection_h) -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) -VIEW_LAYER_TEST(scene_copy_d) -VIEW_LAYER_TEST(scene_copy_e) -VIEW_LAYER_TEST(scene_copy_f) -VIEW_LAYER_TEST(scene_delete) -VIEW_LAYER_TEST(scene_objects) -VIEW_LAYER_TEST(scene_write_read) -VIEW_LAYER_TEST(view_layer_rename) +view_layer_test(active_collection) +view_layer_test(background_set) +view_layer_test(collection_new_sync) +view_layer_test(collection_rename_a) +view_layer_test(collection_rename_b) +# view_layer_test(evaluation_render_settings_a) +# view_layer_test(evaluation_render_settings_b) +# view_layer_test(evaluation_render_settings_c) +# view_layer_test(evaluation_render_settings_d) +# view_layer_test(evaluation_render_settings_e) +# view_layer_test(evaluation_render_settings_f) +# view_layer_test(evaluation_render_settings_g) +# view_layer_test(evaluation_render_settings_h) +# view_layer_test(evaluation_render_settings_i) +view_layer_test(evaluation_visibility_a) +view_layer_test(evaluation_visibility_b) +view_layer_test(evaluation_visibility_c) +view_layer_test(evaluation_visibility_d) +view_layer_test(evaluation_visibility_e) +view_layer_test(evaluation_visibility_f) +view_layer_test(evaluation_visibility_g) +view_layer_test(evaluation_visibility_h) +view_layer_test(evaluation_visibility_i) +view_layer_test(evaluation_visibility_j) +view_layer_test(evaluation_selectability_a) +view_layer_test(evaluation_selectability_b) +view_layer_test(evaluation_selectability_c) +view_layer_test(evaluation_selectability_d) +view_layer_test(evaluation_selectability_e) +view_layer_test(evaluation_selectability_f) +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) +view_layer_test(object_add_no_collection_cylinder) +view_layer_test(object_add_no_collection_empty) +view_layer_test(object_add_no_collection_torus) +view_layer_test(object_copy) +view_layer_test(object_delete_a) +view_layer_test(object_delete_b) +view_layer_test(object_link_a) +view_layer_test(object_link_b) +view_layer_test(object_link_c) +view_layer_test(operator_context) +view_layer_test(make_single_user) +view_layer_test(move_above_below_scene_collection_a) +view_layer_test(move_above_below_scene_collection_b) +view_layer_test(move_above_below_scene_collection_c) +view_layer_test(move_above_below_scene_collection_d) +view_layer_test(move_above_below_scene_collection_e) +view_layer_test(move_above_below_scene_collection_f) +view_layer_test(move_above_below_scene_collection_g) +view_layer_test(move_above_below_scene_collection_h) +view_layer_test(move_above_below_scene_collection_i) +view_layer_test(move_above_below_scene_collection_sync_a) +view_layer_test(move_above_below_scene_collection_sync_b) +view_layer_test(move_above_below_scene_collection_sync_c) +view_layer_test(move_above_below_scene_collection_sync_d) +view_layer_test(move_above_below_scene_collection_sync_e) +view_layer_test(move_above_below_scene_collection_sync_f) +view_layer_test(move_above_below_scene_collection_sync_g) +view_layer_test(move_above_below_scene_collection_sync_h) +view_layer_test(move_above_below_scene_collection_sync_i) +view_layer_test(move_into_scene_collection_a) +view_layer_test(move_into_scene_collection_b) +view_layer_test(move_into_scene_collection_c) +view_layer_test(move_into_scene_collection_d) +view_layer_test(move_into_scene_collection_e) +view_layer_test(move_into_scene_collection_f) +view_layer_test(move_into_scene_collection_g) +view_layer_test(move_into_scene_collection_h) +view_layer_test(move_into_scene_collection_i) +view_layer_test(move_into_scene_collection_j) +view_layer_test(move_into_scene_collection_k) +view_layer_test(move_into_scene_collection_l) +view_layer_test(move_into_scene_collection_sync_a) +view_layer_test(move_into_scene_collection_sync_b) +view_layer_test(move_into_scene_collection_sync_c) +view_layer_test(move_into_scene_collection_sync_d) +view_layer_test(move_into_scene_collection_sync_e) +view_layer_test(move_into_scene_collection_sync_f) +view_layer_test(move_into_scene_collection_sync_g) +view_layer_test(move_into_scene_collection_sync_h) +view_layer_test(move_into_scene_collection_sync_i) +view_layer_test(move_into_scene_collection_sync_j) +view_layer_test(move_into_scene_collection_sync_k) +view_layer_test(move_into_scene_collection_sync_l) +view_layer_test(move_above_below_layer_collection_a) +view_layer_test(move_above_below_layer_collection_b) +view_layer_test(move_above_below_layer_collection_c) +view_layer_test(move_above_below_layer_collection_d) +view_layer_test(move_above_below_layer_collection_e) +view_layer_test(move_above_below_layer_collection_f) +view_layer_test(move_above_below_layer_collection_g) +view_layer_test(move_above_below_layer_collection_h) +view_layer_test(move_above_below_layer_collection_i) +view_layer_test(move_above_below_layer_collection_j) +view_layer_test(move_above_below_layer_collection_k) +view_layer_test(move_above_below_layer_collection_l) +view_layer_test(move_into_layer_collection_a) +view_layer_test(move_into_layer_collection_b) +view_layer_test(move_into_layer_collection_c) +view_layer_test(move_into_layer_collection_d) +view_layer_test(move_into_layer_collection_e) +view_layer_test(move_into_layer_collection_f) +view_layer_test(move_into_layer_collection_g) +view_layer_test(move_into_layer_collection_h) +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) +view_layer_test(scene_copy_d) +view_layer_test(scene_copy_e) +view_layer_test(scene_copy_f) +view_layer_test(scene_delete) +view_layer_test(scene_objects) +view_layer_test(scene_write_read) +view_layer_test(view_layer_rename) |