xref: /aosp_15_r20/system/media/audio_utils/tests/audio_stringutils_tests.cpp (revision b9df5ad1c9ac98a7fefaac271a55f7ae3db05414)
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 }