[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