1 /*
2  * Copyright (C) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <gmock/gmock.h>
16 #include <gtest/gtest.h>
17 #include "bluetooth_avrcp_ct.h"
18 #include "bluetooth_avrcp_tg.h"
19 #include "bluetooth_host.h"
20 
21 using namespace testing;
22 using namespace testing::ext;
23 using namespace std;
24 
25 namespace OHOS {
26 namespace Bluetooth {
27 constexpr int TIME = 2;
28 
29 class AvrcpTargetObserverCommon : public AvrcpTarget::IObserver {
30 public:
31     AvrcpTargetObserverCommon() = default;
32     virtual ~AvrcpTargetObserverCommon() = default;
33 
OnConnectionStateChanged(const BluetoothRemoteDevice & device,int state,int cause)34     void OnConnectionStateChanged(const BluetoothRemoteDevice &device, int state, int cause) {}
35 private:
36 };
37 
38 static std::shared_ptr<AvrcpTargetObserverCommon> observer_ = std::make_shared<AvrcpTargetObserverCommon>();
39 static AvrcpTarget *profile_;
40 
41 class AvrcpTargetTest : public testing::Test {
42 public:
AvrcpTargetTest()43     AvrcpTargetTest()
44     {}
~AvrcpTargetTest()45     ~AvrcpTargetTest()
46     {}
47 
48     static void SetUpTestCase(void);
49     static void TearDownTestCase(void);
50     void SetUp();
51     void TearDown();
52     BluetoothHost *host_;
53 };
54 
55 
SetUpTestCase(void)56 void AvrcpTargetTest::SetUpTestCase(void)
57 {}
TearDownTestCase(void)58 void AvrcpTargetTest::TearDownTestCase(void)
59 {}
SetUp()60 void AvrcpTargetTest::SetUp()
61 {
62     host_ = &BluetoothHost::GetDefaultHost();
63     host_->EnableBt();
64     host_->EnableBle();
65     sleep(TIME);
66 }
67 
TearDown()68 void AvrcpTargetTest::TearDown()
69 {
70     host_->DisableBt();
71     host_->DisableBle();
72     host_ = nullptr;
73 }
74 
75 /*
76  * @tc.number: AvrcpTarget001
77  * @tc.name: GetProfile
78  * @tc.desc: Gets the static instance of the <b>AvrcpTarget</b> class.
79 */
80 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_GetProfile, TestSize.Level1)
81 {
82     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetProfile start";
83 
84     profile_ = AvrcpTarget::GetProfile();
85 
86     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetProfile end";
87 }
88 
89 /*
90  * @tc.number: AvrcpTarget002
91  * @tc.name: GetConnectedDevices
92  * @tc.desc: Gets the connected devices.
93 */
94 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_GetConnectedDevices, TestSize.Level1)
95 {
96     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetConnectedDevices start";
97 
98     profile_ = AvrcpTarget::GetProfile();
99     vector<BluetoothRemoteDevice> devices = profile_->GetConnectedDevices();
100 
101     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetConnectedDevices end";
102 }
103 
104 /*
105  * @tc.number: AvrcpTarget003
106  * @tc.name: GetDeviceState
107  * @tc.desc: Gets the connection state of the specified bluetooth device.
108 */
109 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_GetDeviceState, TestSize.Level1)
110 {
111     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetDeviceState start";
112 
113     profile_ = AvrcpTarget::GetProfile();
114     BluetoothRemoteDevice device;
115     int state = profile_->GetDeviceState(device);
116     EXPECT_EQ(state, 0);
117     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetDeviceState end";
118 }
119 
120 /*
121  * @tc.number: AvrcpTarget004
122  * @tc.name: RegisterObserver
123  * @tc.desc: Registers the observer.
124 */
125 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_RegisterObserver, TestSize.Level1)
126 {
127     GTEST_LOG_(INFO) << "Avrcp_UnitTest_RegisterObserver start";
128 
129     profile_ = AvrcpTarget::GetProfile();
130     profile_->RegisterObserver(observer_);
131     GTEST_LOG_(INFO) << "Avrcp_UnitTest_RegisterObserver end";
132 }
133 
134 /*
135  * @tc.number: AvrcpTarget005
136  * @tc.name: UnregisterObserver
137  * @tc.desc: Unregisters the observer.
138 */
139 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_UnregisterObserver, TestSize.Level1)
140 {
141     GTEST_LOG_(INFO) << "Avrcp_UnitTest_DeregisterObserver start";
142 
143     profile_ = AvrcpTarget::GetProfile();
144     profile_->UnregisterObserver(observer_);
145     GTEST_LOG_(INFO) << "Avrcp_UnitTest_DeregisterObserver end";
146 }
147 
148 /*
149  * @tc.number: AvrcpTarget006
150  * @tc.name: SetActiveDevice
151  * @tc.desc: Sets the active device.
152 */
153 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_SetActiveDevice, TestSize.Level1)
154 {
155     GTEST_LOG_(INFO) << "Avrcp_UnitTest_SetActiveDevice start";
156 
157     profile_ = AvrcpTarget::GetProfile();
158     BluetoothRemoteDevice device;
159     profile_->SetActiveDevice(device);
160 
161     GTEST_LOG_(INFO) << "Avrcp_UnitTest_SetActiveDevice end";
162 }
163 
164 /*
165  * @tc.number: AvrcpTarget007
166  * @tc.name: GetDevicesByStates
167  * @tc.desc: Gets the devices of the specified states.
168 */
169 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_GetDevicesByStates, TestSize.Level1)
170 {
171     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetDevicesByStates start";
172 
173     profile_ = AvrcpTarget::GetProfile();
174     vector<int> states = {static_cast<int>(BTConnectState::CONNECTED)};
175     vector<BluetoothRemoteDevice> devices = profile_->GetDevicesByStates(states);
176 
177     GTEST_LOG_(INFO) << "Avrcp_UnitTest_GetDevicesByStates end";
178 }
179 
180 /*
181  * @tc.number: AvrcpTarget008
182  * @tc.name: Connect
183  * @tc.desc: Connects to the AVRCP CT service.
184 */
185 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_Connect, TestSize.Level1)
186 {
187     GTEST_LOG_(INFO) << "Avrcp_UnitTest_Connect start";
188 
189     profile_ = AvrcpTarget::GetProfile();
190     BluetoothRemoteDevice device;
191     profile_->Connect(device);
192 
193     GTEST_LOG_(INFO) << "Avrcp_UnitTest_Connect end";
194 }
195 
196 /*
197  * @tc.number: AvrcpTarget009
198  * @tc.name: Disconnect
199  * @tc.desc: Disconnects from the AVRCP CT service.
200 */
201 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_Disconnect, TestSize.Level1)
202 {
203     GTEST_LOG_(INFO) << "Avrcp_UnitTest_Disconnect start";
204 
205     profile_ = AvrcpTarget::GetProfile();
206     BluetoothRemoteDevice device;
207     profile_->Disconnect(device);
208 
209     GTEST_LOG_(INFO) << "Avrcp_UnitTest_Disconnect end";
210 }
211 
212 /*
213  * @tc.number: AvrcpTarget010
214  * @tc.name: NotifyPlaybackStatusChanged
215  * @tc.desc: Notifies the playback status is changed.
216 */
217 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyPlaybackStatusChanged, TestSize.Level1)
218 {
219     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyPlaybackStatusChanged start";
220 
221     profile_ = AvrcpTarget::GetProfile();
222     profile_->NotifyPlaybackStatusChanged(0,0);
223 
224     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyPlaybackStatusChanged end";
225 }
226 
227 /*
228  * @tc.number: AvrcpTarget011
229  * @tc.name: NotifyTrackChanged
230  * @tc.desc: Notifies the track is changed.
231 */
232 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyTrackChanged, TestSize.Level1)
233 {
234     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyTrackChanged start";
235 
236     profile_ = AvrcpTarget::GetProfile();
237     profile_->NotifyTrackChanged(0,0);
238 
239     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyTrackChanged end";
240 }
241 
242 /*
243  * @tc.number: AvrcpTarget012
244  * @tc.name: NotifyTrackReachedEnd
245  * @tc.desc: Notifies the track reached end is changed.
246 */
247 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyTrackReachedEnd, TestSize.Level1)
248 {
249     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyTrackReachedEnd start";
250 
251     profile_ = AvrcpTarget::GetProfile();
252     profile_->NotifyTrackReachedEnd(0);
253 
254     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyTrackReachedEnd end";
255 }
256 
257 /*
258  * @tc.number: AvrcpTarget013
259  * @tc.name: NotifyTrackReachedStart
260  * @tc.desc: Notifies the track reached start is changed.
261 */
262 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyTrackReachedStart, TestSize.Level1)
263 {
264     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyTrackReachedStart start";
265 
266     profile_ = AvrcpTarget::GetProfile();
267     profile_->NotifyTrackReachedStart(0);
268 
269     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyTrackReachedStart end";
270 }
271 
272 /*
273  * @tc.number: AvrcpTarget014
274  * @tc.name: NotifyPlaybackPosChanged
275  * @tc.desc: Notifies the player application setting is changed.
276 */
277 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyPlaybackPosChanged, TestSize.Level1)
278 {
279     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyPlaybackPosChanged start";
280 
281     profile_ = AvrcpTarget::GetProfile();
282     profile_->NotifyPlaybackPosChanged(0);
283 
284     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyPlaybackPosChanged end";
285 }
286 
287 /*
288  * @tc.number: AvrcpTarget015
289  * @tc.name: NotifyPlayerAppSettingChanged
290  * @tc.desc: Notifies the player application setting is changed.
291 */
292 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyPlayerAppSettingChanged, TestSize.Level1)
293 {
294     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyPlayerAppSettingChanged start";
295 
296     profile_ = AvrcpTarget::GetProfile();
297     vector<uint8_t> attributes = {0};
298     vector<uint8_t> values = {0};
299     profile_->NotifyPlayerAppSettingChanged(attributes, values);
300 
301     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyPlayerAppSettingChanged end";
302 }
303 
304 /*
305  * @tc.number: AvrcpTarget016
306  * @tc.name: NotifyNowPlayingContentChanged
307  * @tc.desc: Notifies the addressed player is changed.
308 */
309 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyNowPlayingContentChanged, TestSize.Level1)
310 {
311     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyNowPlayingContentChanged start";
312 
313     profile_ = AvrcpTarget::GetProfile();
314 
315     profile_->NotifyNowPlayingContentChanged();
316 
317     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyNowPlayingContentChanged end";
318 }
319 
320 /*
321  * @tc.number: AvrcpTarget017
322  * @tc.name: NotifyAvailablePlayersChanged
323  * @tc.desc: Notifies that has the available player.
324 */
325 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyAvailablePlayersChanged, TestSize.Level1)
326 {
327     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyAvailablePlayersChanged start";
328 
329     profile_ = AvrcpTarget::GetProfile();
330 
331     profile_->NotifyAvailablePlayersChanged();
332 
333     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyAvailablePlayersChanged end";
334 }
335 
336 /*
337  * @tc.number: AvrcpTarget018
338  * @tc.name: NotifyAddressedPlayerChanged
339  * @tc.desc: Notifies the addressed player is changed.
340 */
341 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyAddressedPlayerChanged, TestSize.Level1)
342 {
343     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyAddressedPlayerChanged start";
344 
345     profile_ = AvrcpTarget::GetProfile();
346 
347     profile_->NotifyAddressedPlayerChanged(0 ,0);
348 
349     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyAddressedPlayerChanged end";
350 }
351 
352 /*
353  * @tc.number: AvrcpTarget019
354  * @tc.name: NotifyUidChanged
355  * @tc.desc: Notifies the uids is changed.
356 */
357 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyUidChanged, TestSize.Level1)
358 {
359     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyUidChanged start";
360 
361     profile_ = AvrcpTarget::GetProfile();
362 
363     profile_->NotifyUidChanged(0);
364 
365     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyUidChanged end";
366 }
367 
368 /*
369  * @tc.number: AvrcpTarget020
370  * @tc.name: NotifyVolumeChanged
371  * @tc.desc: Notifies the absolute volume is changed.
372 */
373 HWTEST_F(AvrcpTargetTest, Avrcp_UnitTest_NotifyVolumeChanged, TestSize.Level1)
374 {
375     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyVolumeChanged start";
376 
377     profile_ = AvrcpTarget::GetProfile();
378 
379     profile_->NotifyVolumeChanged(0);
380 
381     GTEST_LOG_(INFO) << "Avrcp_UnitTest_NotifyVolumeChanged end";
382 }
383 }  // namespace Bluetooth
384 }  // namespace OHOS