1 /*
2 * Copyright 2024 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_NDEBUG 0
18 #define LOG_TAG "audio_stringutils_tests"
19
20 #include <audio_utils/StringUtils.h>
21 #include <gtest/gtest.h>
22
TEST(audio_utils_string,parseVector)23 TEST(audio_utils_string, parseVector) {
24 {
25 std::vector<int32_t> values;
26 EXPECT_EQ(true, android::audio_utils::stringutils::parseVector(
27 "0{4,300,0,-112343,350}9", &values));
28 EXPECT_EQ(values, std::vector<int32_t>({0, 4, 300, 0, -112343, 350, 9}));
29 }
30 {
31 std::vector<int32_t> values;
32 EXPECT_EQ(true, android::audio_utils::stringutils::parseVector("53", &values));
33 EXPECT_EQ(values, std::vector<int32_t>({53}));
34 }
35 {
36 std::vector<int32_t> values;
37 EXPECT_EQ(false, android::audio_utils::stringutils::parseVector("5{3,6*3}3", &values));
38 EXPECT_EQ(values, std::vector<int32_t>({}));
39 }
40 {
41 std::vector<int32_t> values = {1}; // should still be this when parsing fails
42 std::vector<int32_t> expected = {1};
43 EXPECT_EQ(false, android::audio_utils::stringutils::parseVector("51342abcd,1232", &values));
44 EXPECT_EQ(values, std::vector<int32_t>({1}));
45 }
46 {
47 std::vector<int32_t> values = {2}; // should still be this when parsing fails
48 EXPECT_EQ(false, android::audio_utils::stringutils::parseVector(
49 "12345678901234,12345678901234", &values));
50 EXPECT_EQ(values, std::vector<int32_t>({2}));
51 }
52 }
53
54
TEST(audio_utils_string,device_parsing)55 TEST(audio_utils_string, device_parsing) {
56 auto devaddr = android::audio_utils::stringutils::getDeviceAddressPairs("(DEVICE, )");
57 ASSERT_EQ((size_t)1, devaddr.size());
58 ASSERT_EQ("DEVICE", devaddr[0].first);
59 ASSERT_EQ("", devaddr[0].second);
60
61 devaddr = android::audio_utils::stringutils::getDeviceAddressPairs(
62 "(DEVICE1, A)|(D, ADDRB)");
63 ASSERT_EQ((size_t)2, devaddr.size());
64 ASSERT_EQ("DEVICE1", devaddr[0].first);
65 ASSERT_EQ("A", devaddr[0].second);
66 ASSERT_EQ("D", devaddr[1].first);
67 ASSERT_EQ("ADDRB", devaddr[1].second);
68
69 devaddr = android::audio_utils::stringutils::getDeviceAddressPairs(
70 "(A,B)|(C,D)");
71 ASSERT_EQ((size_t)2, devaddr.size());
72 ASSERT_EQ("A", devaddr[0].first);
73 ASSERT_EQ("B", devaddr[0].second);
74 ASSERT_EQ("C", devaddr[1].first);
75 ASSERT_EQ("D", devaddr[1].second);
76
77 devaddr = android::audio_utils::stringutils::getDeviceAddressPairs(
78 " ( A1 , B ) | ( C , D2 ) ");
79 ASSERT_EQ((size_t)2, devaddr.size());
80 ASSERT_EQ("A1", devaddr[0].first);
81 ASSERT_EQ("B", devaddr[0].second);
82 ASSERT_EQ("C", devaddr[1].first);
83 ASSERT_EQ("D2", devaddr[1].second);
84
85 devaddr = android::audio_utils::stringutils::getDeviceAddressPairs(
86 " Z ");
87 ASSERT_EQ((size_t)1, devaddr.size());
88 ASSERT_EQ("Z", devaddr[0].first);
89
90 devaddr = android::audio_utils::stringutils::getDeviceAddressPairs(
91 " A | B|C ");
92 ASSERT_EQ((size_t)3, devaddr.size());
93 ASSERT_EQ("A", devaddr[0].first);
94 ASSERT_EQ("", devaddr[0].second);
95 ASSERT_EQ("B", devaddr[1].first);
96 ASSERT_EQ("", devaddr[1].second);
97 ASSERT_EQ("C", devaddr[2].first);
98 ASSERT_EQ("", devaddr[2].second);
99
100 devaddr = android::audio_utils::stringutils::getDeviceAddressPairs(
101 " A | (B1, 10) |C ");
102 ASSERT_EQ((size_t)3, devaddr.size());
103 ASSERT_EQ("A", devaddr[0].first);
104 ASSERT_EQ("", devaddr[0].second);
105 ASSERT_EQ("B1", devaddr[1].first);
106 ASSERT_EQ("10", devaddr[1].second);
107 ASSERT_EQ("C", devaddr[2].first);
108 ASSERT_EQ("", devaddr[2].second);
109 }
110
TEST(audio_utils_string,ConvertToLowerCamelCase)111 TEST(audio_utils_string, ConvertToLowerCamelCase) {
112 EXPECT_EQ("camelCase.andSnakeCase.4Fun.2Funny.look4It",
113 android::audio_utils::stringutils::toLowerCamelCase(
114 "camel_case.AndSnake_Case.4Fun.2FUNNY.Look_4__it"));
115
116 EXPECT_EQ("abc.abc1_10_100$def #!g",
117 android::audio_utils::stringutils::toLowerCamelCase(
118 "ABC.abc_1_10_100$def #!g"));
119 }
120
TEST(audio_utils_string,ConvertToUpperCamelCase)121 TEST(audio_utils_string, ConvertToUpperCamelCase) {
122 EXPECT_EQ("CamelCase.AndSnakeCase.4Fun.2Funny.Look4It",
123 android::audio_utils::stringutils::toUpperCamelCase(
124 "camel_case.AndSnake_Case.4Fun.2FUNNY.Look_4__it"));
125
126 EXPECT_EQ("Abc.Abc1_10_100$Def #!G",
127 android::audio_utils::stringutils::toUpperCamelCase(
128 "ABC.abc_1_10_100$def #!g"));
129 }
130
TEST(audio_utils_string,ConvertToLowerSnakeCase)131 TEST(audio_utils_string, ConvertToLowerSnakeCase) {
132 EXPECT_EQ("camel_case.and_snake_case.4fun.2funny.look_4_it",
133 android::audio_utils::stringutils::toLowerSnakeCase(
134 "camel_case.AndSnake_Case.4Fun.2FUNNY.Look_4__it"));
135
136 EXPECT_EQ("abc.abc_1_10_100$def #!g",
137 android::audio_utils::stringutils::toLowerSnakeCase(
138 "ABC.abc_1_10_100$def #!g"));
139 }
140
TEST(audio_utils_string,ConvertToUpperSnakeCase)141 TEST(audio_utils_string, ConvertToUpperSnakeCase) {
142 EXPECT_EQ("CAMEL_CASE.AND_SNAKE_CASE.4FUN.2FUNNY.LOOK_4_IT",
143 android::audio_utils::stringutils::toUpperSnakeCase(
144 "camel_case.AndSnake_Case.4Fun.2FUNNY.Look_4__it"));
145
146 EXPECT_EQ("ABC.ABC_1_10_100$DEF #!G",
147 android::audio_utils::stringutils::toUpperSnakeCase(
148 "ABC.abc_1_10_100$def #!g"));
149 }
150
TEST(audio_utils_string,PreserveDigitSequence)151 TEST(audio_utils_string, PreserveDigitSequence) {
152 EXPECT_EQ("CamelCase10_100",
153 android::audio_utils::stringutils::toUpperCamelCase("camel_case10_100"));
154 EXPECT_EQ("camelCase10_100",
155 android::audio_utils::stringutils::toLowerCamelCase("camel_case10_100"));
156 }
157
TEST(audio_utils_string,appendWithReplacement_empty)158 TEST(audio_utils_string, appendWithReplacement_empty) {
159 std::string s("");
160 android::audio_utils::stringutils::appendWithReplacement(s, "", '|', '+');
161 EXPECT_EQ("", s);
162 }
163
TEST(audio_utils_string,appendWithReplacement_basic)164 TEST(audio_utils_string, appendWithReplacement_basic) {
165 std::string s("hello");
166 android::audio_utils::stringutils::appendWithReplacement(s, "+||", '|', '+');
167 EXPECT_EQ("hello+++", s);
168 }
169
TEST(audio_utils_string,appendWithReplacement_copy)170 TEST(audio_utils_string, appendWithReplacement_copy) {
171 std::string s("hello");
172 android::audio_utils::stringutils::appendWithReplacement(s, " world", '|', '+');
173 EXPECT_EQ("hello world", s);
174 }