[Bf-blender-cvs] [6cd191a6603] master: Link/Append tests: properly support and test with/without 'recursive' behaviors.

Bastien Montagne noreply at git.blender.org
Wed Oct 20 11:58:11 CEST 2021


Commit: 6cd191a660394042a9df701d7ee9164881fc316b
Author: Bastien Montagne
Date:   Wed Oct 20 11:56:04 2021 +0200
Branches: master
https://developer.blender.org/rB6cd191a660394042a9df701d7ee9164881fc316b

Link/Append tests: properly support and test with/without 'recursive' behaviors.

This requires adding an extra ('indirect') library to the test cases for
append.

Aftermath of T92224.

===================================================================

M	tests/python/bl_blendfile_liblink.py

===================================================================

diff --git a/tests/python/bl_blendfile_liblink.py b/tests/python/bl_blendfile_liblink.py
index 918c74d17d0..ab26059e944 100644
--- a/tests/python/bl_blendfile_liblink.py
+++ b/tests/python/bl_blendfile_liblink.py
@@ -34,7 +34,44 @@ class TestBlendLibLinkHelper(TestHelper):
         output_dir = self.args.output_dir
         self.ensure_path(output_dir)
         # Take care to keep the name unique so multiple test jobs can run at once.
-        output_lib_path = os.path.join(output_dir, self.unique_blendfile_name("blendlib"))
+        output_lib_path = os.path.join(output_dir, self.unique_blendfile_name("blendlib_basic"))
+
+        bpy.ops.wm.save_as_mainfile(filepath=output_lib_path, check_existing=False, compress=False)
+
+        return output_lib_path
+
+    def init_lib_data_indirect_lib(self):
+        output_dir = self.args.output_dir
+        self.ensure_path(output_dir)
+
+        # Create an indirect library containing a material.
+        self.reset_blender()
+
+        ma = bpy.data.materials.new("LibMaterial")
+        ma.use_fake_user = True
+        # Take care to keep the name unique so multiple test jobs can run at once.
+        output_lib_path = os.path.join(output_dir, self.unique_blendfile_name("blendlib_indirect_material"))
+
+        bpy.ops.wm.save_as_mainfile(filepath=output_lib_path, check_existing=False, compress=False)
+
+        # Create a main library containing object etc., and linking material from indirect library.
+        self.reset_blender()
+
+        link_dir = os.path.join(output_lib_path, "Material")
+        bpy.ops.wm.link(directory=link_dir, filename="LibMaterial")
+        ma = bpy.data.materials[0]
+
+        me = bpy.data.meshes.new("LibMesh")
+        me.materials.append(ma)
+        ob = bpy.data.objects.new("LibMesh", me)
+        coll = bpy.data.collections.new("LibMesh")
+        coll.objects.link(ob)
+        bpy.context.scene.collection.children.link(coll)
+
+        output_dir = self.args.output_dir
+        self.ensure_path(output_dir)
+        # Take care to keep the name unique so multiple test jobs can run at once.
+        output_lib_path = os.path.join(output_dir, self.unique_blendfile_name("blendlib_indirect_main"))
 
         bpy.ops.wm.save_as_mainfile(filepath=output_lib_path, check_existing=False, compress=False)
 
@@ -158,7 +195,7 @@ class TestBlendLibAppendBasic(TestBlendLibLinkHelper):
 
     def test_append(self):
         output_dir = self.args.output_dir
-        output_lib_path = self.init_lib_data_basic()
+        output_lib_path = self.init_lib_data_indirect_lib()
 
         # Simple append of a single ObData.
         self.reset_blender()
@@ -167,6 +204,11 @@ 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)
 
+        print(bpy.data.materials[:], bpy.data.materials[0].library, bpy.data.materials[0].users, 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)
@@ -181,6 +223,9 @@ 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)
@@ -196,6 +241,9 @@ 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)
@@ -210,6 +258,9 @@ 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)
@@ -225,6 +276,9 @@ 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)
@@ -240,6 +294,9 @@ 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)



More information about the Bf-blender-cvs mailing list