xref: /openbmc/entity-manager/test/test_utils.cpp (revision 5a61ec861dea7bc946212ec15fcc213317f0d523)
1 #include "utils.hpp"
2 
3 #include <gtest/gtest.h>
4 
5 constexpr std::string_view helloWorld = "Hello World";
6 
7 TEST(IfindFirstTest, BasicMatch)
8 {
9     auto match = iFindFirst(helloWorld, "World");
10     EXPECT_TRUE(match);
11     EXPECT_EQ(std::distance(helloWorld.begin(), match.begin()), 6);
12     EXPECT_EQ(std::distance(helloWorld.begin(), match.end()), 11);
13 }
14 
15 TEST(IfindFirstTest, CaseInsensitiveMatch)
16 {
17     auto match = iFindFirst(helloWorld, "world");
18     EXPECT_TRUE(match);
19     EXPECT_EQ(std::distance(helloWorld.begin(), match.begin()), 6);
20     EXPECT_EQ(std::distance(helloWorld.begin(), match.end()), 11);
21 }
22 
23 TEST(IfindFirstTest, NoMatch)
24 {
25     auto match = iFindFirst(helloWorld, "Planet");
26     EXPECT_FALSE(match);
27 }
28 
29 TEST(IfindFirstTest, MatchAtStart)
30 {
31     auto match = iFindFirst(helloWorld, "HeLLo");
32     EXPECT_TRUE(match);
33     EXPECT_EQ(std::distance(helloWorld.begin(), match.begin()), 0);
34     EXPECT_EQ(std::distance(helloWorld.begin(), match.end()), 5);
35 }
36 
37 TEST(IfindFirstTest, MatchAtEnd)
38 {
39     auto match = iFindFirst(helloWorld, "LD");
40     EXPECT_TRUE(match);
41     EXPECT_EQ(std::distance(helloWorld.begin(), match.begin()), 9);
42     EXPECT_EQ(std::distance(helloWorld.begin(), match.end()), 11);
43 }
44 
45 TEST(IfindFirstTest, EmptySubstring)
46 {
47     auto match = iFindFirst(helloWorld, "");
48     EXPECT_FALSE(match);
49 }
50 
51 TEST(IfindFirstTest, EmptyString)
52 {
53     auto match = iFindFirst("", "Hello");
54     EXPECT_FALSE(match);
55 }
56 
57 TEST(SplitTest, NormalSplit)
58 {
59     auto result = split("a,b,c", ',');
60     std::vector<std::string> expected = {"a", "b", "c"};
61     EXPECT_EQ(result, expected);
62 }
63 
64 TEST(SplitTest, ConsecutiveDelimiters)
65 {
66     auto result = split("a,,b", ',');
67     std::vector<std::string> expected = {"a", "", "b"};
68     EXPECT_EQ(result, expected);
69 }
70 
71 TEST(SplitTest, LeadingDelimiter)
72 {
73     auto result = split(",a,b", ',');
74     std::vector<std::string> expected = {"", "a", "b"};
75     EXPECT_EQ(result, expected);
76 }
77 
78 TEST(SplitTest, TrailingDelimiter)
79 {
80     auto result = split("a,b,", ',');
81     std::vector<std::string> expected = {"a", "b", ""};
82     EXPECT_EQ(result, expected);
83 }
84 
85 TEST(SplitTest, NoDelimiter)
86 {
87     auto result = split("abc", ',');
88     std::vector<std::string> expected = {"abc"};
89     EXPECT_EQ(result, expected);
90 }
91 
92 TEST(SplitTest, EmptyString)
93 {
94     auto result = split("", ',');
95     std::vector<std::string> expected = {""};
96     EXPECT_EQ(result, expected);
97 }
98 
99 TEST(ReplaceAllTest, BasicReplacement)
100 {
101     std::string str = "hello world, world!";
102     replaceAll(str, "world", "earth");
103     EXPECT_EQ(str, "hello earth, earth!");
104 }
105 
106 TEST(ReplaceAllTest, NoMatch)
107 {
108     std::string str = "hello world";
109     replaceAll(str, "xxx", "abc");
110     EXPECT_EQ(str, "hello world");
111 }
112 
113 TEST(ReplaceAllTest, ReplaceWithEmpty)
114 {
115     std::string str = "apple apple";
116     replaceAll(str, "apple", "");
117     EXPECT_EQ(str, " ");
118 }
119 
120 TEST(ReplaceAllTest, ReplaceEmptySearch)
121 {
122     std::string str = "abc";
123     replaceAll(str, "", "x");
124     EXPECT_EQ(str, "abc");
125 }
126 
127 TEST(IReplaceAllTest, CaseInsensitive)
128 {
129     std::string str = "Hello hEllo heLLo";
130     iReplaceAll(str, "hello", "hi");
131     EXPECT_EQ(str, "hi hi hi");
132 }
133 
134 TEST(IReplaceAllTest, MixedContent)
135 {
136     std::string str = "Hello World! WORLD world";
137     iReplaceAll(str, "world", "Earth");
138     EXPECT_EQ(str, "Hello Earth! Earth Earth");
139 }
140 
141 TEST(IReplaceAllTest, NoMatchCaseInsensitive)
142 {
143     std::string str = "Good Morning";
144     iReplaceAll(str, "night", "day");
145     EXPECT_EQ(str, "Good Morning");
146 }
147 
148 TEST(IReplaceAllTest, ReplaceWithEmptyCaseInsensitive)
149 {
150     std::string str = "ABC abc AbC";
151     iReplaceAll(str, "abc", "");
152     EXPECT_EQ(str, "  ");
153 }
154