Blender V4.3
util_string_test.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "testing/testing.h"
6
7#include "util/string.h"
8
10
11/* ******** Tests for string_printf() ******** */
12
13TEST(util_string_printf, no_format)
14{
15 string str = string_printf("foo bar");
16 EXPECT_EQ("foo bar", str);
17}
18
19TEST(util_string_printf, int_number)
20{
21 string str = string_printf("foo %d bar", 314);
22 EXPECT_EQ("foo 314 bar", str);
23}
24
25TEST(util_string_printf, float_number_default_precision)
26{
27 string str = string_printf("foo %f bar", 3.1415);
28 EXPECT_EQ("foo 3.141500 bar", str);
29}
30
31TEST(util_string_printf, float_number_custom_precision)
32{
33 string str = string_printf("foo %.1f bar", 3.1415);
34 EXPECT_EQ("foo 3.1 bar", str);
35}
36
37/* ******** Tests for string_printf() ******** */
38
39TEST(util_string_iequals, empty_a)
40{
41 bool equals = string_iequals("", "foo");
42 EXPECT_FALSE(equals);
43}
44
45TEST(util_string_iequals, empty_b)
46{
47 bool equals = string_iequals("foo", "");
48 EXPECT_FALSE(equals);
49}
50
51TEST(util_string_iequals, same_register)
52{
53 bool equals = string_iequals("foo", "foo");
54 EXPECT_TRUE(equals);
55}
56
57TEST(util_string_iequals, different_register)
58{
59 bool equals = string_iequals("XFoo", "XfoO");
60 EXPECT_TRUE(equals);
61}
62
63/* ******** Tests for string_split() ******** */
64
65TEST(util_string_split, empty)
66{
67 vector<string> tokens;
68 string_split(tokens, "");
69 EXPECT_EQ(tokens.size(), 0);
70}
71
72TEST(util_string_split, only_spaces)
73{
74 vector<string> tokens;
75 string_split(tokens, " \t\t \t");
76 EXPECT_EQ(tokens.size(), 0);
77}
78
79TEST(util_string_split, single)
80{
81 vector<string> tokens;
82 string_split(tokens, "foo");
83 EXPECT_EQ(tokens.size(), 1);
84 EXPECT_EQ(tokens[0], "foo");
85}
86
87TEST(util_string_split, simple)
88{
89 vector<string> tokens;
90 string_split(tokens, "foo a bar b");
91 EXPECT_EQ(tokens.size(), 4);
92 EXPECT_EQ(tokens[0], "foo");
93 EXPECT_EQ(tokens[1], "a");
94 EXPECT_EQ(tokens[2], "bar");
95 EXPECT_EQ(tokens[3], "b");
96}
97
98TEST(util_string_split, multiple_spaces)
99{
100 vector<string> tokens;
101 string_split(tokens, " \t foo \ta bar b\t ");
102 EXPECT_EQ(tokens.size(), 4);
103 EXPECT_EQ(tokens[0], "foo");
104 EXPECT_EQ(tokens[1], "a");
105 EXPECT_EQ(tokens[2], "bar");
106 EXPECT_EQ(tokens[3], "b");
107}
108
109/* ******** Tests for string_replace() ******** */
110
111TEST(util_string_replace, empty_haystack_and_other)
112{
113 string str = "";
114 string_replace(str, "x", "");
115 EXPECT_EQ(str, "");
116}
117
118TEST(util_string_replace, empty_haystack)
119{
120 string str = "";
121 string_replace(str, "x", "y");
122 EXPECT_EQ(str, "");
123}
124
125TEST(util_string_replace, empty_other)
126{
127 string str = "x";
128 string_replace(str, "x", "");
129 EXPECT_EQ(str, "");
130}
131
132TEST(util_string_replace, long_haystack_empty_other)
133{
134 string str = "a x b xxc";
135 string_replace(str, "x", "");
136 EXPECT_EQ(str, "a b c");
137}
138
139TEST(util_string_replace, long_haystack)
140{
141 string str = "a x b xxc";
142 string_replace(str, "x", "FOO");
143 EXPECT_EQ(str, "a FOO b FOOFOOc");
144}
145
146/* ******** Tests for string_endswith() ******** */
147
148TEST(util_string_endswith, empty_both)
149{
150 bool endswith = string_endswith("", "");
151 EXPECT_TRUE(endswith);
152}
153
154TEST(util_string_endswith, empty_string)
155{
156 bool endswith = string_endswith("", "foo");
157 EXPECT_FALSE(endswith);
158}
159
160TEST(util_string_endswith, empty_end)
161{
162 bool endswith = string_endswith("foo", "");
163 EXPECT_TRUE(endswith);
164}
165
166TEST(util_string_endswith, simple_true)
167{
168 bool endswith = string_endswith("foo bar", "bar");
169 EXPECT_TRUE(endswith);
170}
171
172TEST(util_string_endswith, simple_false)
173{
174 bool endswith = string_endswith("foo bar", "foo");
175 EXPECT_FALSE(endswith);
176}
177
178/* ******** Tests for string_strip() ******** */
179
180TEST(util_string_strip, empty)
181{
182 string str = string_strip("");
183 EXPECT_EQ(str, "");
184}
185
186TEST(util_string_strip, only_spaces)
187{
188 string str = string_strip(" ");
189 EXPECT_EQ(str, "");
190}
191
192TEST(util_string_strip, no_spaces)
193{
194 string str = string_strip("foo bar");
195 EXPECT_EQ(str, "foo bar");
196}
197
198TEST(util_string_strip, with_spaces)
199{
200 string str = string_strip(" foo bar ");
201 EXPECT_EQ(str, "foo bar");
202}
203
204/* ******** Tests for string_remove_trademark() ******** */
205
206TEST(util_string_remove_trademark, empty)
207{
208 string str = string_remove_trademark("");
209 EXPECT_EQ(str, "");
210}
211
212TEST(util_string_remove_trademark, no_trademark)
213{
214 string str = string_remove_trademark("foo bar");
215 EXPECT_EQ(str, "foo bar");
216}
217
218TEST(util_string_remove_trademark, only_tm)
219{
220 string str = string_remove_trademark("foo bar(TM) zzz");
221 EXPECT_EQ(str, "foo bar zzz");
222}
223
224TEST(util_string_remove_trademark, only_r)
225{
226 string str = string_remove_trademark("foo bar(R) zzz");
227 EXPECT_EQ(str, "foo bar zzz");
228}
229
230TEST(util_string_remove_trademark, both)
231{
232 string str = string_remove_trademark("foo bar(TM)(R) zzz");
233 EXPECT_EQ(str, "foo bar zzz");
234}
235
236TEST(util_string_remove_trademark, both_space)
237{
238 string str = string_remove_trademark("foo bar(TM) (R) zzz");
239 EXPECT_EQ(str, "foo bar zzz");
240}
241
242TEST(util_string_remove_trademark, both_space_around)
243{
244 string str = string_remove_trademark("foo bar (TM) (R) zzz");
245 EXPECT_EQ(str, "foo bar zzz");
246}
247
248TEST(util_string_remove_trademark, trademark_space_suffix)
249{
250 string str = string_remove_trademark("foo bar (TM)");
251 EXPECT_EQ(str, "foo bar");
252}
253
254TEST(util_string_remove_trademark, trademark_space_middle)
255{
256 string str = string_remove_trademark("foo bar (TM) baz");
257 EXPECT_EQ(str, "foo bar baz");
258}
259
260TEST(util_string_remove_trademark, r_space_suffix)
261{
262 string str = string_remove_trademark("foo bar (R)");
263 EXPECT_EQ(str, "foo bar");
264}
265
266TEST(util_string_remove_trademark, r_space_middle)
267{
268 string str = string_remove_trademark("foo bar (R) baz");
269 EXPECT_EQ(str, "foo bar baz");
270}
271
272/* ******** Tests for string_startswith() ******** */
273
275{
276 EXPECT_TRUE(string_startswith("", ""));
277
278 EXPECT_FALSE(string_startswith("", "World"));
279 EXPECT_TRUE(string_startswith("Hello", ""));
280
281 EXPECT_FALSE(string_startswith("Hello", "World"));
282
283 EXPECT_TRUE(string_startswith("Hello", "Hello"));
284 EXPECT_TRUE(string_startswith("Hello", "He"));
285 EXPECT_TRUE(string_startswith("Hello", "H"));
286
287 EXPECT_FALSE(string_startswith("Hello", "e"));
288 EXPECT_FALSE(string_startswith("Hello", "HelloWorld"));
289}
290
292{
293 EXPECT_TRUE(string_endswith("", ""));
294
295 EXPECT_FALSE(string_endswith("", "World"));
296 EXPECT_TRUE(string_endswith("Hello", ""));
297
298 EXPECT_FALSE(string_endswith("Hello", "World"));
299
300 EXPECT_TRUE(string_endswith("Hello", "Hello"));
301 EXPECT_TRUE(string_endswith("Hello", "lo"));
302 EXPECT_TRUE(string_endswith("Hello", "o"));
303
304 EXPECT_FALSE(string_endswith("Hello", "e"));
305 EXPECT_FALSE(string_endswith("Hello", "WorldHello"));
306}
307
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
#define CCL_NAMESPACE_END
#define str(s)
string string_remove_trademark(const string &s)
Definition string.cpp:155
bool string_iequals(const string &a, const string &b)
Definition string.cpp:55
string string_strip(const string &s)
Definition string.cpp:125
bool string_startswith(const string_view s, const string_view start)
Definition string.cpp:103
CCL_NAMESPACE_BEGIN string string_printf(const char *format,...)
Definition string.cpp:23
void string_split(vector< string > &tokens, const string &str, const string &separators, bool skip_empty_tokens)
Definition string.cpp:70
void string_replace(string &haystack, const string &needle, const string &other)
Definition string.cpp:133
bool string_endswith(const string_view s, const string_view end)
Definition string.cpp:114
CCL_NAMESPACE_BEGIN TEST(util_string_printf, no_format)