• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #include <thread>
17 #include <chrono>
18 #include "gtest/gtest.h"
19 #include "test/mock/interfaces/mock_uicontent.h"
20 #include "ui_content.h"
21 
22 #define private public
23 #include "interfaces/inner_api/form_render/include/form_renderer.h"
24 #include "interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h"
25 #include "interfaces/inner_api/form_render/include/form_renderer_group.h"
26 #include "interfaces/inner_api/form_render/include/form_renderer_event_report.h"
27 #include "interfaces/inner_api/ace/serialized_gesture.h"
28 #include "test/mock/core/pipeline/mock_pipeline_context.h"
29 
30 using namespace testing;
31 using namespace testing::ext;
32 
33 namespace OHOS::Ace {
34 namespace {
35 constexpr char FORM_RENDERER_ALLOW_UPDATE[] = "allowUpdate";
36 constexpr char FORM_RENDERER_COMP_ID[] = "ohos.extra.param.key.form_comp_id";
37 constexpr char FORM_WIDTH_KEY[] = "ohos.extra.param.key.form_width";
38 constexpr char FORM_HEIGHT_KEY[] = "ohos.extra.param.key.form_height";
39 constexpr char FORM_RENDERER_PROCESS_ON_ADD_SURFACE[] = "ohos.extra.param.key.process_on_add_surface";
40 constexpr char FORM_RENDER_STATE[] = "ohos.extra.param.key.form_render_state";
41 constexpr const char* FORM_STATUS_DATA = "form_status_data";
42 const std::string FORM_COMPONENT_ID_1 = "111111";
43 const std::string FORM_COMPONENT_ID_2 = "222222";
44 const std::string FORM_COMPONENT_ID_3 = "333333";
45 const std::string CHECK_KEY = "CHECK_KEY";
46 constexpr double FORM_WIDTH = 100.0f;
47 constexpr double FORM_HEIGHT = 100.0f;
48 constexpr double FORM_WIDTH_2 = 200.0f;
49 constexpr double FORM_HEIGHT_2 = 200.0f;
50 } // namespace
51 class FormRenderTest : public testing::Test {
52 public:
SetUpTestCase()53     static void SetUpTestCase()
54     {
55         NG::MockPipelineContext::SetUp();
56     }
57 
TearDownTestCase()58     static void TearDownTestCase()
59     {
60         NG::MockPipelineContext::TearDown();
61     }
62 };
63 
GetInstance(std::string eventName)64 std::shared_ptr<FormRenderer> GetInstance(std::string eventName)
65 {
66     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create(eventName);
67     if (!eventRunner) {
68         return nullptr;
69     }
70     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
71     auto formRendererGroup = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
72     OHOS::AAFwk::Want want;
73     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
74     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
75     want.SetParam(FORM_RENDER_STATE, true);
76     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
77     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
78     OHOS::AppExecFwk::FormJsInfo formJsInfo;
79     formRendererGroup->AddForm(want, formJsInfo);
80     return formRendererGroup->formRenderer_;
81 }
82 
83 /**
84  * @tc.name: FormRenderTest001
85  * @tc.desc: test AddForm -> UpdateForm -> ReloadForm -> DeleteForm(comp_id) -> DeleteForm
86  * @tc.type: FUNC
87  */
88 HWTEST_F(FormRenderTest, FormRenderTest001, TestSize.Level1)
89 {
90     /**
91      * @tc.steps: step1. create formRenderGroup and prepare want
92      * @tc.expected: step1. formRenderGroup is created successfully
93      */
94     std::weak_ptr<OHOS::AppExecFwk::EventHandler> emptyHandler;
95     auto formRendererGroup = FormRendererGroup::Create(nullptr, nullptr, emptyHandler);
96     EXPECT_TRUE(formRendererGroup);
97     bool isEmpty = formRendererGroup->IsFormRequestsEmpty();
98     EXPECT_TRUE(isEmpty);
99     OHOS::AAFwk::Want want;
100     want.SetParam(FORM_WIDTH_KEY, FORM_WIDTH);
101     want.SetParam(FORM_HEIGHT_KEY, FORM_HEIGHT);
102     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
103     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, true);
104     want.SetParam(FORM_RENDER_STATE, true);
105     OHOS::AppExecFwk::FormJsInfo formJsInfo;
106 
107     /**
108      * @tc.steps: step2. call AddForm
109      * @tc.expected: step2. formRenderer is created successfully and added to the formRendererGroup
110      */
111     // formRenderer->uiContent_ is null, so formRenderer->AddForm will not be called
112     formRendererGroup->AddForm(want, formJsInfo);
113     EXPECT_TRUE(formRendererGroup->formRenderer_ != nullptr);
114     isEmpty = formRendererGroup->IsFormRequestsEmpty();
115     formRendererGroup->UpdateConfiguration(nullptr);
116     EXPECT_FALSE(isEmpty);
117 
118 
119     /**
120      * @tc.steps: step3. call formRenderer's AddForm
121      * @tc.expected: step3. uiContent's relevant methods are called & formRenderer's property are set
122      */
123     auto formRenderer = formRendererGroup->formRenderer_;
124     EXPECT_TRUE(formRenderer);
125     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
126     EXPECT_TRUE(formRenderer->uiContent_);
127     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormWidth(FORM_WIDTH)).WillOnce(Return());
128     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormHeight(FORM_HEIGHT)).WillOnce(Return());
129     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormSharedImage(_)).WillOnce(Return());
130     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormData(_)).WillOnce(Return());
131 
132     EXPECT_CALL(*((MockUIContent *)(formRenderer->uiContent_.get())),
133         PreInitializeForm(An<OHOS::Rosen::Window *>(), "", _)).WillOnce(Return());
134     EXPECT_CALL(*((MockUIContent *)(formRenderer->uiContent_.get())), RunFormPage()).Times(Exactly(1));
135 
136     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetActionEventHandler(_)).WillOnce(Return());
137     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetErrorEventHandler(_)).WillOnce(Return());
138     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).Times(Exactly(2));
139     // call AddForm manually
140     formRenderer->AddForm(want, formJsInfo);
141     EXPECT_EQ(formRenderer->allowUpdate_, true);
142     EXPECT_EQ(formRenderer->width_, FORM_WIDTH);
143     EXPECT_EQ(formRenderer->height_, FORM_HEIGHT);
144 
145     /**
146      * @tc.steps: step4. add another formRenderer
147      * @tc.expected: step4. the formRenderer is created successfully and added to the formRendererGroup
148      */
149     OHOS::AAFwk::Want want2;
150     want2.SetParam(FORM_WIDTH_KEY, FORM_WIDTH);
151     want2.SetParam(FORM_HEIGHT_KEY, FORM_HEIGHT);
152     want2.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_2);
153     want2.SetParam(FORM_RENDERER_ALLOW_UPDATE, true);
154     want2.SetParam(FORM_RENDER_STATE, true);
155     formRendererGroup->AddForm(want2, formJsInfo);
156     auto formRenderer2 = formRendererGroup->formRenderer_;
157     formRenderer2->OnActionEvent("");
158     formRenderer2->OnError("", "");
159     formRenderer2->OnSurfaceChange(0.0f, 0.0f);
160 
161     /**
162      * @tc.steps: step5. call formRenderer's UpdateForm
163      * @tc.expected: step5. uiContent's relevant methods are called
164      */
165     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormSharedImage(_)).WillOnce(Return());
166     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormData(_)).WillOnce(Return());
167     formRendererGroup->UpdateForm(formJsInfo);
168 
169     /**
170      * @tc.steps: step6. call formRenderer's ReloadForm
171      * @tc.expected: step6. uiContent's relevant methods are called
172      */
173     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), ReloadForm(_)).WillOnce(Return());
174     formRendererGroup->ReloadForm(formJsInfo);
175 
176     /**
177      * @tc.steps: step7. delete formRenderer whose compId not exists
178      * @tc.expected: step7. delete fail
179      */
180     formRendererGroup->DeleteForm(FORM_COMPONENT_ID_3);
181 
182     /**
183      * @tc.steps: step8. delete formRenderer whose compId exists
184      * @tc.expected: step8. delete successfully
185      */
186     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), Destroy()).WillOnce(Return());
187     // delete formRenderer that compId exists
188     formRendererGroup->DeleteForm(FORM_COMPONENT_ID_1);
189 
190     /**
191      * @tc.steps: step9. delete all formRenderers
192      * @tc.expected: step9. delete successfully
193      */
194     formRendererGroup->DeleteForm();
195 }
196 
197 /**
198  * @tc.name: FormRenderTest002
199  * @tc.desc: delegate & dispatcher is not null
200  * @tc.type: FUNC
201  */
202 HWTEST_F(FormRenderTest, FormRenderTest002, TestSize.Level1)
203 {
204     /**
205      * @tc.steps: step1. create formRenderGroup and add new formRenderer with delegate & dispatcher
206      * @tc.expected: step1. formRenderGroup is created successfully and the formRenderer is added to the
207      * formRendererGroup
208      */
209     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("formRenderTest002");
210     ASSERT_TRUE(eventRunner);
211     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
212     auto formRendererGroup = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
213     EXPECT_TRUE(formRendererGroup);
214     OHOS::AAFwk::Want want;
215     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
216     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
217     want.SetParam(FORM_RENDER_STATE, true);
218     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
219     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
220     OHOS::AppExecFwk::FormJsInfo formJsInfo;
221     formRendererGroup->AddForm(want, formJsInfo);
222     auto formRenderer = formRendererGroup->formRenderer_;;
223     EXPECT_TRUE(formRenderer);
224     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
225     EXPECT_TRUE(formRenderer->uiContent_);
226 
227     /**
228      * @tc.steps: step2. register callback for rendererDelegate
229      */
230     std::string onSurfaceCreateKey;
231     auto onSurfaceCreate = [&onSurfaceCreateKey](const std::shared_ptr<Rosen::RSSurfaceNode>& /* surfaceNode */,
232                                const OHOS::AppExecFwk::FormJsInfo& /* info */,
__anon52f21adf0202(const std::shared_ptr<Rosen::RSSurfaceNode>& , const OHOS::AppExecFwk::FormJsInfo& , const AAFwk::Want& ) 233                                const AAFwk::Want& /* want */) { onSurfaceCreateKey = CHECK_KEY; };
234     renderDelegate->SetSurfaceCreateEventHandler(std::move(onSurfaceCreate));
235 
236     std::string onActionEventKey;
__anon52f21adf0302(const std::string& ) 237     auto onAction = [&onActionEventKey](const std::string& /* action */) { onActionEventKey = CHECK_KEY; };
238     renderDelegate->SetActionEventHandler(std::move(onAction));
239 
240     std::string onErrorEventKey;
241     auto onError = [&onErrorEventKey](
__anon52f21adf0402( const std::string& , const std::string& ) 242                        const std::string& /* code */, const std::string& /* msg */) { onErrorEventKey = CHECK_KEY; };
243     renderDelegate->SetErrorEventHandler(std::move(onError));
244 
245     std::string onSurfaceChangeEventKey;
246     auto onSurfaceChange = [&onSurfaceChangeEventKey](float /* width */,
__anon52f21adf0502(float , float , float ) 247                         float /* height */, float /* borderWidth */) { onSurfaceChangeEventKey = CHECK_KEY; };
248     renderDelegate->SetSurfaceChangeEventHandler(std::move(onSurfaceChange));
249 
250     /**
251      * @tc.steps: step3. call formRenderer's AddForm
252      * @tc.expected: step3. onSurfaceCreate has been called
253      */
254     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormWidth(_)).WillOnce(Return());
255     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormHeight(_)).WillOnce(Return());
256     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormSharedImage(_)).WillOnce(Return());
257     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormData(_)).WillOnce(Return());
258 
259     EXPECT_CALL(*((MockUIContent *)(formRenderer->uiContent_.get())),
260         PreInitializeForm(An<OHOS::Rosen::Window *>(), "", _)).WillOnce(Return());
261     EXPECT_CALL(*((MockUIContent *)(formRenderer->uiContent_.get())), RunFormPage()).Times(Exactly(1));
262 
263     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetActionEventHandler(_)).WillOnce(Return());
264     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetErrorEventHandler(_)).WillOnce(Return());
265     std::string surfaceNodeName = "ArkTSCardNode";
266     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
267     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
268     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode())
269         .WillOnce(Return(rsNode))
270         .WillOnce(Return(rsNode))
271         .WillOnce(Return(rsNode));
272     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), Foreground()).WillOnce(Return());
273     formRenderer->AddForm(want, formJsInfo);
274     EXPECT_EQ(onSurfaceCreateKey, CHECK_KEY);
275 
276     /**
277      * @tc.steps: step4. call formRenderer's OnActionEvent & OnErrorEvent
278      * @tc.expected: step4. onAction & onError have been called
279      */
280     formRenderer->OnActionEvent("");
281     EXPECT_EQ(onActionEventKey, CHECK_KEY);
282     formRenderer->OnError("", "");
283     EXPECT_EQ(onErrorEventKey, CHECK_KEY);
284 
285     /**
286      * @tc.steps: step5. Test surface change
287      * @tc.expected: step5. onSurfaceChange & uiContent.OnFormSurfaceChange has been called
288      */
289     auto formRendererDispatcher = formRenderer->formRendererDispatcherImpl_;
290     EXPECT_TRUE(formRendererDispatcher);
291     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormWidth(FORM_WIDTH_2)).WillOnce(Return());
292     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormHeight(FORM_HEIGHT_2)).WillOnce(Return());
293     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), OnFormSurfaceChange(FORM_WIDTH_2, FORM_HEIGHT_2,
294         _, _)).WillOnce(Return());
295     formRendererDispatcher->DispatchSurfaceChangeEvent(FORM_WIDTH_2, FORM_HEIGHT_2);
296     std::this_thread::sleep_for(std::chrono::seconds(1));
297     EXPECT_EQ(onSurfaceChangeEventKey, CHECK_KEY);
298     // formRenderer is null
299     formRendererDispatcher->formRenderer_.reset();
300     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormWidth(FORM_WIDTH_2)).WillOnce(Return());
301     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormHeight(FORM_HEIGHT_2)).WillOnce(Return());
302     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), OnFormSurfaceChange(FORM_WIDTH_2, FORM_HEIGHT_2,
303         _, _)).WillOnce(Return());
304     onSurfaceChangeEventKey = "";
305     formRendererDispatcher->DispatchSurfaceChangeEvent(FORM_WIDTH_2, FORM_HEIGHT_2);
306     std::this_thread::sleep_for(std::chrono::seconds(1));
307     EXPECT_NE(onSurfaceChangeEventKey, CHECK_KEY);
308 
309     /**
310      * @tc.steps: step6. Test pointer event
311      * @tc.expected: step4. uiContent.ProcessPointerEvent has been called
312      */
313     std::shared_ptr<OHOS::MMI::PointerEvent> event;
314     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), ProcessPointerEvent(event))
315         .WillOnce(Return(true));
316     SerializedGesture serializedGesture;
317     formRendererDispatcher->DispatchPointerEvent(event, serializedGesture);
318     std::this_thread::sleep_for(std::chrono::seconds(1));
319 }
320 
321 /**
322  * @tc.name: FormRenderTest003
323  * @tc.type: FUNC
324  * Function: OnActionEvent,SetActionEventHandler
325  **@tc.desc: 1. system running normally
326  *           2. test FormRendererDelegateImpl
327  */
328 HWTEST_F(FormRenderTest, FormRenderTest003, TestSize.Level1)
329 {
330     std::string action = "action";
__anon52f21adf0602(const std::string&) 331     auto fun = [](const std::string&) {};
332     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
333     renderDelegate->SetActionEventHandler(nullptr);
334     EXPECT_EQ(renderDelegate->OnActionEvent(action), ERR_INVALID_DATA);
335     renderDelegate->SetActionEventHandler(fun);
336     EXPECT_EQ(renderDelegate->OnActionEvent(action), ERR_OK);
337 }
338 
339 /**
340  * @tc.name: FormRenderTest004
341  * @tc.type: FUNC
342  * Function: OnError,SetErrorEventHandler
343  **@tc.desc: 1. system running normally
344  *           2. test FormRendererDelegateImpl
345  */
346 HWTEST_F(FormRenderTest, FormRenderTest004, TestSize.Level1)
347 {
348     std::string code = "code";
349     std::string msg = "msg";
__anon52f21adf0702(const std::string&, const std::string&) 350     auto fun = [](const std::string&, const std::string&) {};
351     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
352     renderDelegate->SetErrorEventHandler(nullptr);
353     EXPECT_EQ(renderDelegate->OnError(code, msg), ERR_INVALID_DATA);
354     renderDelegate->SetErrorEventHandler(fun);
355     EXPECT_EQ(renderDelegate->OnError(code, msg), ERR_OK);
356 }
357 
358 /**
359  * @tc.name: FormRenderTest005
360  * @tc.type: FUNC
361  * Function: OnSurfaceChange,SetSurfaceChangeEventHandler
362  **@tc.desc: 1. system running normally
363  *           2. test FormRendererDelegateImpl
364  */
365 HWTEST_F(FormRenderTest, FormRenderTest005, TestSize.Level1)
366 {
367     float width = 1.1;
368     float height = 2.2;
__anon52f21adf0802(float, float, float) 369     auto fun = [](float, float, float) {};
370     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
371     renderDelegate->SetSurfaceChangeEventHandler(nullptr);
372     EXPECT_EQ(renderDelegate->OnSurfaceChange(width, height), ERR_INVALID_DATA);
373     renderDelegate->SetSurfaceChangeEventHandler(fun);
374     EXPECT_EQ(renderDelegate->OnSurfaceChange(width, height), ERR_OK);
375 }
376 
377 /**
378  * @tc.name: FormRenderTest006
379  * @tc.type: FUNC
380  * Function: OnSurfaceDetach,SetSurfaceDetachEventHandler
381  **@tc.desc: 1. system running normally
382  *           2. test FormRendererDelegateImpl
383  */
384 HWTEST_F(FormRenderTest, FormRenderTest006, TestSize.Level1)
385 {
386     uint64_t surfaceId = 1;
__anon52f21adf0902() 387     auto fun = []() {};
388     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
389     renderDelegate->SetSurfaceDetachEventHandler(nullptr);
390     EXPECT_EQ(renderDelegate->OnSurfaceDetach(surfaceId), ERR_INVALID_DATA);
391     renderDelegate->SetSurfaceDetachEventHandler(fun);
392     EXPECT_EQ(renderDelegate->OnSurfaceDetach(surfaceId), ERR_OK);
393 }
394 
395 /**
396  * @tc.name: FormRenderTest007
397  * @tc.type: FUNC
398  * Function: OnFormLinkInfoUpdate,SetFormLinkInfoUpdateHandler
399  **@tc.desc: 1. system running normally
400  *           2. test FormRendererDelegateImpl
401  */
402 HWTEST_F(FormRenderTest, FormRenderTest007, TestSize.Level1)
403 {
404     std::vector<std::string> formLinkInfos;
__anon52f21adf0a02(const std::vector<std::string>&) 405     auto fun = [](const std::vector<std::string>&) {};
406     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
407     renderDelegate->SetFormLinkInfoUpdateHandler(nullptr);
408     EXPECT_EQ(renderDelegate->OnFormLinkInfoUpdate(formLinkInfos), ERR_INVALID_DATA);
409     renderDelegate->SetFormLinkInfoUpdateHandler(fun);
410     EXPECT_EQ(renderDelegate->OnFormLinkInfoUpdate(formLinkInfos), ERR_OK);
411 }
412 
413 /**
414  * @tc.name: FormRenderTest008
415  * @tc.type: FUNC
416  * Function: OnGetRectRelativeToWindow,SetGetRectRelativeToWindowHandler
417  **@tc.desc: 1. system running normally
418  *           2. test FormRendererDelegateImpl
419  */
420 HWTEST_F(FormRenderTest, FormRenderTest008, TestSize.Level1)
421 {
422     AccessibilityParentRectInfo parentRectInfo;
423     parentRectInfo.top = 50;
424     parentRectInfo.left = 50;
__anon52f21adf0b02(AccessibilityParentRectInfo&) 425     auto fun = [](AccessibilityParentRectInfo&) {};
426     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
427     renderDelegate->SetGetRectRelativeToWindowHandler(nullptr);
428     EXPECT_EQ(renderDelegate->OnGetRectRelativeToWindow(parentRectInfo), ERR_INVALID_DATA);
429     renderDelegate->SetGetRectRelativeToWindowHandler(fun);
430     EXPECT_EQ(renderDelegate->OnGetRectRelativeToWindow(parentRectInfo), ERR_OK);
431 }
432 
433 /**
434  * @tc.name: FormRenderTest010
435  * @tc.desc: test RunFormPage
436  * @tc.type: FUNC
437  */
438 HWTEST_F(FormRenderTest, FormRenderTest010, TestSize.Level1)
439 {
440     auto formRenderer = GetInstance("formRenderTest010");
441     ASSERT_TRUE(formRenderer);
442     OHOS::AppExecFwk::FormJsInfo formJsInfo;
443     OHOS::AAFwk::Want want;
444     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
445     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
446     want.SetParam(FORM_RENDER_STATE, true);
447     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
448     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
449     formRenderer->RunFormPage(want, formJsInfo);
450     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
451     EXPECT_TRUE(formRenderer->uiContent_);
452     formRenderer->RunFormPage(want, formJsInfo);
453     want.SetParam(FORM_STATUS_DATA, true);
454     formRenderer->RunFormPage(want, formJsInfo);
455 }
456 
457 /**
458  * @tc.name: FormRenderTest011
459  * @tc.desc: test OnFormLinkInfoUpdate
460  * @tc.type: FUNC
461  */
462 HWTEST_F(FormRenderTest, FormRenderTest011, TestSize.Level1)
463 {
464     auto formRenderer = GetInstance("formRenderTest011");
465     ASSERT_TRUE(formRenderer);
466     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
467     EXPECT_TRUE(formRenderer->uiContent_);
468     std::vector<std::string> cachedInfos = formRenderer->cachedInfos_;
469     formRenderer->OnFormLinkInfoUpdate(cachedInfos);
470     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
471     formRenderer->formRendererDelegate_ = renderDelegate;
472     EXPECT_TRUE(formRenderer->formRendererDelegate_);
473     formRenderer->OnFormLinkInfoUpdate(cachedInfos);
474 }
475 
476 /**
477  * @tc.name: FormRenderTest012
478  * @tc.desc: test ResetRenderDelegate
479  * @tc.type: FUNC
480  */
481 HWTEST_F(FormRenderTest, FormRenderTest012, TestSize.Level1)
482 {
483     auto formRenderer = GetInstance("formRenderTest012");
484     ASSERT_TRUE(formRenderer);
485     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
486     EXPECT_TRUE(formRenderer->uiContent_);
487     formRenderer->ResetRenderDelegate();
488 }
489 
490 /**
491  * @tc.name: FormRenderTest013
492  * @tc.desc: test UpdateConfiguration
493  * @tc.type: FUNC
494  */
495 HWTEST_F(FormRenderTest, FormRenderTest013, TestSize.Level1)
496 {
497     auto formRenderer = GetInstance("formRenderTest013");
498     ASSERT_TRUE(formRenderer);
499     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
500     EXPECT_TRUE(formRenderer->uiContent_);
501     formRenderer->UpdateConfiguration(nullptr);
502 }
503 
504 /**
505  * @tc.name: FormRenderTest014
506  * @tc.desc: test OnRemoteDied
507  * @tc.type: FUNC
508  */
509 HWTEST_F(FormRenderTest, FormRenderTest014, TestSize.Level1)
510 {
511     auto formRenderer = GetInstance("formRenderTest014");
512     ASSERT_TRUE(formRenderer);
513     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
514     EXPECT_TRUE(formRenderer->uiContent_);
__anon52f21adf0c02()515     FormRenderDelegateRecipient::RemoteDiedHandler handler = [](){};
516     auto formRenderDelegateRecipient = new FormRenderDelegateRecipient(handler);
517     formRenderDelegateRecipient->OnRemoteDied(nullptr);
518     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
519     formRenderDelegateRecipient->OnRemoteDied(renderDelegate->AsObject());
520 }
521 
522 /**
523  * @tc.name: FormRenderTest015
524  * @tc.desc: test GetRectRelativeToWindow
525  * @tc.type: FUNC
526  */
527 HWTEST_F(FormRenderTest, FormRenderTest015, TestSize.Level1)
528 {
529     auto formRenderer = GetInstance("formRenderTest015");
530     ASSERT_TRUE(formRenderer);
531     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
532     EXPECT_TRUE(formRenderer->uiContent_);
533     AccessibilityParentRectInfo parentRectInfo;
534     parentRectInfo.top = 0;
535     parentRectInfo.left = 0;
536     formRenderer->GetRectRelativeToWindow(parentRectInfo);
537     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
538     formRenderer->formRendererDelegate_ = renderDelegate;
539     EXPECT_TRUE(formRenderer->formRendererDelegate_);
540     formRenderer->GetRectRelativeToWindow(parentRectInfo);
541 }
542 
543 /**
544  * @tc.name: FormRenderTest016
545  * @tc.desc: test RecycleForm
546  * @tc.type: FUNC
547  */
548 HWTEST_F(FormRenderTest, FormRenderTest016, TestSize.Level1)
549 {
550     auto formRenderer = GetInstance("formRenderTest016");
551     ASSERT_TRUE(formRenderer);
552     std::string statusData;
553     formRenderer->RecycleForm(statusData);
554     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
555     EXPECT_TRUE(formRenderer->uiContent_);
556     formRenderer->RecycleForm(statusData);
557 }
558 
559 /**
560  * @tc.name: FormRenderTest017
561  * @tc.desc: test RecoverForm
562  * @tc.type: FUNC
563  */
564 HWTEST_F(FormRenderTest, FormRenderTest017, TestSize.Level1)
565 {
566     auto formRenderer = GetInstance("formRenderTest017");
567     ASSERT_TRUE(formRenderer);
568     const std::string statusData = "";
569     formRenderer->RecoverForm(statusData);
570     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
571     EXPECT_TRUE(formRenderer->uiContent_);
572     formRenderer->RecoverForm(statusData);
573 }
574 
575 /**
576  * @tc.name: FormRenderTest018
577  * @tc.desc: test PreInitAddForm
578  * @tc.type: FUNC
579  */
580 HWTEST_F(FormRenderTest, FormRenderTest018, TestSize.Level1)
581 {
582     auto formRenderer = GetInstance("formRenderTest018");
583     ASSERT_TRUE(formRenderer);
584 
585     OHOS::AppExecFwk::FormJsInfo formJsInfo;
586     OHOS::AAFwk::Want want;
587     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
588     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
589     want.SetParam(FORM_RENDER_STATE, true);
590     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
591     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
592     formRenderer->PreInitAddForm(want, formJsInfo);
593     std::string url = "";
594     formRenderer->ReloadForm(url);
595     formRenderer->UpdateForm(formJsInfo);
596     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
597     EXPECT_TRUE(formRenderer->uiContent_);
598     formRenderer->PreInitAddForm(want, formJsInfo);
599 }
600 
601 /**
602  * @tc.name: FormRenderTest019
603  * @tc.desc: test AttachForm
604  * @tc.type: FUNC
605  */
606 HWTEST_F(FormRenderTest, FormRenderTest019, TestSize.Level1)
607 {
608     auto formRenderer = GetInstance("formRenderTest019");
609     ASSERT_TRUE(formRenderer);
610     OHOS::AppExecFwk::FormJsInfo formJsInfo;
611     OHOS::AAFwk::Want want;
612     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
613     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
614     want.SetParam(FORM_RENDER_STATE, true);
615     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
616     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
617     formRenderer->AttachForm(want, formJsInfo);
618     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
619     EXPECT_TRUE(formRenderer->uiContent_);
620     formRenderer->AttachForm(want, formJsInfo);
621 }
622 
623 /**
624  * @tc.name: FormRenderTest020
625  * @tc.desc: test AttachUIContent
626  * @tc.type: FUNC
627  */
628 HWTEST_F(FormRenderTest, FormRenderTest020, TestSize.Level1)
629 {
630     auto formRenderer = GetInstance("formRenderTest020");
631     ASSERT_TRUE(formRenderer);
632     OHOS::AppExecFwk::FormJsInfo formJsInfo;
633     OHOS::AAFwk::Want want;
634     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
635     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
636     want.SetParam(FORM_RENDER_STATE, true);
637     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
638     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
639     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
640     EXPECT_TRUE(formRenderer->uiContent_);
641     std::string surfaceNodeName = "ArkTSCardNode";
642     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
643     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
644     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).WillOnce(Return(rsNode));
645     formRenderer->AttachUIContent(want, formJsInfo);
646 }
647 
648 /**
649  * @tc.name: FormRenderTest021
650  * @tc.desc: test OnSurfaceReuse
651  * @tc.type: FUNC
652  */
653 HWTEST_F(FormRenderTest, FormRenderTest021, TestSize.Level1)
654 {
655     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("formRenderTest021");
656     ASSERT_TRUE(eventRunner);
657     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
658     auto formRendererGroup = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
659     EXPECT_TRUE(formRendererGroup);
660     OHOS::AAFwk::Want want;
661     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
662     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
663     want.SetParam(FORM_RENDER_STATE, true);
664     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
665     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
666     OHOS::AppExecFwk::FormJsInfo formJsInfo;
667     formRendererGroup->AddForm(want, formJsInfo);
668     auto formRenderer = formRendererGroup->formRenderer_;
669     EXPECT_TRUE(formRenderer);
670     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
671     EXPECT_TRUE(formRenderer->uiContent_);
672     formRenderer->formRendererDispatcherImpl_ =
673         new FormRendererDispatcherImpl(formRenderer->uiContent_, nullptr, eventHandler);
674     formRenderer->formRendererDelegate_ = renderDelegate;
675     formRenderer->OnSurfaceReuse(formJsInfo);
676     std::string surfaceNodeName = "ArkTSCardNode";
677     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
678     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
679     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).Times(Exactly(2))
680         .WillOnce(Return(rsNode));
681     formRenderer->OnSurfaceReuse(formJsInfo);
682 }
683 
684 /**
685  * @tc.name: FormRenderTest022
686  * @tc.desc: test OnSurfaceDetach
687  * @tc.type: FUNC
688  */
689 HWTEST_F(FormRenderTest, FormRenderTest022, TestSize.Level1)
690 {
691     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("formRenderTest022");
692     ASSERT_TRUE(eventRunner);
693     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
694     auto formRendererGroup = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
695     EXPECT_TRUE(formRendererGroup);
696     OHOS::AAFwk::Want want;
697     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
698     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
699     want.SetParam(FORM_RENDER_STATE, true);
700     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
701     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
702     OHOS::AppExecFwk::FormJsInfo formJsInfo;
703     formRendererGroup->AddForm(want, formJsInfo);
704     auto formRenderer = formRendererGroup->formRenderer_;
705     EXPECT_TRUE(formRenderer);
706     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
707     EXPECT_TRUE(formRenderer->uiContent_);
708     formRenderer->formRendererDelegate_ = renderDelegate;
709     formRenderer->OnSurfaceDetach();
710     std::string surfaceNodeName = "ArkTSCardNode";
711     struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName };
712     std::shared_ptr<Rosen::RSSurfaceNode> rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true);
713     EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).Times(Exactly(2)).
714         WillOnce(Return(rsNode));
715     formRenderer->OnSurfaceDetach();
716 }
717 
718 /**
719 * @tc.name: FormRenderTest023
720 * @tc.desc: test SetVisibleChange
721 * @tc.type: FUNC
722 */
723 HWTEST_F(FormRenderTest, FormRenderTest023, TestSize.Level1)
724 {
725     auto formRenderer = GetInstance("formRenderTest023");
726     ASSERT_TRUE(formRenderer);
727     formRenderer->SetVisibleChange(true);
728     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
729     EXPECT_TRUE(formRenderer->uiContent_);
730     formRenderer->SetVisibleChange(true);
731 }
732 
733 
734 /**
735 * @tc.name: FormRenderTest024
736 * @tc.desc: test SetVisibleChange
737 * @tc.type: FUNC
738 */
739 HWTEST_F(FormRenderTest, FormRenderTest024, TestSize.Level1)
740 {
741     auto formRenderer = GetInstance("formRenderTest024");
742     ASSERT_TRUE(formRenderer);
743     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
744     EXPECT_TRUE(formRenderer->uiContent_);
745     formRenderer->SetVisibleChange(true);
746 }
747 
748 /**
749 * @tc.name: FormRenderTest025
750 * @tc.desc: test UpdateFormSize
751 * @tc.type: FUNC
752 */
753 HWTEST_F(FormRenderTest, FormRenderTest025, TestSize.Level1)
754 {
755     auto formRenderer = GetInstance("formRenderTest025");
756     ASSERT_TRUE(formRenderer);
757     float borderWidth = 1.0f;
758     float width = 1.0f;
759     float height = 1.0f;
760     formRenderer->UpdateFormSize(width, height, borderWidth);
761     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
762     EXPECT_TRUE(formRenderer->uiContent_);
763     formRenderer->UpdateFormSize(width, height, borderWidth);
764 }
765 
766 /**
767 * @tc.name: FormRenderTest030
768 * @tc.desc: test IsManagerDelegateValid
769 * @tc.type: FUNC
770 */
771 HWTEST_F(FormRenderTest, FormRenderTest030, TestSize.Level1)
772 {
773     auto formRenderer = GetInstance("formRenderTest030");
774     ASSERT_TRUE(formRenderer);
775     OHOS::AAFwk::Want want;
776     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
777     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
778     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
779     want.SetParam(FORM_RENDER_STATE, true);
780     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
781     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
782     EXPECT_TRUE(formRenderer->uiContent_);
783     bool res = formRenderer->IsManagerDelegateValid(want);
784     EXPECT_EQ(res, true);
785 }
786 
787 HWTEST_F(FormRenderTest, FormRenderTest031, TestSize.Level1)
788 {
789     int64_t formId = 100;
790     std::string bundleName = "testBundleName";
791     std::string formName = "testFormName";
792     FormRenderEventReport::StartSurfaceNodeTimeoutReportTimer(formId, bundleName, formName);
793     EXPECT_NE(FormRenderEventReport::waitSurfaceNodeTimerMap_.find(formId),
794         FormRenderEventReport::waitSurfaceNodeTimerMap_.end());
795 
796     FormRenderEventReport::StopTimer(formId);
797     EXPECT_EQ(FormRenderEventReport::waitSurfaceNodeTimerMap_.find(formId),
798         FormRenderEventReport::waitSurfaceNodeTimerMap_.end());
799 }
800 
801 HWTEST_F(FormRenderTest, FormRenderTest032, TestSize.Level1)
802 {
803     int64_t formId = 100;
804     std::string bundleName = "testBundleName";
805     std::string formName = "testFormName";
806 
807     FormRenderEventReport::waitSurfaceNodeTimerMap_[formId] = 100;
808     FormRenderEventReport::StopTimer(formId);
809     EXPECT_EQ(FormRenderEventReport::waitSurfaceNodeTimerMap_.find(formId),
810         FormRenderEventReport::waitSurfaceNodeTimerMap_.end());
811 }
812 
813 HWTEST_F(FormRenderTest, FormRenderTest033, TestSize.Level1)
814 {
815     auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderTest033");
816     ASSERT_TRUE(eventRunner);
817     auto eventHandler = std::make_shared<OHOS::AppExecFwk::EventHandler>(eventRunner);
818     auto formRendererGroup = FormRendererGroup::Create(nullptr, nullptr, eventHandler);
819     EXPECT_TRUE(formRendererGroup);
820     OHOS::AAFwk::Want want;
821     want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1);
822     want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false);
823     want.SetParam(FORM_RENDER_STATE, true);
824     sptr<FormRendererDelegateImpl> renderDelegate = new FormRendererDelegateImpl();
825     want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject());
826     OHOS::AppExecFwk::FormJsInfo formJsInfo;
827     formRendererGroup->AddForm(want, formJsInfo);
828     auto formRenderer = formRendererGroup->formRenderer_;;
829     EXPECT_TRUE(formRenderer);
830     formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr);
831     EXPECT_TRUE(formRenderer->uiContent_);
832 
833     OHOS::AppExecFwk::FormJsInfo newFormJsInfo;
834     auto onSurfaceCreate = [&newFormJsInfo](const std::shared_ptr<Rosen::RSSurfaceNode>& /* surfaceNode */,
835                                const OHOS::AppExecFwk::FormJsInfo& info,
__anon52f21adf0d02(const std::shared_ptr<Rosen::RSSurfaceNode>& , const OHOS::AppExecFwk::FormJsInfo& info, const AAFwk::Want& ) 836                                const AAFwk::Want& /* want */) { newFormJsInfo = info; };
837     renderDelegate->SetSurfaceCreateEventHandler(std::move(onSurfaceCreate));
838 
839     formJsInfo.uiSyntax = OHOS::AppExecFwk::FormType::ETS;
840     formJsInfo.formData = "testData";
841     formJsInfo.formId = 10;
842     formRenderer->OnSurfaceCreate(formJsInfo, false);
843     EXPECT_EQ(newFormJsInfo.formData, "");
844 }
845 } // namespace OHOS::Ace