1 /*
2 * Copyright (C) 2024 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
16 #include <gtest/gtest.h>
17 #include <string>
18 #include "incall_observer.h"
19 #include <cstdlib>
20 #include "media_telephony_listener.h"
21
22 using namespace std;
23 using namespace testing::ext;
24 using namespace OHOS;
25 using namespace OHOS::Media;
26
27 namespace OHOS {
28 namespace Media {
29 namespace InCallObserverFuncUT {
30
31 class InCallObserverTestCallBack : public InCallObserverCallBack {
32 public:
InCallObserverTestCallBack()33 InCallObserverTestCallBack() {}
~InCallObserverTestCallBack()34 ~InCallObserverTestCallBack() {}
StopAndRelease(AVScreenCaptureStateCode state)35 bool StopAndRelease(AVScreenCaptureStateCode state)
36 {
37 return true;
38 }
NotifyStopAndRelease(AVScreenCaptureStateCode state)39 bool NotifyStopAndRelease(AVScreenCaptureStateCode state)
40 {
41 return true;
42 }
Release()43 void Release() {}
TelCallStateUpdated(bool isInCall)44 bool TelCallStateUpdated(bool isInCall)
45 {
46 return true;
47 }
NotifyTelCallStateUpdated(bool isInCall)48 bool NotifyTelCallStateUpdated(bool isInCall)
49 {
50 return true;
51 }
52 };
53
54 class InCallObserverTestFalseCallBack : public InCallObserverCallBack {
55 public:
InCallObserverTestFalseCallBack()56 InCallObserverTestFalseCallBack() {}
~InCallObserverTestFalseCallBack()57 ~InCallObserverTestFalseCallBack() {}
StopAndRelease(AVScreenCaptureStateCode state)58 bool StopAndRelease(AVScreenCaptureStateCode state)
59 {
60 return false;
61 }
NotifyStopAndRelease(AVScreenCaptureStateCode state)62 bool NotifyStopAndRelease(AVScreenCaptureStateCode state)
63 {
64 return false;
65 }
Release()66 void Release() {}
TelCallStateUpdated(bool isInCall)67 bool TelCallStateUpdated(bool isInCall)
68 {
69 return false;
70 }
NotifyTelCallStateUpdated(bool isInCall)71 bool NotifyTelCallStateUpdated(bool isInCall)
72 {
73 return false;
74 }
75 };
76
77 class InCallObserverInnerUnitTest : public testing::Test {
78 public:
79 static void SetUpTestCase(void);
80
81 static void TearDownTestCase(void);
82
83 void SetUp(void);
84
85 void TearDown(void);
86 };
87
SetUpTestCase(void)88 void InCallObserverInnerUnitTest::SetUpTestCase(void) {}
89
TearDownTestCase(void)90 void InCallObserverInnerUnitTest::TearDownTestCase(void) {}
91
SetUp(void)92 void InCallObserverInnerUnitTest::SetUp(void)
93 {
94 std::cout << "[SetUp]: SetUp!!!, test: "<< std::endl;
95 }
96
TearDown(void)97 void InCallObserverInnerUnitTest::TearDown(void)
98 {
99 std::cout << "[TearDown]: over!!!" << std::endl;
100 }
101
102 /**
103 * @tc.name: RegisterObserver_01
104 * @tc.desc: RegisterObserver_01
105 * @tc.type: FUNC
106 */
107 HWTEST_F(InCallObserverInnerUnitTest, RegisterObserver_01, TestSize.Level1)
108 {
109 ASSERT_TRUE(InCallObserver::GetInstance().RegisterObserver());
110 InCallObserver::GetInstance().UnRegisterObserver();
111 }
112
113 /**
114 * @tc.name: OnCallStateUpdated_01
115 * @tc.desc: OnCallStateUpdated_01
116 * @tc.type: FUNC
117 */
118 HWTEST_F(InCallObserverInnerUnitTest, OnCallStateUpdated_01, TestSize.Level1)
119 {
120 ASSERT_FALSE(InCallObserver::GetInstance().IsInCall(true));
121 InCallObserver::GetInstance().OnCallStateUpdated(true);
122 ASSERT_TRUE(InCallObserver::GetInstance().IsInCall(false));
123 InCallObserver::GetInstance().OnCallStateUpdated(false);
124 ASSERT_FALSE(InCallObserver::GetInstance().IsInCall(false));
125 }
126
127 /**
128 * @tc.name: RegisterInCallObserverCallBack_01
129 * @tc.desc: RegisterInCallObserverCallBack_01
130 * @tc.type: FUNC
131 */
132 HWTEST_F(InCallObserverInnerUnitTest, RegisterInCallObserverCallBack_01, TestSize.Level1)
133 {
134 auto inCallObserverCallBack = std::make_shared<InCallObserverTestCallBack>();
135 ASSERT_TRUE(InCallObserver::GetInstance().RegisterInCallObserverCallBack(inCallObserverCallBack));
136 InCallObserver::GetInstance().UnregisterInCallObserverCallBack(inCallObserverCallBack);
137 ASSERT_TRUE(inCallObserverCallBack->StopAndRelease(
138 AVScreenCaptureStateCode::SCREEN_CAPTURE_STATE_STOPPED_BY_CALL));
139 }
140
141 /**
142 * @tc.name: InCallCallBackReturn_01
143 * @tc.desc: InCallCallBackReturn_01
144 * @tc.type: FUNC
145 */
146 HWTEST_F(InCallObserverInnerUnitTest, InCallCallBackReturn_01, TestSize.Level1)
147 {
148 InCallObserver::GetInstance().UnRegisterObserver();
149 ASSERT_TRUE(InCallObserver::GetInstance().RegisterObserver());
150 auto inCallObserverCallBack = std::make_shared<InCallObserverTestCallBack>();
151 ASSERT_TRUE(InCallObserver::GetInstance().RegisterInCallObserverCallBack(inCallObserverCallBack));
152 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(true));
153 ASSERT_TRUE(InCallObserver::GetInstance().IsInCall(false));
154 InCallObserver::GetInstance().UnRegisterObserver();
155 InCallObserver::GetInstance().OnCallStateUpdated(false);
156 }
157
158 /**
159 * @tc.name: InCallCallBackReturn_02
160 * @tc.desc: InCallCallBackReturn_02
161 * @tc.type: FUNC
162 */
163 HWTEST_F(InCallObserverInnerUnitTest, InCallCallBackReturn_02, TestSize.Level1)
164 {
165 InCallObserver::GetInstance().UnRegisterObserver();
166 ASSERT_TRUE(InCallObserver::GetInstance().RegisterObserver());
167 auto inCallObserverCallBack = std::make_shared<InCallObserverTestCallBack>();
168 ASSERT_TRUE(InCallObserver::GetInstance().RegisterInCallObserverCallBack(inCallObserverCallBack));
169 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(true));
170 ASSERT_TRUE(InCallObserver::GetInstance().IsInCall(false));
171 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(false));
172 ASSERT_FALSE(InCallObserver::GetInstance().IsInCall(false));
173 sleep(3); // 3 second
174 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(true));
175 ASSERT_TRUE(InCallObserver::GetInstance().IsInCall(false));
176 InCallObserver::GetInstance().UnregisterInCallObserverCallBack(inCallObserverCallBack);
177 ASSERT_TRUE(InCallObserver::GetInstance().IsInCall(false));
178 InCallObserver::GetInstance().UnRegisterObserver();
179 InCallObserver::GetInstance().OnCallStateUpdated(false);
180 }
181
182 /**
183 * @tc.name: InCallCallBackReturn_03
184 * @tc.desc: InCallCallBackReturn_03
185 * @tc.type: FUNC
186 */
187 HWTEST_F(InCallObserverInnerUnitTest, InCallCallBackReturn_03, TestSize.Level1)
188 {
189 InCallObserver::GetInstance().UnRegisterObserver();
190 ASSERT_TRUE(InCallObserver::GetInstance().RegisterObserver());
191 auto inCallObserverTestFalseCallBack = std::make_shared<InCallObserverTestFalseCallBack>();
192 ASSERT_TRUE(InCallObserver::GetInstance().RegisterInCallObserverCallBack(inCallObserverTestFalseCallBack));
193 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(false));
194 ASSERT_FALSE(InCallObserver::GetInstance().IsInCall(false));
195 sleep(3); // 3 second
196 ASSERT_FALSE(InCallObserver::GetInstance().OnCallStateUpdated(true));
197 ASSERT_TRUE(InCallObserver::GetInstance().IsInCall(false));
198 InCallObserver::GetInstance().UnregisterInCallObserverCallBack(inCallObserverTestFalseCallBack);
199 ASSERT_TRUE(InCallObserver::GetInstance().IsInCall(false));
200 InCallObserver::GetInstance().UnRegisterObserver();
201 InCallObserver::GetInstance().OnCallStateUpdated(false);
202 }
203
204 /**
205 * @tc.name: InCallCallBackReturn_04
206 * @tc.desc: InCallCallBackReturn_04
207 * @tc.type: FUNC
208 */
209 HWTEST_F(InCallObserverInnerUnitTest, InCallCallBackReturn_04, TestSize.Level1)
210 {
211 InCallObserver::GetInstance().UnRegisterObserver();
212 ASSERT_TRUE(InCallObserver::GetInstance().RegisterObserver());
213 std::weak_ptr<InCallObserverCallBack> inCallObserverTestFalseCallBack =
214 std::make_shared<InCallObserverTestFalseCallBack>();
215 inCallObserverTestFalseCallBack.reset();
216 ASSERT_FALSE(InCallObserver::GetInstance().RegisterInCallObserverCallBack(inCallObserverTestFalseCallBack));
217 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(false));
218 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(true));
219 InCallObserver::GetInstance().UnregisterInCallObserverCallBack(inCallObserverTestFalseCallBack);
220 InCallObserver::GetInstance().UnRegisterObserver();
221 InCallObserver::GetInstance().OnCallStateUpdated(false);
222 }
223
224 /**
225 * @tc.name: InCallCallBackReturn_05
226 * @tc.desc: InCallCallBackReturn_05
227 * @tc.type: FUNC
228 */
229 HWTEST_F(InCallObserverInnerUnitTest, InCallCallBackReturn_05, TestSize.Level1)
230 {
231 auto telephonyObserver = std::make_unique<MediaTelephonyListener>().release();
232 std::u16string phoneNumber = u"";
233 telephonyObserver->OnCallStateUpdated(3, 1, phoneNumber); // 3 invalid slot id
234 int32_t slotId = -1; // -1 all slot id
235 for (int i = -1; i <= 9; i++) { // -1 9 foreach all state
236 telephonyObserver->OnCallStateUpdated(slotId, i, phoneNumber);
237 }
238 telephonyObserver->OnCallStateUpdated(slotId, 6, phoneNumber); // CALL_STATUS_DISCONNECTED
239 const std::vector<sptr<OHOS::Telephony::SignalInformation>> vecSigInfo{};
240 telephonyObserver->OnSignalInfoUpdated(slotId, vecSigInfo);
241 telephonyObserver->OnNetworkStateUpdated(slotId, nullptr);
242 const std::vector<sptr<OHOS::Telephony::CellInformation>> vecCellInfo{};
243 telephonyObserver->OnCellInfoUpdated(slotId, vecCellInfo);
244 telephonyObserver->OnSimStateUpdated(slotId, OHOS::Telephony::CardType::UNKNOWN_CARD,
245 OHOS::Telephony::SimState::SIM_STATE_UNKNOWN, OHOS::Telephony::LockReason::SIM_NONE);
246 telephonyObserver->OnCellularDataConnectStateUpdated(slotId, 0, 0);
247 telephonyObserver->OnCellularDataFlowUpdated(slotId, 0);
248 telephonyObserver->OnCfuIndicatorUpdated(slotId, false);
249 telephonyObserver->OnVoiceMailMsgIndicatorUpdated(slotId, false);
250 telephonyObserver->OnIccAccountUpdated();
251 InCallObserver::GetInstance().IsInCall(false);
252 ASSERT_TRUE(InCallObserver::GetInstance().OnCallStateUpdated(false));
253 }
254 } // namespace InCallObserverFuncUT
255 } // namespace Media
256 } // namespace OHOS
257