Blender
V5.0
source
blender
blenkernel
intern
brush_test.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2025 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
#include "testing/testing.h"
5
6
#include "
BKE_brush.hh
"
7
#include "
BKE_idtype.hh
"
8
#include "
BKE_lib_id.hh
"
9
#include "
BKE_main.hh
"
10
11
#include "
BLI_listbase.h
"
12
13
#include "
DNA_brush_types.h
"
14
#include "
DNA_material_types.h
"
15
#include "
DNA_node_types.h
"
16
17
class
BrushTest
:
public
testing::Test {
18
public
:
19
Main
*
bmain
=
nullptr
;
20
21
static
void
SetUpTestSuite
()
22
{
23
BKE_idtype_init
();
24
}
25
26
void
SetUp
()
override
27
{
28
bmain
=
BKE_main_new
();
29
}
30
31
void
TearDown
()
override
32
{
33
BKE_main_free
(
bmain
);
34
}
35
};
36
37
static
void
check_id_and_name
(
const
ID
*a,
const
ID
*
b
)
38
{
39
EXPECT_NE(a,
b
) <<
"ID "
<< a->
name
<<
" and "
<<
b
->name <<
"should be different pointers"
;
40
EXPECT_EQ
(a->
us
, 1) <<
"ID "
<< a->
name
<<
" should have 1 user"
;
41
EXPECT_EQ
(
b
->us, 1) <<
"ID "
<<
b
->name <<
" should have 1 user"
;
42
EXPECT_STRNE(a->
name
,
b
->name);
43
}
44
45
static
void
check_embedded_copy
(
const
ID
*a,
const
ID
*
b
)
46
{
47
EXPECT_NE(a,
b
) <<
"ID "
<< a->
name
<<
" and "
<<
b
->name <<
"should be different pointers"
;
48
EXPECT_EQ
(a->
us
, 0) <<
"ID "
<< a->
name
<<
" should have 0 users"
;
49
EXPECT_EQ
(
b
->us, 0) <<
"ID "
<<
b
->name <<
" should have 0 users"
;
50
EXPECT_TRUE(a->
flag
&
ID_FLAG_EMBEDDED_DATA
);
51
EXPECT_TRUE(
b
->flag &
ID_FLAG_EMBEDDED_DATA
);
52
}
53
54
TEST_F
(
BrushTest
, deep_copy)
55
{
56
Brush
*brush =
BKE_brush_add
(bmain,
"UnitTestBrush"
,
OB_MODE_SCULPT
);
57
/* TODO: Ideally this shouldn't be needed, but BKE_brush_add generates an extra user. Remove this
58
* once that has been fixed. */
59
id_us_min
(&brush->
id
);
60
61
/* Normal Linked Data */
62
brush->
paint_curve
=
static_cast<
PaintCurve
*
>
(
BKE_id_new
(bmain,
ID_PC
,
"UnitTestPaintCurve"
));
63
brush->
mtex
.
tex
=
static_cast<
Tex
*
>
(
BKE_id_new
(bmain,
ID_TE
,
"UnitTestTexture"
));
64
brush->
mtex
.
tex
->
ima
=
static_cast<
Image
*
>
(
BKE_id_new
(bmain,
ID_IM
,
"UnitTestImage"
));
65
66
/* Embedded Data */
67
brush->
mtex
.
tex
->
nodetree
=
BKE_id_new_nomain<bNodeTree>
(
"UnitTestNodeTree"
);
68
brush->
mtex
.
tex
->
nodetree
->
id
.
flag
|=
ID_FLAG_EMBEDDED_DATA
;
69
70
Brush
*duplicated_brush =
BKE_brush_duplicate
(
71
bmain, brush,
USER_DUP_OBDATA
|
USER_DUP_LINKED_ID
,
LIB_ID_DUPLICATE_IS_ROOT_ID
);
72
73
check_id_and_name
(&brush->
id
, &duplicated_brush->
id
);
74
check_id_and_name
(&brush->
paint_curve
->
id
, &duplicated_brush->
paint_curve
->
id
);
75
check_id_and_name
(&brush->
mtex
.
tex
->
id
, &duplicated_brush->
mtex
.
tex
->
id
);
76
check_id_and_name
(&brush->
mtex
.
tex
->
ima
->
id
, &duplicated_brush->
mtex
.
tex
->
ima
->
id
);
77
78
check_embedded_copy
(&brush->
mtex
.
tex
->
nodetree
->
id
, &duplicated_brush->
mtex
.
tex
->
nodetree
->
id
);
79
80
EXPECT_TRUE(
BLI_listbase_is_empty
(&bmain->nodetrees));
81
}
82
83
TEST_F
(
BrushTest
, deep_copy_grease_pencil_brush)
84
{
85
/* Grease pencil brushes potentially have more ID linked to them, hence a separate test */
86
87
Brush
*brush =
BKE_brush_add
(bmain,
"UnitTestBrush"
,
OB_MODE_PAINT_GREASE_PENCIL
);
88
/* TODO: Ideally this shouldn't be needed, but #BKE_brush_add generates an extra user.
89
* Remove this once that has been fixed. */
90
id_us_min
(&brush->
id
);
91
92
/* Normal Linked Data */
93
brush->
paint_curve
=
static_cast<
PaintCurve
*
>
(
BKE_id_new
(bmain,
ID_PC
,
"UnitTestPaintCurve"
));
94
brush->
gpencil_settings
->
material
=
static_cast<
Material
*
>
(
95
BKE_id_new
(bmain,
ID_MA
,
"UnitTestMaterial"
));
96
brush->
gpencil_settings
->
material_alt
=
static_cast<
Material
*
>
(
97
BKE_id_new
(bmain,
ID_MA
,
"UnitTestMaterialAlt"
));
98
99
/* Embedded Data */
100
brush->
gpencil_settings
->
material
->
nodetree
=
BKE_id_new_nomain<bNodeTree>
(
"UnitTestNodeTree"
);
101
brush->
gpencil_settings
->
material
->
nodetree
->
id
.
flag
|=
ID_FLAG_EMBEDDED_DATA
;
102
brush->
gpencil_settings
->
material_alt
->
nodetree
=
BKE_id_new_nomain<bNodeTree>
(
103
"UnitTestNodeTree2"
);
104
brush->
gpencil_settings
->
material_alt
->
nodetree
->
id
.
flag
|=
ID_FLAG_EMBEDDED_DATA
;
105
106
Brush
*duplicated_brush =
BKE_brush_duplicate
(
107
bmain, brush,
USER_DUP_OBDATA
|
USER_DUP_LINKED_ID
,
LIB_ID_DUPLICATE_IS_ROOT_ID
);
108
109
check_id_and_name
(&brush->
id
, &duplicated_brush->
id
);
110
check_id_and_name
(&brush->
paint_curve
->
id
, &duplicated_brush->
paint_curve
->
id
);
111
check_id_and_name
(&brush->
gpencil_settings
->
material
->
id
,
112
&duplicated_brush->
gpencil_settings
->
material
->
id
);
113
check_id_and_name
(&brush->
gpencil_settings
->
material_alt
->
id
,
114
&duplicated_brush->
gpencil_settings
->
material_alt
->
id
);
115
116
check_embedded_copy
(&brush->
gpencil_settings
->
material
->
nodetree
->
id
,
117
&duplicated_brush->
gpencil_settings
->
material
->
nodetree
->
id
);
118
check_embedded_copy
(&brush->
gpencil_settings
->
material_alt
->
nodetree
->
id
,
119
&duplicated_brush->
gpencil_settings
->
material_alt
->
nodetree
->
id
);
120
121
EXPECT_TRUE(
BLI_listbase_is_empty
(&bmain->nodetrees));
122
}
BKE_brush.hh
BKE_brush_add
Brush * BKE_brush_add(Main *bmain, const char *name, eObjectMode ob_mode)
Definition
brush.cc:627
BKE_brush_duplicate
Brush * BKE_brush_duplicate(Main *bmain, Brush *brush, eDupli_ID_Flags dupflag, uint duplicate_options)
Definition
brush.cc:690
BKE_idtype.hh
BKE_idtype_init
void BKE_idtype_init()
Definition
idtype.cc:121
BKE_lib_id.hh
BKE_id_new
void * BKE_id_new(Main *bmain, short type, const char *name)
Definition
lib_id.cc:1514
id_us_min
void id_us_min(ID *id)
Definition
lib_id.cc:366
LIB_ID_DUPLICATE_IS_ROOT_ID
@ LIB_ID_DUPLICATE_IS_ROOT_ID
Definition
BKE_lib_id.hh:470
BKE_id_new_nomain
void * BKE_id_new_nomain(short type, const char *name)
Definition
lib_id.cc:1519
BKE_main.hh
BKE_main_new
Main * BKE_main_new()
Definition
main.cc:89
BKE_main_free
void BKE_main_free(Main *bmain)
Definition
main.cc:192
EXPECT_EQ
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
BLI_listbase.h
BLI_listbase_is_empty
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
Definition
BLI_listbase.h:289
ID_FLAG_EMBEDDED_DATA
@ ID_FLAG_EMBEDDED_DATA
Definition
DNA_ID.h:774
ID_TE
@ ID_TE
Definition
DNA_ID_enums.h:124
ID_IM
@ ID_IM
Definition
DNA_ID_enums.h:125
ID_MA
@ ID_MA
Definition
DNA_ID_enums.h:123
ID_PC
@ ID_PC
Definition
DNA_ID_enums.h:148
DNA_brush_types.h
DNA_material_types.h
DNA_node_types.h
OB_MODE_SCULPT
@ OB_MODE_SCULPT
Definition
DNA_object_enums.h:17
OB_MODE_PAINT_GREASE_PENCIL
@ OB_MODE_PAINT_GREASE_PENCIL
Definition
DNA_object_enums.h:24
USER_DUP_LINKED_ID
@ USER_DUP_LINKED_ID
Definition
DNA_userdef_enums.h:51
USER_DUP_OBDATA
@ USER_DUP_OBDATA
Definition
DNA_userdef_enums.h:44
check_id_and_name
static void check_id_and_name(const ID *a, const ID *b)
Definition
brush_test.cc:37
check_embedded_copy
static void check_embedded_copy(const ID *a, const ID *b)
Definition
brush_test.cc:45
TEST_F
TEST_F(BrushTest, deep_copy)
Definition
brush_test.cc:54
BrushTest
Definition
brush_test.cc:17
BrushTest::bmain
Main * bmain
Definition
brush_test.cc:19
BrushTest::SetUpTestSuite
static void SetUpTestSuite()
Definition
brush_test.cc:21
BrushTest::SetUp
void SetUp() override
Definition
brush_test.cc:26
BrushTest::TearDown
void TearDown() override
Definition
brush_test.cc:31
b
b
Definition
compositor_morphological_distance_infos.hh:24
BrushGpencilSettings::material
struct Material * material
Definition
DNA_brush_types.h:132
BrushGpencilSettings::material_alt
struct Material * material_alt
Definition
DNA_brush_types.h:134
Brush
Definition
DNA_brush_types.h:166
Brush::mtex
struct MTex mtex
Definition
DNA_brush_types.h:176
Brush::id
ID id
Definition
DNA_brush_types.h:173
Brush::gpencil_settings
struct BrushGpencilSettings * gpencil_settings
Definition
DNA_brush_types.h:419
Brush::paint_curve
struct PaintCurve * paint_curve
Definition
DNA_brush_types.h:182
ID
Definition
DNA_ID.h:414
ID::name
char name[258]
Definition
DNA_ID.h:432
ID::us
int us
Definition
DNA_ID.h:443
ID::flag
short flag
Definition
DNA_ID.h:438
Image
Definition
DNA_image_types.h:133
Image::id
ID id
Definition
DNA_image_types.h:139
MTex::tex
struct Tex * tex
Definition
DNA_texture_types.h:34
Main
Definition
BKE_main.hh:160
Material
Definition
DNA_material_types.h:163
Material::id
ID id
Definition
DNA_material_types.h:170
Material::nodetree
struct bNodeTree * nodetree
Definition
DNA_material_types.h:201
PaintCurve
Definition
DNA_brush_types.h:472
PaintCurve::id
ID id
Definition
DNA_brush_types.h:478
Tex
Definition
DNA_texture_types.h:73
Tex::id
ID id
Definition
DNA_texture_types.h:80
Tex::nodetree
struct bNodeTree * nodetree
Definition
DNA_texture_types.h:129
Tex::ima
struct Image * ima
Definition
DNA_texture_types.h:130
bNodeTree::id
ID id
Definition
DNA_node_types.h:765
Generated on
for Blender by
doxygen
1.16.1