Blender V4.3
BLI_string_utils_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "BLI_string_utils.hh"
6
7#include <string>
8
9#include "testing/testing.h"
10
11#include "BLI_vector.hh"
12
13namespace blender {
14
15static bool unique_check_func(void *arg, const char *name)
16{
17 const Vector<std::string> *current_names = static_cast<const Vector<std::string> *>(arg);
18 return current_names->contains(name);
19}
20
21TEST(BLI_string_utils, BLI_uniquename_cb)
22{
23 const Vector<std::string> current_names{"Foo", "Bar", "Bar.003", "Baz.001", "Big.999"};
24
25 /* C version. */
26 {
27 void *arg = const_cast<void *>(static_cast<const void *>(&current_names));
28
29 {
30 char name[64] = "";
31 BLI_uniquename_cb(unique_check_func, arg, "Default Name", '.', name, sizeof(name));
32 EXPECT_STREQ(name, "Default Name");
33 }
34
35 {
36 char name[64] = "Baz";
37 BLI_uniquename_cb(unique_check_func, arg, "Default Name", '.', name, sizeof(name));
38 EXPECT_STREQ(name, "Baz");
39 }
40
41 {
42 char name[64] = "Foo";
43 BLI_uniquename_cb(unique_check_func, arg, "Default Name", '.', name, sizeof(name));
44 EXPECT_STREQ(name, "Foo.001");
45 }
46
47 {
48 char name[64] = "Baz.001";
49 BLI_uniquename_cb(unique_check_func, arg, "Default Name", '.', name, sizeof(name));
50 EXPECT_STREQ(name, "Baz.002");
51 }
52
53 {
54 char name[64] = "Bar.003";
55 BLI_uniquename_cb(unique_check_func, arg, "Default Name", '.', name, sizeof(name));
56 EXPECT_STREQ(name, "Bar.004");
57 }
58
59 {
60 char name[64] = "Big.999";
61 BLI_uniquename_cb(unique_check_func, arg, "Default Name", '.', name, sizeof(name));
62 EXPECT_STREQ(name, "Big.1000");
63 }
64 }
65
66 /* C++ version. */
67 {
68 const auto unique_check = [&](const blender::StringRef name) -> bool {
69 return current_names.contains(name);
70 };
71
72 EXPECT_EQ(BLI_uniquename_cb(unique_check, '.', ""), "");
73 EXPECT_EQ(BLI_uniquename_cb(unique_check, '.', "Baz"), "Baz");
74 EXPECT_EQ(BLI_uniquename_cb(unique_check, '.', "Foo"), "Foo.001");
75 EXPECT_EQ(BLI_uniquename_cb(unique_check, '.', "Baz.001"), "Baz.002");
76 EXPECT_EQ(BLI_uniquename_cb(unique_check, '.', "Bar.003"), "Bar.004");
77 EXPECT_EQ(BLI_uniquename_cb(unique_check, '.', "Big.999"), "Big.1000");
78 }
79}
80
81} // namespace blender
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
size_t void BLI_uniquename_cb(UniquenameCheckCallback unique_check, void *arg, const char *defname, char delim, char *name, size_t name_maxncpy) ATTR_NONNULL(1
bool contains(const T &value) const
TEST(BLI_string_utils, BLI_uniquename_cb)
static bool unique_check_func(void *arg, const char *name)