[Bf-blender-cvs] [8b59be491cb] temp-T94185-id_remapping-experiment-a: Added test cases for remapping.

Jeroen Bakker noreply at git.blender.org
Mon Dec 20 10:24:45 CET 2021


Commit: 8b59be491cb7c0951f4237796a6334909bfdc9c8
Author: Jeroen Bakker
Date:   Mon Dec 20 08:03:58 2021 +0100
Branches: temp-T94185-id_remapping-experiment-a
https://developer.blender.org/rB8b59be491cb7c0951f4237796a6334909bfdc9c8

Added test cases for remapping.

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

M	source/blender/blenkernel/BKE_lib_remap.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/lib_id_remapper.cc
A	source/blender/blenkernel/intern/lib_id_remapper_test.cc

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

diff --git a/source/blender/blenkernel/BKE_lib_remap.h b/source/blender/blenkernel/BKE_lib_remap.h
index f8af3516437..f360717a804 100644
--- a/source/blender/blenkernel/BKE_lib_remap.h
+++ b/source/blender/blenkernel/BKE_lib_remap.h
@@ -156,6 +156,14 @@ void BKE_library_callback_remap_editor_id_reference_set(
 
 /* IDRemapper */
 struct IDRemapper;
+typedef enum IDRemapperApplyResult {
+  /** No remapping rules available for the source. */
+  ID_REMAP_SOURCE_UNAVAILABLE,
+  /** Source isn't mappable (fe NULL). */
+  ID_REMAP_SOURCE_NOT_MAPPABLE,
+  /** Source has been remapped to a new pointer. */
+  ID_REMAP_SOURCE_REMAPPED,
+} IDRemapperApplyResult;
 
 /**
  * \brief Create a new ID Remapper.
@@ -172,13 +180,9 @@ void BKE_id_remapper_add(struct IDRemapper *id_remapper, struct ID *old_id, stru
  * \brief Apply a remapping.
  *
  * Update the id pointer stored in the given id_ptr_ptr id a remapping rule exists.
- *
- * \returns
- * false id pointer stored at the given id_ptr_ptr doesn't have a remap rule and isn't
- *       modified.
- * true  id pointer stored at the given id_ptr_ptr has a remap rule that is applied.
  */
-bool BKE_id_remapper_apply(const struct IDRemapper *id_remapper, struct ID **id_ptr_ptr);
+IDRemapperApplyResult BKE_id_remapper_apply(const struct IDRemapper *id_remapper,
+                                            struct ID **id_ptr_ptr);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 3bb8439f129..294f30cbb01 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -815,6 +815,7 @@ if(WITH_GTESTS)
     intern/fcurve_test.cc
     intern/lattice_deform_test.cc
     intern/layer_test.cc
+    intern/lib_id_remapper_test.cc
     intern/lib_id_test.cc
     intern/tracking_test.cc
   )
diff --git a/source/blender/blenkernel/intern/lib_id_remapper.cc b/source/blender/blenkernel/intern/lib_id_remapper.cc
index 9d8a5f2ed0d..a020f35596c 100644
--- a/source/blender/blenkernel/intern/lib_id_remapper.cc
+++ b/source/blender/blenkernel/intern/lib_id_remapper.cc
@@ -17,19 +17,19 @@ struct IDRemapper {
     mappings.add_as(old_id, new_id);
   }
 
-  bool apply(ID **id_ptr_ptr) const
+  IDRemapperApplyResult apply(ID **id_ptr_ptr) const
   {
     BLI_assert(id_ptr_ptr != nullptr);
     if (*id_ptr_ptr == nullptr) {
-      return false;
+      return ID_REMAP_SOURCE_NOT_MAPPABLE;
     }
 
     if (!mappings.contains(*id_ptr_ptr)) {
-      return false;
+      return ID_REMAP_SOURCE_UNAVAILABLE;
     }
 
     *id_ptr_ptr = mappings.lookup(*id_ptr_ptr);
-    return true;
+    return ID_REMAP_SOURCE_REMAPPED;
   }
 };
 
@@ -74,7 +74,7 @@ void BKE_id_remapper_add(IDRemapper *id_remapper, ID *old_id, ID *new_id)
   remapper->add(old_id, new_id);
 }
 
-bool BKE_id_remapper_apply(const IDRemapper *id_remapper, ID **id_ptr_ptr)
+IDRemapperApplyResult BKE_id_remapper_apply(const IDRemapper *id_remapper, ID **id_ptr_ptr)
 {
   const blender::bke::id::remapper::IDRemapper *remapper = unwrap_const(id_remapper);
   return remapper->apply(id_ptr_ptr);
diff --git a/source/blender/blenkernel/intern/lib_id_remapper_test.cc b/source/blender/blenkernel/intern/lib_id_remapper_test.cc
new file mode 100644
index 00000000000..d802a59d869
--- /dev/null
+++ b/source/blender/blenkernel/intern/lib_id_remapper_test.cc
@@ -0,0 +1,78 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2021 by Blender Foundation.
+ */
+#include "testing/testing.h"
+
+#include "BKE_lib_remap.h"
+
+#include "DNA_ID.h"
+
+namespace blender::bke::id::remapper::tests {
+
+TEST(lib_id_remapper, unavailable)
+{
+  ID id1;
+  ID *idp = &id1;
+
+  IDRemapper *remapper = BKE_id_remapper_create();
+  IDRemapperApplyResult result = BKE_id_remapper_apply(remapper, &idp);
+  EXPECT_EQ(result, ID_REMAP_SOURCE_UNAVAILABLE);
+
+  BKE_id_remapper_free(remapper);
+}
+
+TEST(lib_id_remapper, not_mappable)
+{
+  ID *idp = nullptr;
+
+  IDRemapper *remapper = BKE_id_remapper_create();
+  IDRemapperApplyResult result = BKE_id_remapper_apply(remapper, &idp);
+  EXPECT_EQ(result, ID_REMAP_SOURCE_NOT_MAPPABLE);
+
+  BKE_id_remapper_free(remapper);
+}
+
+TEST(lib_id_remapper, mapped)
+{
+  ID id1;
+  ID id2;
+  ID *idp = &id1;
+
+  IDRemapper *remapper = BKE_id_remapper_create();
+  BKE_id_remapper_add(remapper, &id1, &id2);
+  IDRemapperApplyResult result = BKE_id_remapper_apply(remapper, &idp);
+  EXPECT_EQ(result, ID_REMAP_SOURCE_REMAPPED);
+  EXPECT_EQ(idp, &id2);
+
+  BKE_id_remapper_free(remapper);
+}
+
+TEST(lib_id_remapper, mapped_to_nullptr)
+{
+  ID id1;
+  ID *idp = &id1;
+
+  IDRemapper *remapper = BKE_id_remapper_create();
+  BKE_id_remapper_add(remapper, &id1, nullptr);
+  IDRemapperApplyResult result = BKE_id_remapper_apply(remapper, &idp);
+  EXPECT_EQ(result, ID_REMAP_SOURCE_REMAPPED);
+  EXPECT_EQ(idp, nullptr);
+
+  BKE_id_remapper_free(remapper);
+}
+
+}  // namespace blender::bke::id::remapper::tests



More information about the Bf-blender-cvs mailing list