blob: b2dc94ac77dec8b9483cbc86709dc3e80efd2e1c [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;
35} // namespace
36
Weilin Xu6633a852023-12-13 16:08:04 -080037TEST(BroadcastRadioUtilsTest, HasIdWithPrimaryIdType) {
Weilin Xuef981342023-12-13 16:08:04 -080038 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
39
40 ASSERT_TRUE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
41}
42
Weilin Xu6633a852023-12-13 16:08:04 -080043TEST(BroadcastRadioUtilsTest, HasIdWithSecondaryIdType) {
44 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
45
46 ASSERT_TRUE(utils::hasId(sel, IdentifierType::DAB_FREQUENCY_KHZ));
47}
48
49TEST(BroadcastRadioUtilsTest, HasIdWithIdNotInSelector) {
50 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
51
52 ASSERT_FALSE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
53}
54
55TEST(BroadcastRadioUtilsTest, GetIdWithPrimaryIdType) {
56 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
57
58 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT), static_cast<int64_t>(kDabSidExt));
59}
60
61TEST(BroadcastRadioUtilsTest, GetIdWithSecondaryIdType) {
62 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
63
64 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_ENSEMBLE), static_cast<int64_t>(kDabEnsemble));
65}
66
67TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFound) {
68 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
69
70 ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ), 0);
71}
72
73TEST(BroadcastRadioUtilsTest, GetIdWithIdFoundAndDefaultValue) {
74 int64_t defaultValue = 0x0E10000C222u;
75 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
76
77 ASSERT_EQ(utils::getId(sel, IdentifierType::DAB_SID_EXT, defaultValue),
78 static_cast<int64_t>(kDabSidExt));
79}
80
81TEST(BroadcastRadioUtilsTest, GetIdWithIdNotFoundAndDefaultValue) {
82 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
83
84 ASSERT_EQ(utils::getId(sel, IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz),
85 static_cast<int64_t>(kFmFrequencyKHz));
86}
87
88TEST(BroadcastRadioUtilsTest, MakeIdentifier) {
Weilin Xuef981342023-12-13 16:08:04 -080089 ProgramIdentifier id =
90 utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz);
91
Weilin Xu6633a852023-12-13 16:08:04 -080092 EXPECT_EQ(id.type, IdentifierType::AMFM_FREQUENCY_KHZ);
93 EXPECT_EQ(id.value, kFmFrequencyKHz);
Weilin Xuef981342023-12-13 16:08:04 -080094}
95
Weilin Xu6633a852023-12-13 16:08:04 -080096TEST(BroadcastRadioUtilsTest, MakeSelectorAmfm) {
Weilin Xuef981342023-12-13 16:08:04 -080097 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
98
Weilin Xu6633a852023-12-13 16:08:04 -080099 EXPECT_EQ(sel.primaryId.type, IdentifierType::AMFM_FREQUENCY_KHZ);
100 EXPECT_EQ(sel.primaryId.value, kFmFrequencyKHz);
101 EXPECT_TRUE(sel.secondaryIds.empty());
Weilin Xuef981342023-12-13 16:08:04 -0800102}
103
Weilin Xu6633a852023-12-13 16:08:04 -0800104TEST(BroadcastRadioUtilsTest, MakeSelectorHd) {
Weilin Xuef981342023-12-13 16:08:04 -0800105 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
106
Weilin Xu6633a852023-12-13 16:08:04 -0800107 EXPECT_EQ(sel.primaryId.type, IdentifierType::HD_STATION_ID_EXT);
108 EXPECT_TRUE(sel.secondaryIds.empty());
109 EXPECT_EQ(utils::getHdSubchannel(sel), static_cast<int>(kHdSubChannel));
110 EXPECT_EQ(utils::getHdFrequency(sel), static_cast<uint32_t>(kHdFrequency));
Weilin Xuef981342023-12-13 16:08:04 -0800111}
112
Weilin Xu6633a852023-12-13 16:08:04 -0800113TEST(BroadcastRadioUtilsTest, MakeHdRadioStationName) {
Weilin Xuef981342023-12-13 16:08:04 -0800114 std::string stationName = "aB1-FM";
115 int64_t expectedIdValue = 0x4D46314241;
116
117 ProgramIdentifier stationNameId = utils::makeHdRadioStationName(stationName);
118
Weilin Xu6633a852023-12-13 16:08:04 -0800119 EXPECT_EQ(stationNameId.type, IdentifierType::HD_STATION_NAME);
120 EXPECT_EQ(stationNameId.value, expectedIdValue);
Weilin Xuef981342023-12-13 16:08:04 -0800121}
122
Weilin Xu6633a852023-12-13 16:08:04 -0800123TEST(BroadcastRadioUtilsTest, GetHdFrequencyWithoutHdId) {
Weilin Xuef981342023-12-13 16:08:04 -0800124 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
125
126 ASSERT_EQ(utils::getHdFrequency(sel), 0u);
127}
128
Weilin Xu6633a852023-12-13 16:08:04 -0800129TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithAmFmSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800130 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
131
132 ASSERT_TRUE(utils::hasAmFmFrequency(sel));
133}
134
Weilin Xu6633a852023-12-13 16:08:04 -0800135TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800136 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
137
138 ASSERT_TRUE(utils::hasAmFmFrequency(sel));
139}
140
Weilin Xu6633a852023-12-13 16:08:04 -0800141TEST(BroadcastRadioUtilsTest, HasAmFmFrequencyWithNonAmFmHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800142 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
143
144 ASSERT_FALSE(utils::hasAmFmFrequency(sel));
145}
146
Weilin Xu6633a852023-12-13 16:08:04 -0800147TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithAmFmSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800148 ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
149
150 ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kFmFrequencyKHz));
151}
152
Weilin Xu6633a852023-12-13 16:08:04 -0800153TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800154 ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
155
156 ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kHdFrequency));
157}
158
Weilin Xu6633a852023-12-13 16:08:04 -0800159TEST(BroadcastRadioUtilsTest, GetAmFmFrequencyWithNonAmFmHdSelector) {
Weilin Xuef981342023-12-13 16:08:04 -0800160 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
161
162 ASSERT_EQ(utils::getAmFmFrequency(sel), 0u);
163}
164
Weilin Xu6633a852023-12-13 16:08:04 -0800165TEST(BroadcastRadioUtilsTest, MakeSelectorDabWithOnlySidExt) {
166 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt);
167
168 EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
169 EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
170 EXPECT_TRUE(sel.secondaryIds.empty());
171}
172
173TEST(BroadcastRadioUtilsTest, MakeSelectorDab) {
174 ProgramIdentifier ensembleIdExpected =
175 utils::makeIdentifier(IdentifierType::DAB_ENSEMBLE, kDabEnsemble);
176 ProgramIdentifier frequencyIdExpected =
177 utils::makeIdentifier(IdentifierType::DAB_FREQUENCY_KHZ, kDabFrequencyKhz);
178
179 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
180
181 EXPECT_EQ(sel.primaryId.type, IdentifierType::DAB_SID_EXT);
182 EXPECT_EQ(sel.primaryId.value, static_cast<int64_t>(kDabSidExt));
183 EXPECT_EQ(sel.secondaryIds.size(), 2u);
184 EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), ensembleIdExpected),
185 sel.secondaryIds.end());
186 EXPECT_NE(std::find(sel.secondaryIds.begin(), sel.secondaryIds.end(), frequencyIdExpected),
187 sel.secondaryIds.end());
188}
189
190TEST(BroadcastRadioUtilsTest, GetDabSId) {
191 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
192
193 ASSERT_EQ(utils::getDabSId(sel), kDabSid);
194}
195
196TEST(BroadcastRadioUtilsTest, GetDabEccCode) {
197 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
198
199 ASSERT_EQ(utils::getDabEccCode(sel), kDabEccCode);
200}
201
202TEST(BroadcastRadioUtilsTest, GetDabSCIdS) {
203 ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
204
205 ASSERT_EQ(utils::getDabSCIdS(sel), kDabSCIdS);
206}
207
Weilin Xuef981342023-12-13 16:08:04 -0800208} // namespace aidl::android::hardware::broadcastradio