1 /*
2  * Copyright (c) 2023 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 <thread>
16 #include <chrono>
17 #include "test/mock/interfaces/mock_uicontent.h"
18 #include "ui_content.h"
19 #include "interfaces/inner_api/form_render/include/form_renderer.h"
20 #include "interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h"
21 #define private public
22 #include "interfaces/inner_api/form_render/include/form_renderer_group.h"
23 #undef private
24 #include "test/mock/core/pipeline/mock_pipeline_context.h"
25 
26 using namespace testing;
27 using namespace testing::ext;
28 namespace OHOS::Ace {
29 namespace {
30 constexpr char FORM_RENDER_STATE[] = "ohos.extra.param.key.form_render_state";
31 constexpr char FORM_RENDERER_COMP_ID[] = "ohos.extra.param.key.form_comp_id";
32 } // namespace
33 class FormRenderGroupTest : public testing::Test {
34 public:
SetUpTestCase()35     static void SetUpTestCase() {};
TearDownTestCase()36     static void TearDownTestCase() {};
37 };
38 /**
39  * @tc.name: FormRenderGroupTest_001
40  * @tc.desc: Test AddForm() funtion.
41  * @tc.type: FUNC
42  */
43 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_001, TestSize.Level1)
44 {
45     GTEST_LOG_(INFO) << "FormRenderGroupTest_001 start";
46     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_001");
47     ASSERT_TRUE(eventRunner);
48     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
49     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
50     EXPECT_TRUE(group);
51     OHOS::AAFwk::Want want;
52     OHOS::AppExecFwk::FormJsInfo formJsInfo;
53     formJsInfo.bundleName = "bundleName";
54     formJsInfo.moduleName = "moduleName";
55     formJsInfo.formId = 1;
56     EXPECT_EQ(formJsInfo.formId, 1);
57     group->AddForm(want, formJsInfo);
58     want.SetParam(FORM_RENDER_STATE, true);
59     group->AddForm(want, formJsInfo);
60     GTEST_LOG_(INFO) << "FormRenderGroupTest_001 end";
61 }
62 /**
63  * @tc.name: FormRenderGroupTest_002
64  * @tc.desc: Test OnUnlock() function.
65  * @tc.type: FUNC
66  */
67 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_002, TestSize.Level1)
68 {
69     GTEST_LOG_(INFO) << "FormRenderGroupTest_002 start";
70     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_002");
71     ASSERT_TRUE(eventRunner);
72     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
73     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
74     EXPECT_TRUE(group);
75     group->OnUnlock();
76     GTEST_LOG_(INFO) << "FormRenderGroupTest_002 end";
77 }
78 /**
79  * @tc.name: FormRenderGroupTest_003
80  * @tc.desc: Test UpdateForm() function.
81  * @tc.type: FUNC
82  */
83 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_003, TestSize.Level1)
84 {
85     GTEST_LOG_(INFO) << "FormRenderGroupTest_003 start";
86     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_003");
87     ASSERT_TRUE(eventRunner);
88     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
89     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
90     EXPECT_TRUE(group);
91     OHOS::AppExecFwk::FormJsInfo formJsInfo;
92     formJsInfo.bundleName = "bundleName";
93     formJsInfo.moduleName = "moduleName";
94     group->UpdateForm(formJsInfo);
95     group->formRenderer_ = std::make_shared<FormRenderer>(nullptr, nullptr, eventHandler);
96     group->UpdateForm(formJsInfo);
97     GTEST_LOG_(INFO) << "FormRenderGroupTest_003 end";
98 }
99 /**
100  * @tc.name: FormRenderGroupTest_004
101  * @tc.desc: Test DeleteForm() function.
102  * @tc.type: FUNC
103  */
104 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_004, TestSize.Level1)
105 {
106     GTEST_LOG_(INFO) << "FormRenderGroupTest_004 start";
107     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_004");
108     ASSERT_TRUE(eventRunner);
109     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
110     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
111     EXPECT_TRUE(group);
112     std::string id = "123456";
113     group->DeleteForm(id);
114     GTEST_LOG_(INFO) << "FormRenderGroupTest_004 end";
115 }
116 /**
117  * @tc.name: FormRenderGroupTest_005
118  * @tc.desc: Test DeleteForm() function.
119  * @tc.type: FUNC
120  */
121 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_005, TestSize.Level1)
122 {
123     GTEST_LOG_(INFO) << "FormRenderGroupTest_005 start";
124     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_005");
125     ASSERT_TRUE(eventRunner);
126     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
127     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
128     EXPECT_TRUE(group);
129     OHOS::AAFwk::Want want;
130     OHOS::AppExecFwk::FormJsInfo formJsInfo;
131     formJsInfo.bundleName = "bundleName";
132     formJsInfo.moduleName = "moduleName";
133     group->AddForm(want, formJsInfo);
134     group->DeleteForm();
135     GTEST_LOG_(INFO) << "FormRenderGroupTest_005 end";
136 }
137 /**
138  * @tc.name: FormRenderGroupTest_006
139  * @tc.desc: Test ReloadForm() function.
140  * @tc.type: FUNC
141  */
142 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_006, TestSize.Level1)
143 {
144     GTEST_LOG_(INFO) << "FormRenderGroupTest_006 start";
145     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_006");
146     ASSERT_TRUE(eventRunner);
147     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
148     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
149     EXPECT_TRUE(group);
150     OHOS::AppExecFwk::FormJsInfo formJsInfo;
151     formJsInfo.bundleName = "bundleName";
152     formJsInfo.moduleName = "moduleName";
153     formJsInfo.formId = 2;
154     EXPECT_EQ(formJsInfo.formId, 2);
155     group->ReloadForm(formJsInfo);
156     GTEST_LOG_(INFO) << "FormRenderGroupTest_006 end";
157 }
158 /**
159  * @tc.name: FormRenderGroupTest_007
160  * @tc.desc: Test UpdateConfiguration() function.
161  * @tc.type: FUNC
162  */
163 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_007, TestSize.Level1)
164 {
165     GTEST_LOG_(INFO) << "FormRenderGroupTest_007 start";
166     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_007");
167     ASSERT_TRUE(eventRunner);
168     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
169     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
170     EXPECT_TRUE(group);
171     std::shared_ptr<OHOS::AppExecFwk::Configuration> config;
172     group->UpdateConfiguration(config);
173     GTEST_LOG_(INFO) << "FormRenderGroupTest_007 end";
174 }
175 /**
176  * @tc.name: FormRenderGroupTest_008
177  * @tc.desc: Test IsFormRequestsEmpty() function.
178  * @tc.type: FUNC
179  */
180 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_008, TestSize.Level1)
181 {
182     GTEST_LOG_(INFO) << "FormRenderGroupTest_008 start";
183     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_008");
184     ASSERT_TRUE(eventRunner);
185     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
186     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
187     EXPECT_TRUE(group);
188     EXPECT_EQ(true, group->IsFormRequestsEmpty());
189     GTEST_LOG_(INFO) << "FormRenderGroupTest_008 end";
190 }
191 /**
192  * @tc.name: FormRenderGroupTest_009
193  * @tc.desc: Test GetAllRendererFormRequests() function.
194  * @tc.type: FUNC
195  */
196 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_009, TestSize.Level1)
197 {
198     GTEST_LOG_(INFO) << "FormRenderGroupTest_009 start";
199     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_009");
200     ASSERT_TRUE(eventRunner);
201     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
202     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
203     EXPECT_TRUE(group);
204     std::vector<FormRequest> from_ = group->GetAllRendererFormRequests();
205     GTEST_LOG_(INFO) << "FormRenderGroupTest_009 end";
206 }
207 /**
208  * @tc.name: FormRenderGroupTest_010
209  * @tc.desc: Test RecycleForm() function.
210  * @tc.type: FUNC
211  */
212 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_010, TestSize.Level1)
213 {
214     GTEST_LOG_(INFO) << "FormRenderGroupTest_010 start";
215     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_010");
216     ASSERT_TRUE(eventRunner);
217     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
218     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
219     EXPECT_TRUE(group);
220     std::string data = "123";
221     group->RecycleForm(data);
222     GTEST_LOG_(INFO) << "FormRenderGroupTest_010 end";
223 }
224 /**
225  * @tc.name: FormRenderGroupTest_011
226  * @tc.desc: Test FormRendererGroup() function.
227  * @tc.type: FUNC
228  */
229 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_011, TestSize.Level1)
230 {
231     GTEST_LOG_(INFO) << "FormRenderGroupTest_011 start";
232     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_011");
233     ASSERT_TRUE(eventRunner);
234     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
235     FormRendererGroup group(nullptr, nullptr, eventHandler);
236     GTEST_LOG_(INFO) << "FormRenderGroupTest_011 end";
237 }
238 
239 /**
240 * @tc.name: FormRenderGroupTest_012
241 * @tc.desc: Test SetVisibleChange() function.
242 * @tc.type: FUNC
243 */
244 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_012, TestSize.Level1)
245 {
246     GTEST_LOG_(INFO) << "FormRenderGroupTest_012 start";
247     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_012");
248     ASSERT_TRUE(eventRunner);
249     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
250     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
251     EXPECT_TRUE(group);
252     group->SetVisibleChange(true);
253     GTEST_LOG_(INFO) << "FormRenderGroupTest_012 end";
254 }
255 
256 /**
257  * @tc.name: FormRenderGroupTest_022
258  * @tc.desc: Test GetOrderedAndCurrentCompIds() function.
259  * @tc.type: FUNC
260  */
261 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_022, TestSize.Level1)
262 {
263     GTEST_LOG_(INFO) << "FormRenderGroupTest_022 start";
264     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_022");
265     ASSERT_TRUE(eventRunner);
266     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
267     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
268     EXPECT_TRUE(group);
269     std::pair<std::vector<std::string>, std::string> compIdPair = group->GetOrderedAndCurrentCompIds();
270     EXPECT_EQ(true, compIdPair.first.empty());
271     EXPECT_EQ(true, compIdPair.second.empty());
272     OHOS::AAFwk::Want want;
273     OHOS::AppExecFwk::FormJsInfo formJsInfo;
274     formJsInfo.formId = 1;
275     std::string compId1 = "comp1";
276     want.SetParam(FORM_RENDERER_COMP_ID, compId1);
277     group->AddForm(want, formJsInfo);
278     formJsInfo.formId = 2;
279     std::string compId2 = "comp2";
280     want.SetParam(FORM_RENDERER_COMP_ID, compId2);
281     group->AddForm(want, formJsInfo);
282     compIdPair = group->GetOrderedAndCurrentCompIds();
283     EXPECT_EQ(2, compIdPair.first.size());
284     EXPECT_EQ(compId1, compIdPair.first[0]);
285     EXPECT_EQ(compId2, compIdPair.first[1]);
286     EXPECT_EQ(compId2, compIdPair.second);
287     group->DeleteForm(compId2);
288     compIdPair = group->GetOrderedAndCurrentCompIds();
289     EXPECT_EQ(1, compIdPair.first.size());
290     EXPECT_EQ(compId1, compIdPair.second);
291     GTEST_LOG_(INFO) << "FormRenderGroupTest_022 end";
292 }
293 
294 /**
295  * @tc.name: FormRenderGroupTest_023
296  * @tc.desc: Test RecoverRenderer() function.
297  * @tc.type: FUNC
298  */
299 HWTEST_F(FormRenderGroupTest, FormRenderGroupTest_023, TestSize.Level1)
300 {
301     GTEST_LOG_(INFO) << "FormRenderGroupTest_023 start";
302     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderGroupTest_023");
303     ASSERT_TRUE(eventRunner);
304     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
305     auto group = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
306     EXPECT_TRUE(group);
307     OHOS::AAFwk::Want want;
308     OHOS::AppExecFwk::FormJsInfo formJsInfo;
309     formJsInfo.formId = 1;
310     std::string compId1 = "comp1";
311     want.SetParam(FORM_RENDERER_COMP_ID, compId1);
312     group->AddForm(want, formJsInfo);
313     formJsInfo.formId = 2;
314     std::string compId2 = "comp2";
315     want.SetParam(FORM_RENDERER_COMP_ID, compId2);
316     group->AddForm(want, formJsInfo);
317     std::pair<std::vector<std::string>, std::string> compIdPair = group->GetOrderedAndCurrentCompIds();
318     group->DeleteForm();
319     EXPECT_EQ(true, group->GetAllRendererFormRequests().empty());
320     std::vector<FormRequest> requests;
321     group->RecoverRenderer(requests, 0);
322     EXPECT_EQ(true, group->GetAllRendererFormRequests().empty());
323     for (auto compId: compIdPair.first) {
324         FormRequest formRequest;
325         formRequest.compId = compId;
326         requests.emplace_back(formRequest);
327     }
328     group->RecoverRenderer(requests, requests.size());
329     EXPECT_EQ(true, group->GetAllRendererFormRequests().empty());
330     group->RecoverRenderer(requests, requests.size() - 1);
331     EXPECT_EQ(2, group->GetAllRendererFormRequests().size());
332     compIdPair = group->GetOrderedAndCurrentCompIds();
333     EXPECT_EQ(compId2, compIdPair.second);
334     GTEST_LOG_(INFO) << "FormRenderGroupTest_023 end";
335 }
336 }