1 /*
2 * Copyright (c) 2021 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 "completed_callback.h"
18 #define private public
19 #define protected public
20 #include "completed_dispatcher.h"
21 #undef private
22 #undef protected
23 #include "element_name.h"
24 #include "event_handler.h"
25 #include "pending_want.h"
26 #include "base_types.h"
27 #include "want.h"
28 #include "want_params.h"
29 #include "want_receiver_stub.h"
30 #include "bool_wrapper.h"
31
32 using namespace testing::ext;
33 using namespace OHOS::AAFwk;
34 using namespace OHOS;
35 using OHOS::AppExecFwk::ElementName;
36 using namespace OHOS::AppExecFwk;
37 using vector_str = std::vector<std::string>;
38 namespace {
39 const int32_t SEND_FINISHED_CODE = 100;
40 }
41
42 namespace OHOS::AbilityRuntime::WantAgent {
43 class CompletedDispatcherTest : public testing::Test {
44 public:
CompletedDispatcherTest()45 CompletedDispatcherTest()
46 {}
~CompletedDispatcherTest()47 ~CompletedDispatcherTest()
48 {}
49 static void SetUpTestCase(void);
50 static void TearDownTestCase(void);
51 void SetUp();
52 void TearDown();
53 Want MakeWant(std::string deviceId, std::string abilityName, std::string bundleName);
54
55 class CompletedCallbackSon : public CompletedCallback {
56 /**
57 * Called when a Send operation as completed.
58 *
59 * @param want The original Want that was sent.
60 * @param resultCode The final result code determined by the Send.
61 * @param resultData The final data collected by a broadcast.
62 * @param resultExtras The final extras collected by a broadcast.
63 */
64 public:
65 void OnSendFinished(const AAFwk::Want& want, int resultCode, const std::string& resultData,
66 const AAFwk::WantParams& resultExtras) override;
67 static int code;
68 };
69 };
70
71 int CompletedDispatcherTest::CompletedCallbackSon::code = 0;
72
OnSendFinished(const AAFwk::Want & want,int resultCode,const std::string & resultData,const AAFwk::WantParams & resultExtras)73 void CompletedDispatcherTest::CompletedCallbackSon::OnSendFinished(
74 const AAFwk::Want& want, int resultCode, const std::string& resultData, const AAFwk::WantParams& resultExtras)
75 {
76 code = SEND_FINISHED_CODE;
77 }
78
MakeWant(std::string deviceId,std::string abilityName,std::string bundleName)79 Want CompletedDispatcherTest::MakeWant(std::string deviceId, std::string abilityName, std::string bundleName)
80 {
81 ElementName element(deviceId, bundleName, abilityName);
82 Want want;
83 want.SetElement(element);
84 return want;
85 }
86
SetUpTestCase(void)87 void CompletedDispatcherTest::SetUpTestCase(void)
88 {}
89
TearDownTestCase(void)90 void CompletedDispatcherTest::TearDownTestCase(void)
91 {}
92
SetUp(void)93 void CompletedDispatcherTest::SetUp(void)
94 {}
95
TearDown(void)96 void CompletedDispatcherTest::TearDown(void)
97 {}
98
99 /*
100 * @tc.number : CompletedDispatcher_0100
101 * @tc.name : CompletedDispatcher Constructors
102 * @tc.desc : 1.The parameter is nullptr
103 */
104 HWTEST_F(CompletedDispatcherTest, CompletedDispatcher_0100, Function | MediumTest | Level1)
105 {
106 std::shared_ptr<PendingWant> pendingWant = nullptr;
107 CompletedDispatcher completedDispatcher(pendingWant, nullptr, nullptr);
108 EXPECT_EQ(completedDispatcher.pendingWant_, nullptr);
109 EXPECT_EQ(completedDispatcher.callback_, nullptr);
110 EXPECT_EQ(completedDispatcher.handler_, nullptr);
111 }
112
113 /*
114 * @tc.number : CompletedDispatcher_0200
115 * @tc.name : CompletedDispatcher Constructors
116 * @tc.desc : 1.The parameter is not nullptr
117 */
118 HWTEST_F(CompletedDispatcherTest, CompletedDispatcher_0200, Function | MediumTest | Level1)
119 {
120 std::shared_ptr<CompletedDispatcherTest::CompletedCallbackSon> callBack =
121 std::make_shared<CompletedDispatcherTest::CompletedCallbackSon>();
122 std::shared_ptr<PendingWant> pendingWant = nullptr;
123 CompletedDispatcher completedDispatcher(pendingWant, callBack, nullptr);
124 EXPECT_EQ(completedDispatcher.pendingWant_, nullptr);
125 EXPECT_EQ(completedDispatcher.callback_, callBack);
126 EXPECT_EQ(completedDispatcher.handler_, nullptr);
127 }
128
129 /*
130 * @tc.number : CompletedDispatcher_0300
131 * @tc.name : CompletedDispatcher PerformReceive
132 * @tc.desc : 1.The parameter is not nullptr
133 */
134 HWTEST_F(CompletedDispatcherTest, CompletedDispatcher_0300, Function | MediumTest | Level1)
135 {
136 std::shared_ptr<CompletedDispatcherTest::CompletedCallbackSon> callBack =
137 std::make_shared<CompletedDispatcherTest::CompletedCallbackSon>();
138 std::shared_ptr<PendingWant> pendingWant = nullptr;
139 CompletedDispatcher completedDispatcher(pendingWant, callBack, nullptr);
140
141 Want want = MakeWant("device", "ability", "bundleName");
142 std::string key = "key";
143 bool value = true;
144 WantParams wParams;
145 wParams.SetParam(key, Boolean::Box(value));
146 completedDispatcher.PerformReceive(want, 10, "test", wParams, 0, 0, 1);
147 EXPECT_EQ(completedDispatcher.want_.GetElement().GetBundleName(), "bundleName");
148 EXPECT_EQ(completedDispatcher.want_.GetElement().GetAbilityName(), "ability");
149 EXPECT_EQ(completedDispatcher.resultCode_, 10);
150 EXPECT_EQ(completedDispatcher.resultData_, "test");
151 EXPECT_EQ(Boolean::Unbox(IBoolean::Query(completedDispatcher.resultExtras_.GetParam(key))), value);
152 EXPECT_EQ(CompletedCallbackSon::code, 100);
153 CompletedCallbackSon::code = 0;
154 }
155
156 /*
157 * @tc.number : CompletedDispatcher_0400
158 * @tc.name : CompletedDispatcher PerformReceive
159 * @tc.desc : 1.The parameter is not nullptr
160 * 2.called callBack
161 */
162 HWTEST_F(CompletedDispatcherTest, CompletedDispatcher_0400, Function | MediumTest | Level1)
163 {
164 std::shared_ptr<CompletedDispatcherTest::CompletedCallbackSon> callBack =
165 std::make_shared<CompletedDispatcherTest::CompletedCallbackSon>();
166 std::shared_ptr<EventHandler> handler = std::make_shared<EventHandler>();
167 std::shared_ptr<PendingWant> pendingWant = nullptr;
168 CompletedDispatcher completedDispatcher(pendingWant, callBack, handler);
169
170 Want want = MakeWant("device", "ability", "bundleName");
171 std::string key = "key";
172 bool value = false;
173 WantParams wParams;
174 wParams.SetParam(key, Boolean::Box(value));
175 completedDispatcher.PerformReceive(want, 10, "test", wParams, 0, 0, 1);
176 EXPECT_EQ(completedDispatcher.GetWant().GetElement().GetBundleName(), "bundleName");
177 EXPECT_EQ(completedDispatcher.want_.GetElement().GetAbilityName(), "ability");
178 EXPECT_EQ(completedDispatcher.GetResultCode(), 10);
179 EXPECT_EQ(completedDispatcher.GetResultData(), "test");
180 EXPECT_EQ(Boolean::Unbox(IBoolean::Query(completedDispatcher.GetResultExtras().GetParam(key))), value);
181 EXPECT_EQ(CompletedCallbackSon::code, 0);
182 CompletedCallbackSon::code = 0;
183 }
184
185 /*
186 * @tc.number : CompletedDispatcher_0500
187 * @tc.name : CompletedDispatcher Run
188 * @tc.desc : 1.The parameter is not nullptr
189 * 2.called callBack
190 */
191 HWTEST_F(CompletedDispatcherTest, CompletedDispatcher_0500, Function | MediumTest | Level1)
192 {
193 std::shared_ptr<CompletedDispatcherTest::CompletedCallbackSon> callBack =
194 std::make_shared<CompletedDispatcherTest::CompletedCallbackSon>();
195 std::shared_ptr<PendingWant> pendingWant = nullptr;
196 CompletedDispatcher completedDispatcher(pendingWant, callBack, nullptr);
197 EXPECT_EQ(completedDispatcher.callback_, callBack);
198 completedDispatcher.Run();
199 EXPECT_EQ(CompletedCallbackSon::code, 100);
200 CompletedCallbackSon::code = 0;
201 }
202
203 /*
204 * @tc.number : CompletedDispatcher_0600
205 * @tc.name : CompletedDispatcher Run
206 * @tc.desc : 1.The parameter is nullptr
207 * 2.no called callBack
208 */
209 HWTEST_F(CompletedDispatcherTest, CompletedDispatcher_0600, Function | MediumTest | Level1)
210 {
211 std::shared_ptr<PendingWant> pendingWant = nullptr;
212 CompletedDispatcher completedDispatcher(pendingWant, nullptr, nullptr);
213 EXPECT_EQ(completedDispatcher.callback_, nullptr);
214 completedDispatcher.Run();
215 EXPECT_EQ(CompletedCallbackSon::code, 0);
216 CompletedCallbackSon::code = 0;
217 }
218
219 /*
220 * @tc.number : CompletedDispatcher_0700
221 * @tc.name : CompletedDispatcher Run
222 */
223 HWTEST_F(CompletedDispatcherTest, CompletedDispatcher_0700, Function | MediumTest | Level1)
224 {
225 CompletedDispatcher completedDispatcher;
226 std::shared_ptr<PendingWant> pendingWant = nullptr;
227 CompletedDispatcher completedDispatcher2(pendingWant, nullptr, nullptr);
228 completedDispatcher = std::move(completedDispatcher2);
229 EXPECT_EQ(completedDispatcher.GetPendingWant(), nullptr);
230 }
231 } // namespace OHOS::AbilityRuntime::WantAgent
232