Blender V5.0
bpath_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4#include "testing/testing.h"
5
6#include "CLG_log.h"
7
8#include "BKE_bpath.hh"
9#include "BKE_idtype.hh"
10#include "BKE_lib_id.hh"
11#include "BKE_main.hh"
12
13#include "MEM_guardedalloc.h"
14
15#include "DNA_listBase.h"
16#include "DNA_movieclip_types.h"
17#include "DNA_text_types.h"
18
19#include "BLI_listbase.h"
20#include "BLI_path_utils.hh"
21#include "BLI_string.h"
22
23namespace blender::bke::tests {
24
25#ifdef WIN32
26# define ABSOLUTE_ROOT "C:" SEP_STR
27#else
28# define ABSOLUTE_ROOT SEP_STR
29#endif
30
31#define RELATIVE_ROOT "//"
32#define BASE_DIR ABSOLUTE_ROOT "blendfiles" SEP_STR
33#define REBASE_DIR BASE_DIR "rebase" SEP_STR
34
35#define BLENDFILE_NAME "bpath.blend"
36#define BLENDFILE_PATH BASE_DIR BLENDFILE_NAME
37
38#define TEXT_PATH_ITEM "texts" SEP_STR "text.txt"
39#define TEXT_PATH_ABSOLUTE ABSOLUTE_ROOT TEXT_PATH_ITEM
40#define TEXT_PATH_RELATIVE RELATIVE_ROOT TEXT_PATH_ITEM
41#define TEXT_PATH_RELATIVE_MADE_ABSOLUTE BASE_DIR TEXT_PATH_ITEM
42
43#define MOVIECLIP_PATH_ITEM "movieclips" SEP_STR "movieclip.avi"
44#define MOVIECLIP_PATH_ABSOLUTE ABSOLUTE_ROOT MOVIECLIP_PATH_ITEM
45#define MOVIECLIP_PATH_ABSOLUTE_MADE_RELATIVE RELATIVE_ROOT ".." SEP_STR MOVIECLIP_PATH_ITEM
46#define MOVIECLIP_PATH_RELATIVE RELATIVE_ROOT MOVIECLIP_PATH_ITEM
47#define MOVIECLIP_PATH_RELATIVE_MADE_ABSOLUTE BASE_DIR MOVIECLIP_PATH_ITEM
48
49class BPathTest : public testing::Test {
50 public:
51 static void SetUpTestSuite()
52 {
53 CLG_init();
55 }
56 static void TearDownTestSuite()
57 {
58 CLG_exit();
59 }
60
61 void SetUp() override
62 {
64 STRNCPY(bmain->filepath, BLENDFILE_PATH);
65
66 BKE_id_new<Text>(bmain, nullptr);
68 }
69
70 void TearDown() override
71 {
73 }
74
76};
77
78TEST_F(BPathTest, rebase_on_relative)
79{
80 /* Test on relative paths, should be modified. */
81 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
83
84 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
86
88
89 EXPECT_STREQ(text->filepath, RELATIVE_ROOT ".." SEP_STR TEXT_PATH_ITEM);
90 EXPECT_STREQ(movie_clip->filepath, RELATIVE_ROOT ".." SEP_STR MOVIECLIP_PATH_ITEM);
91}
92
93TEST_F(BPathTest, rebase_on_absolute)
94{
95 /* Test on absolute paths, should not be modified. */
96 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
98
99 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
101
103
104 EXPECT_STREQ(text->filepath, TEXT_PATH_ABSOLUTE);
105 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE);
106}
107
108TEST_F(BPathTest, convert_to_relative)
109{
110 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
112
113 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
115
116 BKE_bpath_relative_convert(bmain, BASE_DIR, nullptr);
117
118 /* Already relative path should not be modified. */
119 EXPECT_STREQ(text->filepath, TEXT_PATH_RELATIVE);
120 /* Absolute path should be modified. */
121 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE_MADE_RELATIVE);
122}
123
124TEST_F(BPathTest, convert_to_absolute)
125{
126 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
128
129 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
131
132 BKE_bpath_absolute_convert(bmain, BASE_DIR, nullptr);
133
134 /* Relative path should be modified. */
135 EXPECT_STREQ(text->filepath, TEXT_PATH_RELATIVE_MADE_ABSOLUTE);
136 /* Already absolute path should not be modified. */
137 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE);
138}
139
140TEST_F(BPathTest, list_backup_restore)
141{
142 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
144
145 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
147
148 void *path_list_handle = BKE_bpath_list_backup(bmain, static_cast<eBPathForeachFlag>(0));
149
150 ListBase *path_list = reinterpret_cast<ListBase *>(path_list_handle);
151 EXPECT_EQ(BLI_listbase_count(path_list), 2);
152
153 MEM_freeN(text->filepath);
156
157 BKE_bpath_list_restore(bmain, static_cast<eBPathForeachFlag>(0), path_list_handle);
158
159 EXPECT_STREQ(text->filepath, TEXT_PATH_RELATIVE);
160 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE);
161 EXPECT_EQ(BLI_listbase_count(path_list), 0);
162
163 BKE_bpath_list_free(path_list_handle);
164}
165
166} // namespace blender::bke::tests
void BKE_bpath_relative_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:618
void * BKE_bpath_list_backup(Main *bmain, eBPathForeachFlag flag)
Definition bpath.cc:692
void BKE_bpath_absolute_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:627
void BKE_bpath_list_restore(Main *bmain, eBPathForeachFlag flag, void *path_list_handle)
Definition bpath.cc:706
void BKE_bpath_relative_rebase(Main *bmain, const char *basedir_src, const char *basedir_dst, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:478
eBPathForeachFlag
Definition BKE_bpath.hh:32
void BKE_bpath_list_free(void *path_list_handle)
Definition bpath.cc:718
void BKE_idtype_init()
Definition idtype.cc:121
void * BKE_id_new(Main *bmain, short type, const char *name)
Definition lib_id.cc:1514
Main * BKE_main_new()
Definition main.cc:89
void BKE_main_free(Main *bmain)
Definition main.cc:192
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:524
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
Definition string.cc:41
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:693
void CLG_exit()
Definition clog.cc:880
void CLG_init()
Definition clog.cc:873
These structs are the foundation for all linked lists in the library system.
Read Guarded memory(de)allocation.
#define REBASE_DIR
Definition bpath_test.cc:33
#define TEXT_PATH_RELATIVE_MADE_ABSOLUTE
Definition bpath_test.cc:41
#define MOVIECLIP_PATH_ABSOLUTE_MADE_RELATIVE
Definition bpath_test.cc:45
#define MOVIECLIP_PATH_RELATIVE
Definition bpath_test.cc:46
#define TEXT_PATH_RELATIVE
Definition bpath_test.cc:40
#define TEXT_PATH_ABSOLUTE
Definition bpath_test.cc:39
#define MOVIECLIP_PATH_ITEM
Definition bpath_test.cc:43
#define BASE_DIR
Definition bpath_test.cc:32
#define TEXT_PATH_ITEM
Definition bpath_test.cc:38
#define RELATIVE_ROOT
Definition bpath_test.cc:31
#define BLENDFILE_PATH
Definition bpath_test.cc:36
#define MOVIECLIP_PATH_ABSOLUTE
Definition bpath_test.cc:44
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
TEST_F(ArmatureDeformTest, MeshDeform)
char filepath[1024]
char * filepath
#define SEP_STR
Definition unit.cc:39