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