Blender V4.3
lib_id_remapper_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "testing/testing.h"
6
7#include "BKE_idtype.hh"
8#include "BKE_lib_remap.hh"
9
10#include "BLI_string.h"
11
12#include "DNA_ID.h"
13
14using namespace blender::bke::id;
15
17
18TEST(lib_id_remapper, unavailable)
19{
21
22 ID id1;
23 ID *idp = &id1;
24
25 IDRemapper remapper;
26 IDRemapperApplyResult result = remapper.apply(&idp, ID_REMAP_APPLY_DEFAULT);
28}
29
30TEST(lib_id_remapper, not_mappable)
31{
33
34 ID *idp = nullptr;
35
36 IDRemapper remapper;
37 IDRemapperApplyResult result = remapper.apply(&idp, ID_REMAP_APPLY_DEFAULT);
39}
40
41TEST(lib_id_remapper, mapped)
42{
44
45 ID id1;
46 ID id2;
47 ID *idp = &id1;
48 STRNCPY(id1.name, "OB1");
49 STRNCPY(id2.name, "OB2");
50
51 IDRemapper remapper;
52 remapper.add(&id1, &id2);
53 IDRemapperApplyResult result = remapper.apply(&idp, ID_REMAP_APPLY_DEFAULT);
55 EXPECT_EQ(idp, &id2);
56}
57
58TEST(lib_id_remapper, unassigned)
59{
61
62 ID id1;
63 ID *idp = &id1;
64 STRNCPY(id1.name, "OB2");
65
66 IDRemapper remapper;
67 remapper.add(&id1, nullptr);
68 IDRemapperApplyResult result = remapper.apply(&idp, ID_REMAP_APPLY_DEFAULT);
70 EXPECT_EQ(idp, nullptr);
71}
72
73TEST(lib_id_remapper, unassign_when_mapped_to_self)
74{
76
77 ID id_self;
78 ID id1;
79 ID id2;
80 ID *idp;
81
82 STRNCPY(id_self.name, "OBSelf");
83 STRNCPY(id1.name, "OB1");
84 STRNCPY(id2.name, "OB2");
85
86 /* Default mapping behavior. Should just remap to id2. */
87 idp = &id1;
88 IDRemapper remapper;
89 remapper.add(&id1, &id2);
90 IDRemapperApplyResult result = remapper.apply(
93 EXPECT_EQ(idp, &id2);
94
95 /* Default mapping behavior. Should unassign. */
96 idp = &id1;
97 remapper.clear();
98 remapper.add(&id1, nullptr);
99 result = remapper.apply(&idp, ID_REMAP_APPLY_UNMAP_WHEN_REMAPPING_TO_SELF, &id_self);
101 EXPECT_EQ(idp, nullptr);
102
103 /* Unmap when remapping to self behavior. Should unassign. */
104 idp = &id1;
105 remapper.clear();
106 remapper.add(&id1, &id_self);
107 result = remapper.apply(&idp, ID_REMAP_APPLY_UNMAP_WHEN_REMAPPING_TO_SELF, &id_self);
109 EXPECT_EQ(idp, nullptr);
110}
111
112} // namespace blender::bke::id::tests
void BKE_idtype_init()
Definition idtype.cc:127
IDRemapperApplyResult
@ ID_REMAP_RESULT_SOURCE_REMAPPED
@ ID_REMAP_RESULT_SOURCE_UNASSIGNED
@ ID_REMAP_RESULT_SOURCE_NOT_MAPPABLE
@ ID_REMAP_RESULT_SOURCE_UNAVAILABLE
@ ID_REMAP_APPLY_UNMAP_WHEN_REMAPPING_TO_SELF
@ ID_REMAP_APPLY_DEFAULT
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
#define STRNCPY(dst, src)
Definition BLI_string.h:593
ID and Library types, which are fundamental for SDNA.
IDRemapperApplyResult apply(ID **r_id_ptr, IDRemapperApplyOptions options, ID *id_self=nullptr) const
void add(ID *old_id, ID *new_id)
TEST(lib_id_remapper, unavailable)
Definition DNA_ID.h:413
char name[66]
Definition DNA_ID.h:425