blob: 87223e857bfcc60001554672aac172c1c706661a [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
Weilin Xuf4cfe192023-12-14 11:13:59 -080036const Properties kAmFmTunerProp = {
37 .maker = "makerTest",
38 .product = "productTest",
39 .supportedIdentifierTypes = {IdentifierType::AMFM_FREQUENCY_KHZ, IdentifierType::RDS_PI,
40 IdentifierType::HD_STATION_ID_EXT}};
41
42struct GetBandTestCase {
43 std::string name;
44 int64_t frequency;
45 utils::FrequencyBand bandResult;
46};
47
48std::vector<GetBandTestCase> getBandTestCases() {
49 return std::vector<GetBandTestCase>(
50 {GetBandTestCase{.name = "unknown_low_band",
51 .frequency = 0,
52 .bandResult = utils::FrequencyBand::UNKNOWN},
53 GetBandTestCase{.name = "am_lw_band",
54 .frequency = 30,
55 .bandResult = utils::FrequencyBand::AM_LW},
56 GetBandTestCase{.name = "am_mw_band",
57 .frequency = 700,
58 .bandResult = utils::FrequencyBand::AM_MW},
59 GetBandTestCase{.name = "am_sw_band",
60 .frequency = 2000,
61 .bandResult = utils::FrequencyBand::AM_SW},
62 GetBandTestCase{
63 .name = "fm_band", .frequency = 97900, .bandResult = utils::FrequencyBand::FM},
64 GetBandTestCase{.name = "unknown_high_band",
65 .frequency = 110000,
66 .bandResult = utils::FrequencyBand::UNKNOWN}});
67}
68
Weilin Xua8b00ca2023-12-14 11:13:59 -080069struct IsValidIdentifierTestCase {
70 std::string name;
71 ProgramIdentifier id;
72 bool valid;
73};
74
75std::vector<IsValidIdentifierTestCase> getIsValidIdentifierTestCases() {
76 return std::vector<IsValidIdentifierTestCase>({
77 IsValidIdentifierTestCase{.name = "invalid_id_type",
78 .id = utils::makeIdentifier(IdentifierType::INVALID, 0),
79 .valid = false},
80 IsValidIdentifierTestCase{
81 .name = "invalid_dab_frequency_high",
82 .id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 10000000u),
83 .valid = false},
84 IsValidIdentifierTestCase{
85 .name = "invalid_dab_frequency_low",
86 .id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 100000u),
87 .valid = false},
88 IsValidIdentifierTestCase{
89 .name = "valid_dab_frequency",
90 .id = utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, 1000000u),
91 .valid = true},
92 IsValidIdentifierTestCase{
93 .name = "invalid_am_fm_frequency_high",
94 .id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 10000000u),
95 .valid = false},
96 IsValidIdentifierTestCase{
97 .name = "invalid_am_fm_frequency_low",
98 .id = utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, 100u),
99 .valid = false},
100 IsValidIdentifierTestCase{.name = "valid_am_fm_frequency",
101 .id = utils::makeIdentifier(
102 IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
103 .valid = true},
104 IsValidIdentifierTestCase{
105 .name = "drmo_frequency_high",
106 .id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 10000000u),
107 .valid = false},
108 IsValidIdentifierTestCase{
109 .name = "drmo_frequency_low",
110 .id = utils::makeIdentifier(IdentifierType::DRMO_FREQUENCY_KHZ, 100u),
111 .valid = false},
112 IsValidIdentifierTestCase{.name = "valid_drmo_frequency",
113 .id = utils::makeIdentifier(
114 IdentifierType::DRMO_FREQUENCY_KHZ, kFmFrequencyKHz),
115 .valid = true},
116 IsValidIdentifierTestCase{.name = "invalid_rds_low",
117 .id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x0),
118 .valid = false},
119 IsValidIdentifierTestCase{.name = "invalid_rds_high",
120 .id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x10000),
121 .valid = false},
122 IsValidIdentifierTestCase{.name = "valid_rds",
123 .id = utils::makeIdentifier(IdentifierType::RDS_PI, 0x1000),
124 .valid = true},
125 IsValidIdentifierTestCase{
126 .name = "invalid_hd_id_zero",
127 .id = utils::makeSelectorHd(/* stationId= */ 0u, kHdSubChannel, kHdFrequency)
128 .primaryId,
129 .valid = false},
130 IsValidIdentifierTestCase{
131 .name = "invalid_hd_suchannel",
132 .id = utils::makeSelectorHd(kHdStationId, /* subChannel= */ 8u, kHdFrequency)
133 .primaryId,
134 .valid = false},
135 IsValidIdentifierTestCase{
136 .name = "invalid_hd_frequency_low",
137 .id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, /* frequency= */ 100u)
138 .primaryId,
139 .valid = false},
140 IsValidIdentifierTestCase{
141 .name = "valid_hd_id",
142 .id = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency)
143 .primaryId,
144 .valid = true},
145 IsValidIdentifierTestCase{
146 .name = "invalid_hd_station_name",
147 .id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x41422D464D),
148 .valid = false},
149 IsValidIdentifierTestCase{
150 .name = "valid_hd_station_name",
151 .id = utils::makeIdentifier(IdentifierType::HD_STATION_NAME, 0x414231464D),
152 .valid = true},
153 IsValidIdentifierTestCase{
154 .name = "invalid_dab_sid",
155 .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0E100000000u),
156 .valid = false},
157 IsValidIdentifierTestCase{
158 .name = "invalid_dab_ecc_low",
159 .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x0F700000221u),
160 .valid = false},
161 IsValidIdentifierTestCase{
162 .name = "invalid_dab_ecc_high",
163 .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, 0x09900000221u),
164 .valid = false},
165 IsValidIdentifierTestCase{
166 .name = "valid_dab_sid_ext",
167 .id = utils::makeIdentifier(IdentifierType::DAB_SID_EXT, kDabSidExt),
168 .valid = true},
169 IsValidIdentifierTestCase{
170 .name = "invalid_dab_ensemble_zero",
171 .id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x0),
172 .valid = false},
173 IsValidIdentifierTestCase{
174 .name = "invalid_dab_ensemble_high",
175 .id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, 0x10000),
176 .valid = false},
177 IsValidIdentifierTestCase{
178 .name = "valid_dab_ensemble",
179 .id = utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble),
180 .valid = true},
181 IsValidIdentifierTestCase{.name = "invalid_dab_scid_low",
182 .id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0xF),
183 .valid = false},
184 IsValidIdentifierTestCase{.name = "invalid_dab_scid_high",
185 .id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x1000),
186 .valid = false},
187 IsValidIdentifierTestCase{.name = "valid_dab_scid",
188 .id = utils::makeIdentifier(IdentifierType::DAB_SCID, 0x100),
189 .valid = true},
190 IsValidIdentifierTestCase{
191 .name = "invalid_drmo_id_zero",
192 .id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x0),
193 .valid = false},
194 IsValidIdentifierTestCase{
195 .name = "invalid_drmo_id_high",
196 .id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x1000000),
197 .valid = false},
198 IsValidIdentifierTestCase{
199 .name = "valid_drmo_id",
200 .id = utils::makeIdentifier(IdentifierType::DRMO_SERVICE_ID, 0x100000),
201 .valid = true},
202 });
203}
204
205struct IsValidSelectorTestCase {
206 std::string name;
207 ProgramSelector sel;
208 bool valid;
209};
210
211std::vector<IsValidSelectorTestCase> getIsValidSelectorTestCases() {
212 return std::vector<IsValidSelectorTestCase>({
213 IsValidSelectorTestCase{.name = "valid_am_fm_selector",
214 .sel = utils::makeSelectorAmfm(kFmFrequencyKHz),
215 .valid = true},
216 IsValidSelectorTestCase{
217 .name = "valid_hd_selector",
218 .sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency),
219 .valid = true},
220 IsValidSelectorTestCase{
221 .name = "valid_dab_selector",
222 .sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz),
223 .valid = true},
224 IsValidSelectorTestCase{.name = "valid_rds_selector",
225 .sel = ProgramSelector{.primaryId = utils::makeIdentifier(
226 IdentifierType::RDS_PI, 0x1000)},
227 .valid = true},
228 IsValidSelectorTestCase{.name = "selector_with_invalid_id",
229 .sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel,
230 /* frequency= */ 100u),
231 .valid = false},
232 IsValidSelectorTestCase{
233 .name = "selector_with_invalid_primary_id_type",
234 .sel = ProgramSelector{.primaryId = utils::makeIdentifier(
235 IdentifierType::DAB_ENSEMBLE, kDabEnsemble)},
236 .valid = false},
237 });
238}
239
Weilin Xu67e83a32024-01-10 13:40:28 -0800240struct IsValidMetadataTestCase {
241 std::string name;
242 Metadata metadata;
243 bool valid;
244};
245
246std::vector<IsValidMetadataTestCase> getIsValidMetadataTestCases() {
247 return std::vector<IsValidMetadataTestCase>({
248 IsValidMetadataTestCase{.name = "valid_rds_pty",
249 .metadata = Metadata::make<Metadata::rdsPty>(1),
250 .valid = true},
251 IsValidMetadataTestCase{.name = "negative_rds_pty",
252 .metadata = Metadata::make<Metadata::rdsPty>(-1),
253 .valid = false},
254 IsValidMetadataTestCase{.name = "large_rds_pty",
255 .metadata = Metadata::make<Metadata::rdsPty>(256),
256 .valid = false},
257 IsValidMetadataTestCase{.name = "valid_rbds_pty",
258 .metadata = Metadata::make<Metadata::rbdsPty>(1),
259 .valid = true},
260 IsValidMetadataTestCase{.name = "negative_rbds_pty",
261 .metadata = Metadata::make<Metadata::rbdsPty>(-1),
262 .valid = false},
263 IsValidMetadataTestCase{.name = "large_rbds_pty",
264 .metadata = Metadata::make<Metadata::rbdsPty>(256),
265 .valid = false},
266 IsValidMetadataTestCase{
267 .name = "valid_dab_ensemble_name_short",
268 .metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name"),
269 .valid = true},
270 IsValidMetadataTestCase{
271 .name = "too_long_dab_ensemble_name_short",
272 .metadata = Metadata::make<Metadata::dabEnsembleNameShort>("name_long"),
273 .valid = false},
274 IsValidMetadataTestCase{
275 .name = "valid_dab_service_name_short",
276 .metadata = Metadata::make<Metadata::dabServiceNameShort>("name"),
277 .valid = true},
278 IsValidMetadataTestCase{
279 .name = "too_long_dab_service_name_short",
280 .metadata = Metadata::make<Metadata::dabServiceNameShort>("name_long"),
281 .valid = false},
282 IsValidMetadataTestCase{
283 .name = "valid_dab_component_name_short",
284 .metadata = Metadata::make<Metadata::dabComponentNameShort>("name"),
285 .valid = true},
286 IsValidMetadataTestCase{
287 .name = "too_long_dab_component_name_short",
288 .metadata = Metadata::make<Metadata::dabComponentNameShort>("name_long"),
289 .valid = false},
290 });
291}
Weilin Xuef981342023-12-13 16:08:04 -0800292} // namespace
293
Weilin Xuf4cfe192023-12-14 11:13:59 -0800294class GetBandTest : public testing::TestWithParam<GetBandTestCase> {};
295
296INSTANTIATE_TEST_SUITE_P(GetBandTests, GetBandTest, testing::ValuesIn(getBandTestCases()),
297 [](const testing::TestParamInfo<GetBandTest::ParamType>& info) {
298 return info.param.name;
299 });
300
301TEST_P(GetBandTest, GetBand) {
302 GetBandTestCase testcase = GetParam();
303
304 ASSERT_EQ(utils::getBand(testcase.frequency), testcase.bandResult);
305}
306
Weilin Xu67e83a32024-01-10 13:40:28 -0800307class IsValidMetadataTest : public testing::TestWithParam<IsValidMetadataTestCase> {};
308
309INSTANTIATE_TEST_SUITE_P(IsValidMetadataTests, IsValidMetadataTest,
310 testing::ValuesIn(getIsValidMetadataTestCases()),
311 [](const testing::TestParamInfo<IsValidMetadataTest::ParamType>& info) {
312 return info.param.name;
313 });
314
315TEST_P(IsValidMetadataTest, IsValidMetadata) {
316 IsValidMetadataTestCase testParam = GetParam();
317
318 ASSERT_EQ(utils::isValidMetadata(testParam.metadata), testParam.valid);
319}
320
Weilin Xua8b00ca2023-12-14 11:13:59 -0800321class IsValidIdentifierTest : public testing::TestWithParam<IsValidIdentifierTestCase> {};
322
323INSTANTIATE_TEST_SUITE_P(IsValidIdentifierTests, IsValidIdentifierTest,
324 testing::ValuesIn(getIsValidIdentifierTestCases()),
325 [](const testing::TestParamInfo<IsValidIdentifierTest::ParamType>& info) {
326 return info.param.name;
327 });
328
329TEST_P(IsValidIdentifierTest, IsValid) {
330 IsValidIdentifierTestCase testcase = GetParam();
331
332 ASSERT_EQ(utils::isValid(testcase.id), testcase.valid);
333}
334
335class IsValidSelectorTest : public testing::TestWithParam<IsValidSelectorTestCase> {};
336
337INSTANTIATE_TEST_SUITE_P(IsValidSelectorTests, IsValidSelectorTest,
338 testing::ValuesIn(getIsValidSelectorTestCases()),
339 [](const testing::TestParamInfo<IsValidSelectorTest::ParamType>& info) {
340 return info.param.name;
341 });
342
343TEST_P(IsValidSelectorTest, IsValid) {
344 IsValidSelectorTestCase testcase = GetParam();
345
346 ASSERT_EQ(utils::isValid(testcase.sel), testcase.valid);
347}
348
Weilin Xuf4cfe192023-12-14 11:13:59 -0800349TEST(BroadcastRadioUtilsTest, IsSupportedWithSupportedSelector) {
350 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
351
352 ASSERT_TRUE(utils::isSupported(kAmFmTunerProp, sel));
353}
354
355TEST(BroadcastRadioUtilsTest, IsSupportedWithUnsupportedSelector) {
356 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
357
358 ASSERT_FALSE(utils::isSupported(kAmFmTunerProp, sel));
359}
360
361TEST(BroadcastRadioUtilsTest, GetBandWithFmFrequency) {
362 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
363
364 ASSERT_TRUE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
365}
366
Weilin Xu6633a852023-12-13 16:08:04 -0800367TEST(BroadcastRadioUtilsTest, HasIdWithPrimaryIdType) {
Weilin Xuef981342023-12-13 16:08:04 -0800368 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
369
370 ASSERT_TRUE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
371}
372
Weilin Xu6633a852023-12-13 16:08:04 -0800373TEST(BroadcastRadioUtilsTest, HasIdWithSecondaryIdType) {
374 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
375
376 ASSERT_TRUE(utils::hasId(sel, IdentifierType::DAB_FREQUENCY_KHZ));
377}
378
379TEST(BroadcastRadioUtilsTest, HasIdWithIdNotInSelector) {
380 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
381
382 ASSERT_FALSE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
383}
384
385TEST(BroadcastRadioUtilsTest, GetIdWithPrimaryIdType) {
386 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
387
388 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT), static_cast<int64_t>(kDabSidExt));
389}
390
391TEST(BroadcastRadioUtilsTest, GetIdWithSecondaryIdType) {
392 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
393
394 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_ENSEMBLE), static_cast<int64_t>(kDabEnsemble));
395}
396
397TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFound) {
398 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
399
400 ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ), 0);
401}
402
403TEST(BroadcastRadioUtilsTest, GetIdWithIdFoundAndDefaultValue) {
404 int64_t defaultValue = 0x0E10000C222u;
405 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
406
407 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT, defaultValue),
408 static_cast<int64_t>(kDabSidExt));
409}
410
411TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFoundAndDefaultValue) {
412 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
413
414 ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
415 static_cast<int64_t>(kFmFrequencyKHz));
416}
417
Weilin Xuf4cfe192023-12-14 11:13:59 -0800418TEST(BroadcastRadioUtilsTest, GetAllIdsWithAvailableIds) {
419 int64_t secondaryFrequencyKHz = kFmFrequencyKHz + 200;
420 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
421 sel.secondaryIds.push_back(
422 utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, secondaryFrequencyKHz));
423
424 std::vector<int> allIds = utils::getAllIds(sel, IdentifierType::AMFM_FREQUENCY_KHZ);
425
426 ASSERT_EQ(allIds.size(), 2u);
427 EXPECT_NE(std::find(allIds.begin(), allIds.end(), kFmFrequencyKHz), allIds.end());
428 EXPECT_NE(std::find(allIds.begin(), allIds.end(), secondaryFrequencyKHz), allIds.end());
429}
430
431TEST(BroadcastRadioUtilsTest, GetAllIdsWithIdNotFound) {
432 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
433
434 ASSERT_TRUE(utils::getAllIds(sel, IdentifierType::AMFM_FREQUENCY_KHZ).empty());
435}
436
Weilin Xu6633a852023-12-13 16:08:04 -0800437TEST(BroadcastRadioUtilsTest, MakeIdentifier) {
Weilin Xuef981342023-12-13 16:08:04 -0800438 ProgramIdentifier id =
439 utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz);
440
Weilin Xu6633a852023-12-13 16:08:04 -0800441 EXPECT_EQ(id.type, IdentifierType::AMFM_FREQUENCY_KHZ);
442 EXPECT_EQ(id.value, kFmFrequencyKHz);
Weilin Xuef981342023-12-13 16:08:04 -0800443}
444
Weilin Xu6633a852023-12-13 16:08:04 -0800445TEST(BroadcastRadioUtilsTest, MakeSelectorAmfm) {
Weilin Xuef981342023-12-13 16:08:04 -0800446 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
447
Weilin Xu6633a852023-12-13 16:08:04 -0800448 EXPECT_EQ(sel.primaryId.type, IdentifierType::AMFM_FREQUENCY_KHZ);
449 EXPECT_EQ(sel.primaryId.value, kFmFrequencyKHz);
450 EXPECT_TRUE(sel.secondaryIds.empty());
Weilin Xuef981342023-12-13 16:08:04 -0800451}
452
Weilin Xu6633a852023-12-13 16:08:04 -0800453TEST(BroadcastRadioUtilsTest, MakeSelectorHd) {
Weilin Xuef981342023-12-13 16:08:04 -0800454 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
455
Weilin Xu6633a852023-12-13 16:08:04 -0800456 EXPECT_EQ(sel.primaryId.type, IdentifierType::HD_STATION_ID_EXT);
457 EXPECT_TRUE(sel.secondaryIds.empty());
458 EXPECT_EQ(utils::getHdSubchannel(sel), static_cast<int>(kHdSubChannel));
459 EXPECT_EQ(utils::getHdFrequency(sel), static_cast<uint32_t>(kHdFrequency));
Weilin Xuef981342023-12-13 16:08:04 -0800460}
461
Weilin Xu6633a852023-12-13 16:08:04 -0800462TEST(BroadcastRadioUtilsTest, MakeHdRadioStationName) {
Weilin Xuef981342023-12-13 16:08:04 -0800463 std::string stationName = "aB1-FM";
464 int64_t expectedIdValue = 0x4D46314241;
465
466 ProgramIdentifier stationNameId = utils::makeHdRadioStationName(stationName);
467
Weilin Xu6633a852023-12-13 16:08:04 -0800468 EXPECT_EQ(stationNameId.type, IdentifierType::HD_STATION_NAME);
469 EXPECT_EQ(stationNameId.value, expectedIdValue);
Weilin Xuef981342023-12-13 16:08:04 -0800470}
471
Weilin Xu6633a852023-12-13 16:08:04 -0800472TEST(BroadcastRadioUtilsTest, GetHdFrequencyWithoutHdId) {
Weilin Xuef981342023-12-13 16:08:04 -0800473 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
474
475 ASSERT_EQ(utils::getHdFrequency(sel), 0u);
476}
477
Weilin Xu6633a852023-12-13 16:08:04 -0800478TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithAmFmSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800479 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
480
481 ASSERT_TRUE(utils::hasAmFmFrequency(sel));
482}
483
Weilin Xu6633a852023-12-13 16:08:04 -0800484TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800485 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
486
487 ASSERT_TRUE(utils::hasAmFmFrequency(sel));
488}
489
Weilin Xu6633a852023-12-13 16:08:04 -0800490TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithNonAmFmHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800491 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
492
493 ASSERT_FALSE(utils::hasAmFmFrequency(sel));
494}
495
Weilin Xu6633a852023-12-13 16:08:04 -0800496TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithAmFmSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800497 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
498
499 ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kFmFrequencyKHz));
500}
501
Weilin Xu6633a852023-12-13 16:08:04 -0800502TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800503 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
504
505 ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kHdFrequency));
506}
507
Weilin Xu6633a852023-12-13 16:08:04 -0800508TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithNonAmFmHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800509 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
510
511 ASSERT_EQ(utils::getAmFmFrequency(sel), 0u);
512}
513
Weilin Xu6633a852023-12-13 16:08:04 -0800514TEST(BroadcastRadioUtilsTest, MakeSelectorDabWithOnlySidExt) {
515 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt);
516
517 EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
518 EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
519 EXPECT_TRUE(sel.secondaryIds.empty());
520}
521
522TEST(BroadcastRadioUtilsTest, MakeSelectorDab) {
523 ProgramIdentifier ensembleIdExpected =
524 utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble);
525 ProgramIdentifier frequencyIdExpected =
526 utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, kDabFrequencyKhz);
527
528 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
529
530 EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
531 EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
532 EXPECT_EQ(sel.secondaryIds.size(), 2u);
533 EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), ensembleIdExpected),
534 sel.secondaryIds.end());
535 EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), frequencyIdExpected),
536 sel.secondaryIds.end());
537}
538
539TEST(BroadcastRadioUtilsTest, GetDabSId) {
540 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
541
542 ASSERT_EQ(utils::getDabSId(sel), kDabSid);
543}
544
545TEST(BroadcastRadioUtilsTest, GetDabEccCode) {
546 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
547
548 ASSERT_EQ(utils::getDabEccCode(sel), kDabEccCode);
549}
550
551TEST(BroadcastRadioUtilsTest, GetDabSCIdS) {
552 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
553
554 ASSERT_EQ(utils::getDabSCIdS(sel), kDabSCIdS);
555}
556
Weilin Xud1b81482023-12-14 11:13:59 -0800557TEST(BroadcastRadioUtilsTest, TunesToWithTheSameHdSelector) {
558 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
559 ProgramSelector selTarget = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
560
561 ASSERT_TRUE(utils::tunesTo(sel, selTarget));
562}
563
564TEST(BroadcastRadioUtilsTest, TunesToAmFmSelectorWithDifferentSubChannels) {
565 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
566 ProgramSelector selTarget = utils::makeSelectorAmfm(kHdFrequency);
567
568 ASSERT_FALSE(utils::tunesTo(sel, selTarget));
569}
570
571TEST(BroadcastRadioUtilsTest, TunesToMainHdChannelWithDifferentSubChannels) {
572 ProgramSelector sel = utils::makeSelectorAmfm(kHdFrequency);
573 ProgramSelector selTarget =
574 utils::makeSelectorHd(kHdStationId, /* subChannel= */ 0, kHdFrequency);
575
576 ASSERT_TRUE(utils::tunesTo(sel, selTarget));
577}
578
579TEST(BroadcastRadioUtilsTest, TunesToWithTheSameAmFmSelector) {
580 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
581 ProgramSelector selTarget = utils::makeSelectorAmfm(kFmFrequencyKHz);
582
583 ASSERT_TRUE(utils::tunesTo(sel, selTarget));
584}
585
586TEST(BroadcastRadioUtilsTest, TunesToWithDifferentFrequencies) {
587 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
588 ProgramSelector selTarget = utils::makeSelectorAmfm(kFmFrequencyKHz + 200);
589
590 ASSERT_FALSE(utils::tunesTo(sel, selTarget));
591}
592
593TEST(BroadcastRadioUtilsTest, TunesToWithTheSameDabSelector) {
594 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
595 ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
596
597 ASSERT_TRUE(utils::tunesTo(sel, selTarget));
598}
599
600TEST(BroadcastRadioUtilsTest, TunesToWithDabSelectorOfDifferentPrimaryIds) {
601 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt + 1, kDabEnsemble, kDabFrequencyKhz);
602 ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
603
604 ASSERT_FALSE(utils::tunesTo(sel, selTarget));
605}
606
607TEST(BroadcastRadioUtilsTest, TunesToWithDabSelectorOfDifferentSecondayIds) {
608 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble + 100, kDabFrequencyKhz);
609 ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
610
611 ASSERT_FALSE(utils::tunesTo(sel, selTarget));
612}
613
614TEST(BroadcastRadioUtilsTest, TunesToWithDabSelectorWithoutSecondaryIds) {
615 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt);
616 ProgramSelector selTarget = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
617
618 ASSERT_TRUE(utils::tunesTo(sel, selTarget));
619}
620
Weilin Xuf4cfe192023-12-14 11:13:59 -0800621TEST(BroadcastRadioUtilsTest, SatisfiesWithSatisfiedIdTypesFilter) {
622 ProgramFilter filter = ProgramFilter{.identifierTypes = {IdentifierType::DAB_FREQUENCY_KHZ}};
623 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
624
625 ASSERT_TRUE(utils::satisfies(filter, sel));
626}
627
628TEST(BroadcastRadioUtilsTest, SatisfiesWithUnsatisfiedIdTypesFilter) {
629 ProgramFilter filter = ProgramFilter{.identifierTypes = {IdentifierType::DAB_FREQUENCY_KHZ}};
630 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
631
632 ASSERT_FALSE(utils::satisfies(filter, sel));
633}
634
635TEST(BroadcastRadioUtilsTest, SatisfiesWithSatisfiedIdsFilter) {
636 ProgramFilter filter =
637 ProgramFilter{.identifiers = {utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ,
638 kDabFrequencyKhz)}};
639 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
640
641 ASSERT_TRUE(utils::satisfies(filter, sel));
642}
643
644TEST(BroadcastRadioUtilsTest, SatisfiesWithUnsatisfiedIdsFilter) {
645 ProgramFilter filter =
646 ProgramFilter{.identifiers = {utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ,
647 kDabFrequencyKhz)}};
648 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz + 100);
649
650 ASSERT_FALSE(utils::satisfies(filter, sel));
651}
652
Weilin Xuef981342023-12-13 16:08:04 -0800653} // namespace aidl::android::hardware::broadcastradio