blob: b630a67afdbfb3d9c8f55284662b5aab3a1d5c41 [file] [log] [blame]
Weilin Xuef981342023-12-13 16:08:04 -08001/*
2 * Copyright (C) 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#include <broadcastradio-utils-aidl/Utils.h>
18#include <gtest/gtest.h>
19
20namespace aidl::android::hardware::broadcastradio {
21
22namespace {
23constexpr int64_t kFmFrequencyKHz = 97900;
Weilin Xu6633a852023-12-13 16:08:04 -080024constexpr uint32_t kDabSid = 0x0000C221u;
25constexpr int kDabEccCode = 0xE1u;
26constexpr int kDabSCIdS = 0x1u;
27constexpr uint64_t kDabSidExt = static_cast<uint64_t>(kDabSid) |
28 (static_cast<uint64_t>(kDabEccCode) << 32) |
29 (static_cast<uint64_t>(kDabSCIdS) << 40);
Weilin Xuef981342023-12-13 16:08:04 -080030constexpr uint32_t kDabEnsemble = 0xCE15u;
31constexpr uint64_t kDabFrequencyKhz = 225648u;
32constexpr uint64_t kHdStationId = 0xA0000001u;
33constexpr uint64_t kHdSubChannel = 1u;
34constexpr uint64_t kHdFrequency = 97700u;
Weilin Xu67e83a32024-01-10 13:40:28 -080035
36struct IsValidMetadataTestCase {
37 std::string name;
38 Metadata metadata;
39 bool valid;
40};
41
42std::vector<IsValidMetadataTestCase> getIsValidMetadataTestCases() {
43 return std::vector<IsValidMetadataTestCase>({
44 IsValidMetadataTestCase{.name = "valid_rds_pty",
45 .metadata = Metadata::make<Metadata::rdsPty>(1),
46 .valid = true},
47 IsValidMetadataTestCase{.name = "negative_rds_pty",
48 .metadata = Metadata::make<Metadata::rdsPty>(-1),
49 .valid = false},
50 IsValidMetadataTestCase{.name = "large_rds_pty",
51 .metadata = Metadata::make<Metadata::rdsPty>(256),
52 .valid = false},
53 IsValidMetadataTestCase{.name = "valid_rbds_pty",
54 .metadata = Metadata::make<Metadata::rbdsPty>(1),
55 .valid = true},
56 IsValidMetadataTestCase{.name = "negative_rbds_pty",
57 .metadata = Metadata::make<Metadata::rbdsPty>(-1),
58 .valid = false},
59 IsValidMetadataTestCase{.name = "large_rbds_pty",
60 .metadata = Metadata::make<Metadata::rbdsPty>(256),
61 .valid = false},
62 IsValidMetadataTestCase{
63 .name = "valid_dab_ensemble_name_short",
64 .metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name"),
65 .valid = true},
66 IsValidMetadataTestCase{
67 .name = "too_long_dab_ensemble_name_short",
68 .metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name_long"),
69 .valid = false},
70 IsValidMetadataTestCase{
71 .name = "valid_dab_service_name_short",
72 .metadata = Metadata::make<Metadata::dabServiceNameShort>("name"),
73 .valid = true},
74 IsValidMetadataTestCase{
75 .name = "too_long_dab_service_name_short",
76 .metadata = Metadata::make<Metadata::dabServiceNameShort>("name_long"),
77 .valid = false},
78 IsValidMetadataTestCase{
79 .name = "valid_dab_component_name_short",
80 .metadata = Metadata::make<Metadata::dabComponentNameShort>("name"),
81 .valid = true},
82 IsValidMetadataTestCase{
83 .name = "too_long_dab_component_name_short",
84 .metadata = Metadata::make<Metadata::dabComponentNameShort>("name_long"),
85 .valid = false},
86 });
87}
Weilin Xuef981342023-12-13 16:08:04 -080088} // namespace
89
Weilin Xu67e83a32024-01-10 13:40:28 -080090class IsValidMetadataTest : public testing::TestWithParam<IsValidMetadataTestCase> {};
91
92INSTANTIATE_TEST_SUITE_P(IsValidMetadataTests, IsValidMetadataTest,
93 testing::ValuesIn(getIsValidMetadataTestCases()),
94 [](const testing::TestParamInfo<IsValidMetadataTest::ParamType>& info) {
95 return info.param.name;
96 });
97
98TEST_P(IsValidMetadataTest, IsValidMetadata) {
99 IsValidMetadataTestCase testParam = GetParam();
100
101 ASSERT_EQ(utils::isValidMetadata(testParam.metadata), testParam.valid);
102}
103
Weilin Xu6633a852023-12-13 16:08:04 -0800104TEST(BroadcastRadioUtilsTest, HasIdWithPrimaryIdType) {
Weilin Xuef981342023-12-13 16:08:04 -0800105 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
106
107 ASSERT_TRUE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
108}
109
Weilin Xu6633a852023-12-13 16:08:04 -0800110TEST(BroadcastRadioUtilsTest, HasIdWithSecondaryIdType) {
111 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
112
113 ASSERT_TRUE(utils::hasId(sel, IdentifierType::DAB_FREQUENCY_KHZ));
114}
115
116TEST(BroadcastRadioUtilsTest, HasIdWithIdNotInSelector) {
117 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
118
119 ASSERT_FALSE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
120}
121
122TEST(BroadcastRadioUtilsTest, GetIdWithPrimaryIdType) {
123 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
124
125 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT), static_cast<int64_t>(kDabSidExt));
126}
127
128TEST(BroadcastRadioUtilsTest, GetIdWithSecondaryIdType) {
129 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
130
131 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_ENSEMBLE), static_cast<int64_t>(kDabEnsemble));
132}
133
134TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFound) {
135 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
136
137 ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ), 0);
138}
139
140TEST(BroadcastRadioUtilsTest, GetIdWithIdFoundAndDefaultValue) {
141 int64_t defaultValue = 0x0E10000C222u;
142 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
143
144 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT, defaultValue),
145 static_cast<int64_t>(kDabSidExt));
146}
147
148TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFoundAndDefaultValue) {
149 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
150
151 ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
152 static_cast<int64_t>(kFmFrequencyKHz));
153}
154
155TEST(BroadcastRadioUtilsTest, MakeIdentifier) {
Weilin Xuef981342023-12-13 16:08:04 -0800156 ProgramIdentifier id =
157 utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz);
158
Weilin Xu6633a852023-12-13 16:08:04 -0800159 EXPECT_EQ(id.type, IdentifierType::AMFM_FREQUENCY_KHZ);
160 EXPECT_EQ(id.value, kFmFrequencyKHz);
Weilin Xuef981342023-12-13 16:08:04 -0800161}
162
Weilin Xu6633a852023-12-13 16:08:04 -0800163TEST(BroadcastRadioUtilsTest, MakeSelectorAmfm) {
Weilin Xuef981342023-12-13 16:08:04 -0800164 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
165
Weilin Xu6633a852023-12-13 16:08:04 -0800166 EXPECT_EQ(sel.primaryId.type, IdentifierType::AMFM_FREQUENCY_KHZ);
167 EXPECT_EQ(sel.primaryId.value, kFmFrequencyKHz);
168 EXPECT_TRUE(sel.secondaryIds.empty());
Weilin Xuef981342023-12-13 16:08:04 -0800169}
170
Weilin Xu6633a852023-12-13 16:08:04 -0800171TEST(BroadcastRadioUtilsTest, MakeSelectorHd) {
Weilin Xuef981342023-12-13 16:08:04 -0800172 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
173
Weilin Xu6633a852023-12-13 16:08:04 -0800174 EXPECT_EQ(sel.primaryId.type, IdentifierType::HD_STATION_ID_EXT);
175 EXPECT_TRUE(sel.secondaryIds.empty());
176 EXPECT_EQ(utils::getHdSubchannel(sel), static_cast<int>(kHdSubChannel));
177 EXPECT_EQ(utils::getHdFrequency(sel), static_cast<uint32_t>(kHdFrequency));
Weilin Xuef981342023-12-13 16:08:04 -0800178}
179
Weilin Xu6633a852023-12-13 16:08:04 -0800180TEST(BroadcastRadioUtilsTest, MakeHdRadioStationName) {
Weilin Xuef981342023-12-13 16:08:04 -0800181 std::string stationName = "aB1-FM";
182 int64_t expectedIdValue = 0x4D46314241;
183
184 ProgramIdentifier stationNameId = utils::makeHdRadioStationName(stationName);
185
Weilin Xu6633a852023-12-13 16:08:04 -0800186 EXPECT_EQ(stationNameId.type, IdentifierType::HD_STATION_NAME);
187 EXPECT_EQ(stationNameId.value, expectedIdValue);
Weilin Xuef981342023-12-13 16:08:04 -0800188}
189
Weilin Xu6633a852023-12-13 16:08:04 -0800190TEST(BroadcastRadioUtilsTest, GetHdFrequencyWithoutHdId) {
Weilin Xuef981342023-12-13 16:08:04 -0800191 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
192
193 ASSERT_EQ(utils::getHdFrequency(sel), 0u);
194}
195
Weilin Xu6633a852023-12-13 16:08:04 -0800196TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithAmFmSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800197 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
198
199 ASSERT_TRUE(utils::hasAmFmFrequency(sel));
200}
201
Weilin Xu6633a852023-12-13 16:08:04 -0800202TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800203 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
204
205 ASSERT_TRUE(utils::hasAmFmFrequency(sel));
206}
207
Weilin Xu6633a852023-12-13 16:08:04 -0800208TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithNonAmFmHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800209 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
210
211 ASSERT_FALSE(utils::hasAmFmFrequency(sel));
212}
213
Weilin Xu6633a852023-12-13 16:08:04 -0800214TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithAmFmSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800215 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
216
217 ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kFmFrequencyKHz));
218}
219
Weilin Xu6633a852023-12-13 16:08:04 -0800220TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800221 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
222
223 ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kHdFrequency));
224}
225
Weilin Xu6633a852023-12-13 16:08:04 -0800226TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithNonAmFmHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800227 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
228
229 ASSERT_EQ(utils::getAmFmFrequency(sel), 0u);
230}
231
Weilin Xu6633a852023-12-13 16:08:04 -0800232TEST(BroadcastRadioUtilsTest, MakeSelectorDabWithOnlySidExt) {
233 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt);
234
235 EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
236 EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
237 EXPECT_TRUE(sel.secondaryIds.empty());
238}
239
240TEST(BroadcastRadioUtilsTest, MakeSelectorDab) {
241 ProgramIdentifier ensembleIdExpected =
242 utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble);
243 ProgramIdentifier frequencyIdExpected =
244 utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, kDabFrequencyKhz);
245
246 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
247
248 EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
249 EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
250 EXPECT_EQ(sel.secondaryIds.size(), 2u);
251 EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), ensembleIdExpected),
252 sel.secondaryIds.end());
253 EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), frequencyIdExpected),
254 sel.secondaryIds.end());
255}
256
257TEST(BroadcastRadioUtilsTest, GetDabSId) {
258 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
259
260 ASSERT_EQ(utils::getDabSId(sel), kDabSid);
261}
262
263TEST(BroadcastRadioUtilsTest, GetDabEccCode) {
264 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
265
266 ASSERT_EQ(utils::getDabEccCode(sel), kDabEccCode);
267}
268
269TEST(BroadcastRadioUtilsTest, GetDabSCIdS) {
270 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
271
272 ASSERT_EQ(utils::getDabSCIdS(sel), kDabSCIdS);
273}
274
Weilin Xuef981342023-12-13 16:08:04 -0800275} // namespace aidl::android::hardware::broadcastradio