1 /*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #define LOG_TAG "libhidl-gen-utils"
18
19 #include <hidl-util/FqInstance.h>
20 #include <hidl-util/StringHelper.h>
21
22 #include <gtest/gtest.h>
23 #include <vector>
24
25 using ::android::FqInstance;
26 using ::android::StringHelper;
27
28 class LibHidlGenUtilsTest : public ::testing::Test {};
29
TEST_F(LibHidlGenUtilsTest,EndsWithTest)30 TEST_F(LibHidlGenUtilsTest, EndsWithTest) {
31 EXPECT_TRUE(StringHelper::EndsWith("", ""));
32 EXPECT_TRUE(StringHelper::EndsWith("a", ""));
33 EXPECT_TRUE(StringHelper::EndsWith("b", "b"));
34 EXPECT_TRUE(StringHelper::EndsWith("ab", "b"));
35 EXPECT_TRUE(StringHelper::EndsWith("ab", "ab"));
36 EXPECT_TRUE(StringHelper::EndsWith("abcd", "bcd"));
37 EXPECT_TRUE(StringHelper::EndsWith("abcd", "abcd"));
38 EXPECT_TRUE(StringHelper::EndsWith("abcdefghijk", "ijk"));
39 EXPECT_TRUE(StringHelper::EndsWith("abcdefghijk", "bcdefghijk"));
40
41 EXPECT_FALSE(StringHelper::EndsWith("", "a"));
42 EXPECT_FALSE(StringHelper::EndsWith("b", "a"));
43 EXPECT_FALSE(StringHelper::EndsWith("abcd", "ab"));
44 }
45
TEST_F(LibHidlGenUtilsTest,StartsWithTest)46 TEST_F(LibHidlGenUtilsTest, StartsWithTest) {
47 EXPECT_TRUE(StringHelper::StartsWith("", ""));
48 EXPECT_TRUE(StringHelper::StartsWith("a", ""));
49 EXPECT_TRUE(StringHelper::StartsWith("b", "b"));
50 EXPECT_TRUE(StringHelper::StartsWith("ab", "a"));
51 EXPECT_TRUE(StringHelper::StartsWith("ab", "ab"));
52 EXPECT_TRUE(StringHelper::StartsWith("abcd", "abc"));
53 EXPECT_TRUE(StringHelper::StartsWith("abcd", "abcd"));
54 EXPECT_TRUE(StringHelper::StartsWith("abcdefghijk", "abc"));
55 EXPECT_TRUE(StringHelper::StartsWith("abcdefghijk", "abcdefghij"));
56
57 EXPECT_FALSE(StringHelper::StartsWith("", "a"));
58 EXPECT_FALSE(StringHelper::StartsWith("b", "a"));
59 EXPECT_FALSE(StringHelper::StartsWith("abcd", "cd"));
60 }
61
TEST_F(LibHidlGenUtilsTest,Trim)62 TEST_F(LibHidlGenUtilsTest, Trim) {
63 EXPECT_EQ("", StringHelper::LTrim("", ""));
64 EXPECT_EQ("", StringHelper::LTrim("", "a"));
65 EXPECT_EQ("", StringHelper::LTrim("a", "a"));
66 EXPECT_EQ("a", StringHelper::LTrim("a", ""));
67 EXPECT_EQ("a", StringHelper::LTrim("a", "b"));
68 EXPECT_EQ("a", StringHelper::LTrim("ba", "b"));
69 EXPECT_EQ("f", StringHelper::LTrim("abcdef", "abcde"));
70 EXPECT_EQ("cdef", StringHelper::LTrim("abcdef", "ab"));
71 EXPECT_EQ("abcdef", StringHelper::LTrim("abcdef", ""));
72
73 EXPECT_EQ("", StringHelper::RTrim("", ""));
74 EXPECT_EQ("", StringHelper::RTrim("", "a"));
75 EXPECT_EQ("", StringHelper::RTrim("a", "a"));
76 EXPECT_EQ("a", StringHelper::RTrim("a", ""));
77 EXPECT_EQ("a", StringHelper::RTrim("a", "b"));
78 EXPECT_EQ("a", StringHelper::RTrim("ab", "b"));
79 EXPECT_EQ("a", StringHelper::RTrim("abcdef", "bcdef"));
80 EXPECT_EQ("abcd", StringHelper::RTrim("abcdef", "ef"));
81 EXPECT_EQ("abcdef", StringHelper::RTrim("abcdef", ""));
82 }
83
TEST_F(LibHidlGenUtilsTest,TrimAll)84 TEST_F(LibHidlGenUtilsTest, TrimAll) {
85 EXPECT_EQ("", StringHelper::LTrimAll("", ""));
86 EXPECT_EQ("", StringHelper::LTrimAll("", "a"));
87 EXPECT_EQ("", StringHelper::LTrimAll("", "ab"));
88 EXPECT_EQ("", StringHelper::LTrimAll("a", "a"));
89 EXPECT_EQ("", StringHelper::LTrimAll("aa", "a"));
90 EXPECT_EQ("b", StringHelper::LTrimAll("b", "a"));
91 EXPECT_EQ("b", StringHelper::LTrimAll("aaab", "a"));
92 EXPECT_EQ("c", StringHelper::LTrimAll("ababc", "ab"));
93 EXPECT_EQ("ac", StringHelper::LTrimAll("abac", "ab"));
94
95 EXPECT_EQ("", StringHelper::RTrimAll("", ""));
96 EXPECT_EQ("", StringHelper::RTrimAll("", "a"));
97 EXPECT_EQ("", StringHelper::RTrimAll("", "ab"));
98 EXPECT_EQ("", StringHelper::RTrimAll("a", "a"));
99 EXPECT_EQ("", StringHelper::RTrimAll("aa", "a"));
100 EXPECT_EQ("b", StringHelper::RTrimAll("b", "a"));
101 EXPECT_EQ("b", StringHelper::RTrimAll("baaa", "a"));
102 EXPECT_EQ("c", StringHelper::RTrimAll("cabab", "ab"));
103 EXPECT_EQ("ca", StringHelper::RTrimAll("caba", "ba"));
104 }
105
TEST_F(LibHidlGenUtilsTest,SplitString)106 TEST_F(LibHidlGenUtilsTest, SplitString) {
107 std::vector<std::string> components;
108
109 StringHelper::SplitString("", '.', &components);
110 EXPECT_EQ(std::vector<std::string>({""}), components);
111 StringHelper::SplitString("a.", '.', &components);
112 EXPECT_EQ(std::vector<std::string>({"a", ""}), components);
113 StringHelper::SplitString(".a", '.', &components);
114 EXPECT_EQ(std::vector<std::string>({"", "a"}), components);
115 StringHelper::SplitString("..", '.', &components);
116 EXPECT_EQ(std::vector<std::string>({"", "", ""}), components);
117 StringHelper::SplitString("asdf.asdf", '.', &components);
118 EXPECT_EQ(std::vector<std::string>({"asdf", "asdf"}), components);
119 }
120
TEST_F(LibHidlGenUtilsTest,JoinStrings)121 TEST_F(LibHidlGenUtilsTest, JoinStrings) {
122 EXPECT_EQ("", StringHelper::JoinStrings({}, ""));
123 EXPECT_EQ("", StringHelper::JoinStrings({}, "a"));
124 EXPECT_EQ("a", StringHelper::JoinStrings({"a"}, ""));
125 EXPECT_EQ("a,b", StringHelper::JoinStrings({"a", "b"}, ","));
126 EXPECT_EQ("ab,", StringHelper::JoinStrings({"ab", ""}, ","));
127 EXPECT_EQ(",ab", StringHelper::JoinStrings({"", "ab"}, ","));
128 EXPECT_EQ("a.,b", StringHelper::JoinStrings({"a", "b"}, ".,"));
129 EXPECT_EQ("a,b,c", StringHelper::JoinStrings({"a", "b", "c"}, ","));
130 EXPECT_EQ("abc.,def.,ghi", StringHelper::JoinStrings({"abc", "def", "ghi"}, ".,"));
131 }
132
TEST_F(LibHidlGenUtilsTest,FqInstance1)133 TEST_F(LibHidlGenUtilsTest, FqInstance1) {
134 FqInstance e;
135 ASSERT_TRUE(e.setTo("android.hardware.foo@1.0::IFoo/instance"));
136 EXPECT_EQ("android.hardware.foo@1.0::IFoo/instance", e.string());
137 ASSERT_TRUE(e.hasPackage());
138 EXPECT_EQ("android.hardware.foo", e.getPackage());
139 ASSERT_TRUE(e.hasVersion());
140 EXPECT_EQ(1u, e.getMajorVersion());
141 EXPECT_EQ(0u, e.getMinorVersion());
142 EXPECT_EQ((std::make_pair<size_t, size_t>(1u, 0u)), e.getVersion());
143 ASSERT_TRUE(e.hasInterface());
144 EXPECT_EQ("IFoo", e.getInterface());
145 ASSERT_TRUE(e.hasInstance());
146 EXPECT_EQ("instance", e.getInstance());
147 }
148
TEST_F(LibHidlGenUtilsTest,FqInstance2)149 TEST_F(LibHidlGenUtilsTest, FqInstance2) {
150 FqInstance e;
151 ASSERT_TRUE(e.setTo("@1.0::IFoo/instance"));
152 EXPECT_EQ("@1.0::IFoo/instance", e.string());
153 ASSERT_FALSE(e.hasPackage());
154 ASSERT_TRUE(e.hasVersion());
155 EXPECT_EQ((std::make_pair<size_t, size_t>(1u, 0u)), e.getVersion());
156 ASSERT_TRUE(e.hasInterface());
157 EXPECT_EQ("IFoo", e.getInterface());
158 ASSERT_TRUE(e.hasInstance());
159 EXPECT_EQ("instance", e.getInstance());
160 }
161
TEST_F(LibHidlGenUtilsTest,FqInstance3)162 TEST_F(LibHidlGenUtilsTest, FqInstance3) {
163 FqInstance e;
164 ASSERT_TRUE(e.setTo("IFoo/instance"));
165 EXPECT_EQ("IFoo/instance", e.string());
166 ASSERT_FALSE(e.hasPackage());
167 ASSERT_FALSE(e.hasVersion());
168 ASSERT_TRUE(e.hasInterface());
169 EXPECT_EQ("IFoo", e.getInterface());
170 ASSERT_TRUE(e.hasInstance());
171 EXPECT_EQ("instance", e.getInstance());
172 }
173
TEST_F(LibHidlGenUtilsTest,FqInstanceFqNameOnly)174 TEST_F(LibHidlGenUtilsTest, FqInstanceFqNameOnly) {
175 FqInstance e;
176 for (auto testString :
177 {"android.hardware.foo@1.0::IFoo.Type", "@1.0::IFoo.Type", "android.hardware.foo@1.0",
178 "IFoo.Type", "Type", "android.hardware.foo@1.0::IFoo.Type:MY_ENUM_VALUE",
179 "@1.0::IFoo.Type:MY_ENUM_VALUE", "IFoo.Type:MY_ENUM_VALUE"}) {
180 ASSERT_TRUE(e.setTo(testString));
181 EXPECT_EQ(testString, e.string());
182 ASSERT_FALSE(e.hasInstance());
183 };
184 }
185
TEST_F(LibHidlGenUtilsTest,FqInstanceIdentifier)186 TEST_F(LibHidlGenUtilsTest, FqInstanceIdentifier) {
187 FqInstance e;
188 ASSERT_TRUE(e.setTo("Type"));
189 EXPECT_EQ("Type", e.string());
190 ASSERT_FALSE(e.hasInstance());
191 }
192
main(int argc,char ** argv)193 int main(int argc, char **argv) {
194 ::testing::InitGoogleTest(&argc, argv);
195 return RUN_ALL_TESTS();
196 }
197