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 #define private public
16 #define protected public
17 
18 #include <map>
19 #include <mutex>
20 
21 #include "call_earthquake_alarm_locator.h"
22 #include "data_ability_observer_stub.h"
23 #include "call_manager_inner_type.h"
24 #include "call_state_listener_base.h"
25 #include "call_control_manager.h"
26 #include "audio_control_manager.h"
27 #include "ring.h"
28 #include "common_type.h"
29 #include "call_base.h"
30 #include "cs_call.h"
31 #include "call_voice_assistant_manager.h"
32 #include "gtest/gtest.h"
33 
34 namespace OHOS {
35 namespace Telephony {
36 using namespace testing::ext;
37 using namespace std;
38 constexpr int32_t CALL_ID_NUM = -1;
39 constexpr int32_t ACCOUNT_ID = -1;
40 class CallVoiceAssistantManagerTest : public testing::Test {
41 public:
SetUpTestCase()42     static void SetUpTestCase() {};
TearDownTestCase()43     static void TearDownTestCase() {};
SetUp()44     virtual void SetUp() {};
TearDown()45     virtual void TearDown() {};
46 };
47 
48 /**
49  * @tc.number   Telephony_CallVoiceAssistantManager_001
50  * @tc.name     test normal branch
51  * @tc.desc     Function test
52  */
53 HWTEST_F(CallVoiceAssistantManagerTest, Telephony_CallVoiceAssistantManager_001, Function | MediumTest | Level3)
54 {
55     std::string dialing = "dial";
56     std::string incoming = "come";
57     DialParaInfo paraInfo;
58     sptr<CallBase> callObjectPtr = std::make_unique<CSCall>(paraInfo).release();
59     TelCallState priorState = TelCallState::CALL_STATUS_DIALING;
60     TelCallState nextState = TelCallState::CALL_STATUS_INCOMING;
61     std::shared_ptr<CallVoiceAssistantManager> voicePtr = CallVoiceAssistantManager::GetInstance();
62     if (voicePtr == nullptr) {
63         TELEPHONY_LOGE("voicePtr is nullptr");
64         return;
65     }
66     voicePtr->mInstance_ = voicePtr;
67     voicePtr->CallStateUpdated(callObjectPtr, priorState, nextState);
68     voicePtr->CallStatusDialing(CALL_ID_NUM, ACCOUNT_ID);
69     voicePtr->CallStatusIncoming(CALL_ID_NUM, ACCOUNT_ID);
70     voicePtr->CallStatusActive(CALL_ID_NUM, ACCOUNT_ID);
71     voicePtr->CallStatusDisconnected(CALL_ID_NUM, ACCOUNT_ID);
72     voicePtr->ConnectAbility(ACCOUNT_ID);
73     voicePtr->OnStartService(incoming, ACCOUNT_ID);
74     voicePtr->RegisterListenSwitchState();
75     voicePtr->PublishCommonEvent(true, incoming);
76     voicePtr->DisconnectAbility();
77     voicePtr->UnRegisterListenSwitchState();
78     voicePtr->PublishCommonEvent(false, dialing);
79     voicePtr->OnStopService();
80     voicePtr->Release();
81     ASSERT_TRUE(voicePtr->GetInstance() != nullptr);
82     ASSERT_TRUE(voicePtr->settingsCallback_  == nullptr);
83     ASSERT_TRUE(voicePtr->connectCallback_  == nullptr);
84     ASSERT_TRUE(voicePtr->mRemoteObject == nullptr);
85 }
86 
87 /**
88  * @tc.number   Telephony_CallVoiceAssistantManager_002
89  * @tc.name     test normal branch
90  * @tc.desc     Function test
91  */
92 HWTEST_F(CallVoiceAssistantManagerTest, Telephony_CallVoiceAssistantManager_002, Function | MediumTest | Level3)
93 {
94     std::string value = "";
95     std::string dialing = "dial";
96     std::string controlSwitch = "incoming_call_voice_control_switch";
97     ContactInfo contactInfo;
98     std::shared_ptr<CallVoiceAssistantManager> voicePtr = CallVoiceAssistantManager::GetInstance();
99     sptr<IRemoteObject> remoteObject = sptr<VoiceAssistantConnectCallback>::MakeSptr(ACCOUNT_ID);
100     if (voicePtr == nullptr) {
101         TELEPHONY_LOGE("voicePtr is nullptr");
102         return;
103     }
104     voicePtr->mInstance_ = voicePtr;
105     voicePtr->SetIsControlSwitchOn(true);
106     voicePtr->GetIsControlSwitchOn();
107     voicePtr->GetIsPlayRing();
108     voicePtr->UpdateVoipCallState(ACCOUNT_ID);
109     auto infoptr = voicePtr->GetContactInfo(ACCOUNT_ID);
110     voicePtr->UpdateNumberLocation(value, ACCOUNT_ID);
111     voicePtr->UpdateContactInfo(contactInfo, ACCOUNT_ID);
112     voicePtr->UpdateRemoteObject(remoteObject, ACCOUNT_ID, nullptr);
113     voicePtr->OnStopService();
114     voicePtr->Initial();
115     voicePtr->QueryValue(controlSwitch, value);
116     voicePtr->IsStartVoiceBroadcast();
117     voicePtr->IsSwitchOn(controlSwitch);
118     voicePtr->OnStartService(dialing, ACCOUNT_ID);
119     voicePtr->MuteRinger();
120     voicePtr->UpdateReplyData(value);
121     voicePtr->GetSendString(infoptr);
122     voicePtr->SendRequest(infoptr, true);
123     voicePtr->OnStopService();
124     voicePtr->Release();
125     ASSERT_TRUE(voicePtr->GetInstance() != nullptr);
126     ASSERT_TRUE(voicePtr->settingsCallback_  == nullptr);
127     ASSERT_TRUE(voicePtr->connectCallback_  == nullptr);
128     ASSERT_TRUE(voicePtr->mRemoteObject == nullptr);
129 }
130 
131 /**
132  * @tc.number   Telephony_VoiceAssistantSwitchObserver_001
133  * @tc.name     test normal branch
134  * @tc.desc     Function test
135  */
136 HWTEST_F(CallVoiceAssistantManagerTest, Telephony_VoiceAssistantSwitchObserver_001, Function | MediumTest | Level3)
137 {
138     sptr<AAFwk::IDataAbilityObserver> settingsCallback = sptr<VoiceAssistantSwitchObserver>::MakeSptr();
139     settingsCallback->OnChange();
140     ASSERT_TRUE(settingsCallback != nullptr);
141 }
142 
143 /**
144  * @tc.number   Telephony_VoiceAssistantConnectCallback_001
145  * @tc.name     test normal branch
146  * @tc.desc     Function test
147  */
148 HWTEST_F(CallVoiceAssistantManagerTest, Telephony_VoiceAssistantConnectCallback_001, Function | MediumTest | Level3)
149 {
150     sptr<IRemoteObject> remoteObject = sptr<VoiceAssistantConnectCallback>::MakeSptr(ACCOUNT_ID);
151     AppExecFwk::ElementName element;
152     sptr<AAFwk::IAbilityConnection> connectCallback = sptr<VoiceAssistantConnectCallback>::MakeSptr(ACCOUNT_ID);
153     connectCallback->OnAbilityConnectDone(element, remoteObject, ACCOUNT_ID);
154     connectCallback->OnAbilityDisconnectDone(element, ACCOUNT_ID);
155     ASSERT_TRUE(connectCallback != nullptr);
156 }
157 
158 /**
159  * @tc.number   Telephony_VoiceAssistantRingSubscriber_001
160  * @tc.name     test normal branch
161  * @tc.desc     Function test
162  */
163 HWTEST_F(CallVoiceAssistantManagerTest, Telephony_VoiceAssistantRingSubscriber_001, Function | MediumTest | Level3)
164 {
165     std::string event = "test.test.test.test";
166     EventFwk::MatchingSkills matchingSkills;
167     matchingSkills.AddEvent(event);
168     EventFwk::CommonEventSubscribeInfo subscribeInfo(matchingSkills);
169     auto subscriber = std::make_shared<VoiceAssistantRingSubscriber>(subscribeInfo);
170     EventFwk::CommonEventData eventData;
171     AAFwk::Want want;
172     want.SetAction(event);
173     want.SetParam(event, event);
174     eventData.SetWant(want);
175     subscriber->OnReceiveEvent(eventData);
176     subscriber->Initial();
177     subscriber->Release();
178     ASSERT_TRUE(subscriber->subscriber_ == nullptr);
179 }
180 
181 }
182 }
183