Blender V4.3
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_ABSOLUTE_MADE_RELATIVE RELATIVE_ROOT ".." SEP_STR TEXT_PATH_ITEM
41#define TEXT_PATH_RELATIVE RELATIVE_ROOT TEXT_PATH_ITEM
42#define TEXT_PATH_RELATIVE_MADE_ABSOLUTE BASE_DIR TEXT_PATH_ITEM
43
44#define MOVIECLIP_PATH_ITEM "movieclips" SEP_STR "movieclip.avi"
45#define MOVIECLIP_PATH_ABSOLUTE ABSOLUTE_ROOT MOVIECLIP_PATH_ITEM
46#define MOVIECLIP_PATH_ABSOLUTE_MADE_RELATIVE RELATIVE_ROOT ".." SEP_STR MOVIECLIP_PATH_ITEM
47#define MOVIECLIP_PATH_RELATIVE RELATIVE_ROOT MOVIECLIP_PATH_ITEM
48#define MOVIECLIP_PATH_RELATIVE_MADE_ABSOLUTE BASE_DIR MOVIECLIP_PATH_ITEM
49
50class BPathTest : public testing::Test {
51 public:
52 static void SetUpTestSuite()
53 {
54 CLG_init();
56 }
57 static void TearDownTestSuite()
58 {
59 CLG_exit();
60 }
61
62 void SetUp() override
63 {
66
67 BKE_id_new(bmain, ID_TXT, nullptr);
68 BKE_id_new(bmain, ID_MC, nullptr);
69 }
70
71 void TearDown() override
72 {
74 }
75
77};
78
79TEST_F(BPathTest, rebase_on_relative)
80{
81 /* Test on relative paths, should be modified. */
82 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
84
85 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
87
89
90 EXPECT_STREQ(text->filepath, RELATIVE_ROOT ".." SEP_STR TEXT_PATH_ITEM);
91 EXPECT_STREQ(movie_clip->filepath, RELATIVE_ROOT ".." SEP_STR MOVIECLIP_PATH_ITEM);
92}
93
94TEST_F(BPathTest, rebase_on_absolute)
95{
96 /* Test on absolute paths, should not be modified. */
97 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
99
100 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
102
104
105 EXPECT_STREQ(text->filepath, TEXT_PATH_ABSOLUTE);
106 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE);
107}
108
109TEST_F(BPathTest, convert_to_relative)
110{
111 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
113
114 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
116
117 BKE_bpath_relative_convert(bmain, BASE_DIR, nullptr);
118
119 /* Already relative path should not be modified. */
120 EXPECT_STREQ(text->filepath, TEXT_PATH_RELATIVE);
121 /* Absolute path should be modified. */
122 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE_MADE_RELATIVE);
123}
124
125TEST_F(BPathTest, convert_to_absolute)
126{
127 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
129
130 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
132
133 BKE_bpath_absolute_convert(bmain, BASE_DIR, nullptr);
134
135 /* Relative path should be modified. */
136 EXPECT_STREQ(text->filepath, TEXT_PATH_RELATIVE_MADE_ABSOLUTE);
137 /* Already absolute path should not be modified. */
138 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE);
139}
140
141TEST_F(BPathTest, list_backup_restore)
142{
143 Text *text = reinterpret_cast<Text *>(bmain->texts.first);
145
146 MovieClip *movie_clip = reinterpret_cast<MovieClip *>(bmain->movieclips.first);
148
149 void *path_list_handle = BKE_bpath_list_backup(bmain, static_cast<eBPathForeachFlag>(0));
150
151 ListBase *path_list = reinterpret_cast<ListBase *>(path_list_handle);
152 EXPECT_EQ(BLI_listbase_count(path_list), 2);
153
154 MEM_freeN(text->filepath);
155 text->filepath = BLI_strdup(TEXT_PATH_ABSOLUTE);
157
158 BKE_bpath_list_restore(bmain, static_cast<eBPathForeachFlag>(0), path_list_handle);
159
160 EXPECT_STREQ(text->filepath, TEXT_PATH_RELATIVE);
161 EXPECT_STREQ(movie_clip->filepath, MOVIECLIP_PATH_ABSOLUTE);
162 EXPECT_EQ(BLI_listbase_count(path_list), 0);
163
164 BKE_bpath_list_free(path_list_handle);
165}
166
167} // namespace blender::bke::tests
void BKE_bpath_relative_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:615
void * BKE_bpath_list_backup(Main *bmain, eBPathForeachFlag flag)
Definition bpath.cc:689
void BKE_bpath_absolute_convert(Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:624
void BKE_bpath_list_restore(Main *bmain, eBPathForeachFlag flag, void *path_list_handle)
Definition bpath.cc:703
void BKE_bpath_relative_rebase(Main *bmain, const char *basedir_src, const char *basedir_dst, ReportList *reports, BPathSummary *r_summary=nullptr)
Definition bpath.cc:475
eBPathForeachFlag
Definition BKE_bpath.hh:26
void BKE_bpath_list_free(void *path_list_handle)
Definition bpath.cc:715
void BKE_idtype_init()
Definition idtype.cc:127
void * BKE_id_new(Main *bmain, short type, const char *name)
Definition lib_id.cc:1482
Main * BKE_main_new(void)
Definition main.cc:45
void BKE_main_free(Main *bmain)
Definition main.cc:175
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
Definition string.c:40
#define STRNCPY(dst, src)
Definition BLI_string.h:593
void CLG_exit(void)
Definition clog.c:706
void CLG_init(void)
Definition clog.c:699
@ ID_MC
@ ID_TXT
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:42
#define MOVIECLIP_PATH_ABSOLUTE_MADE_RELATIVE
Definition bpath_test.cc:46
#define MOVIECLIP_PATH_RELATIVE
Definition bpath_test.cc:47
#define TEXT_PATH_RELATIVE
Definition bpath_test.cc:41
#define TEXT_PATH_ABSOLUTE
Definition bpath_test.cc:39
#define MOVIECLIP_PATH_ITEM
Definition bpath_test.cc:44
#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:45
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
TEST_F(BKE_armature_find_selected_bones_test, some_bones_selected)
char filepath[1024]
Definition BKE_main.hh:136
char filepath[1024]
char * filepath
#define SEP_STR
Definition unit.cc:39