1 /*
2 * Copyright (c) 2024 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 "gmock/gmock.h"
17 #include "gtest/gtest.h"
18
19 #define private public
20 #define protected public
21 #include "accessibility_system_ability_client.h"
22 #include "core/components_ng/base/observer_handler.h"
23 #include "core/components_ng/pattern/node_container/node_container_pattern.h"
24 #include "test/mock/base/mock_task_executor.h"
25 #include "test/mock/core/common/mock_container.h"
26 #include "test/mock/core/pipeline/mock_pipeline_context.h"
27
28 #include "base/log/dump_log.h"
29 #include "adapter/ohos/osal/js_accessibility_manager.h"
30 #include "frameworks/core/accessibility/accessibility_node.h"
31 #include "adapter/ohos/entrance/ace_container.h"
32
33 using namespace OHOS::Accessibility;
34 using namespace testing;
35 using namespace testing::ext;
36
37 namespace OHOS::Ace {
38 } // namespace OHOS::Ace
39
40 namespace OHOS::Ace::NG {
41 namespace {
42 const int32_t NUMTWO = 2;
43 } // namespace
44
45 class MockAccessibilityChildTreeCallback : public AccessibilityChildTreeCallback {
46 public:
MockAccessibilityChildTreeCallback(int64_t accessibilityId)47 explicit MockAccessibilityChildTreeCallback(int64_t accessibilityId)
48 : AccessibilityChildTreeCallback(accessibilityId)
49 {}
50
51 ~MockAccessibilityChildTreeCallback() override = default;
52
OnRegister(uint32_t windowId,int32_t treeId)53 bool OnRegister(uint32_t windowId, int32_t treeId) override
54 {
55 return true;
56 }
57
OnDeregister()58 bool OnDeregister() override
59 {
60 return true;
61 }
62
OnSetChildTree(int32_t childWindowId,int32_t childTreeId)63 bool OnSetChildTree(int32_t childWindowId, int32_t childTreeId) override
64 {
65 return true;
66 }
67
OnDumpChildInfo(const std::vector<std::string> & params,std::vector<std::string> & info)68 bool OnDumpChildInfo(const std::vector<std::string>& params, std::vector<std::string>& info) override
69 {
70 return true;
71 }
72
OnClearRegisterFlag()73 void OnClearRegisterFlag() override
74 {
75 isReg_ = false;
76 }
77
78 private:
79 bool isReg_ = false;
80 };
81
82 class MockAccessibilitySAObserverCallback : public AccessibilitySAObserverCallback {
83 public:
MockAccessibilitySAObserverCallback(int64_t accessibilityId)84 explicit MockAccessibilitySAObserverCallback(int64_t accessibilityId)
85 : AccessibilitySAObserverCallback(accessibilityId)
86 {}
87
88 ~MockAccessibilitySAObserverCallback() override = default;
89
OnState(bool state)90 bool OnState(bool state) override
91 {
92 return true;
93 }
94 };
95
96 class MockStageManager : public StageManager {
97 public:
MockStageManager(const RefPtr<FrameNode> & stage)98 explicit MockStageManager(const RefPtr<FrameNode>& stage)
99 : StageManager(stage)
100 {}
101
102 ~MockStageManager() override = default;
103
104 MOCK_METHOD(bool, IsSplitMode, (), (const));
105 MOCK_METHOD(std::vector<RefPtr<FrameNode>>, GetTopPagesWithTransition, (), (const));
106 MOCK_METHOD(std::vector<std::string>, GetTopPagePaths, (), (const));
107 MOCK_METHOD(RefPtr<FrameNode>, GetLastPageWithTransition, (), (const));
108 };
109
110 class MockUiExtensionPattern : public Pattern {
111 public:
GetUiExtensionId()112 int32_t GetUiExtensionId()
113 {
114 return NUMTWO;
115 }
116 };
117
118 class JsAccessibilityManagerTest : public testing::Test {
119 public:
120 static void SetUpTestCase();
121 static void TearDownTestCase();
122 };
123
SetUpTestCase()124 void JsAccessibilityManagerTest::SetUpTestCase()
125 {
126 MockPipelineContext::SetUp();
127 MockContainer::SetUp();
128 MockContainer::Current()->taskExecutor_ = AceType::MakeRefPtr<MockTaskExecutor>();
129 MockContainer::Current()->pipelineContext_ = MockPipelineContext::GetCurrentContext();
130 MockContainer::Current()->pipelineContext_->taskExecutor_ = MockContainer::Current()->taskExecutor_;
131
132 std::unique_ptr<std::ostream> ostream = std::make_unique<std::ostringstream>();
133 ASSERT_NE(ostream, nullptr);
134 DumpLog::GetInstance().SetDumpFile(std::move(ostream));
135 }
136
TearDownTestCase()137 void JsAccessibilityManagerTest::TearDownTestCase()
138 {
139 MockPipelineContext::TearDown();
140 MockContainer::TearDown();
141 }
142
143 class MockJsAccessibilityManager : public Framework::JsAccessibilityManager {
144 public:
145 MOCK_METHOD3(SendEventToAccessibilityWithNode,
146 void(const AccessibilityEvent& accessibilityEvent,
147 const RefPtr<AceType>& node, const RefPtr<PipelineBase>& context));
148 MOCK_METHOD0(GenerateAccessibilityWorkMode, AccessibilityWorkMode());
149 MOCK_METHOD1(HandleWillClickAccept, void(RefPtr<NG::FrameNode>& frameNode));
150 MOCK_METHOD1(HandleDidClickAccept, void(RefPtr<NG::FrameNode>& frameNode));
151 MOCK_METHOD1(ActClick, bool(RefPtr<NG::FrameNode>& frameNode));
152 };
153
154 /**
155 * @tc.name: JsAccessibilityManager001
156 * @tc.desc: UpdateAccessibilityElementInfo
157 * @tc.type: FUNC
158 */
159 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager001, TestSize.Level1)
160 {
161 /**
162 * @tc.steps: step1. construct JsAccessibilityManager
163 */
164 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
165 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
166 Accessibility::AccessibilityElementInfo nodeInfo;
167 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
168 accessibilityProperty->SetAccessibilityRole("test");
169 accessibilityProperty->SetAccessibilityCustomRole("test");
170 accessibilityProperty->SetUserRangeCurrentValue(5);
171 accessibilityProperty->SetUserRangeMinValue(1);
172 accessibilityProperty->SetUserRangeMaxValue(10);
173 accessibilityProperty->SetAccessibilityLevel("yes");
174 accessibilityProperty->SetUserCurrentValue(5);
175 accessibilityProperty->SetUserMinValue(1);
176 accessibilityProperty->SetUserMaxValue(10);
177 jsAccessibilityManager->UpdateAccessibilityElementInfo(frameNode, nodeInfo);
178
179 /**
180 * @tc.steps: step2. init accessibilityProperty and set level yes.
181 * @tc.expected: UpdateAccessibilityElementInfo nodeInfo level is yes.
182 */
183 EXPECT_EQ(nodeInfo.GetAccessibilityLevel(), "yes");
184 }
185
186 /**
187 * @tc.name: JsAccessibilityManager002
188 * @tc.desc: UpdateElementInfoTreeId
189 * @tc.type: FUNC
190 */
191 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager002, TestSize.Level1)
192 {
193 /**
194 * @tc.steps: step1. construct JsAccessibilityManager
195 */
196 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
197 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
198 Accessibility::AccessibilityElementInfo info;
199 info.SetPageId(1);
200 info.SetParent(0);
201 info.SetBelongTreeId(10);
202 info.SetAccessibilityId(11);
203 jsAccessibilityManager->UpdateElementInfoTreeId(info);
204
205 /**
206 * @tc.steps: step2. init AccessibilityElementInfo and SetBelongTreeId 10, pageid 1, parent 0.
207 * @tc.expected: UpdateElementInfoTreeId nodeInfo pageid is not equal 1.
208 */
209 EXPECT_NE(info.GetPageId(), 1);
210
211 info.SetBelongTreeId(0);
212 info.SetPageId(1);
213 jsAccessibilityManager->UpdateElementInfoTreeId(info);
214
215 /**
216 * @tc.steps: step3. AccessibilityElementInfo and SetBelongTreeId 0
217 * @tc.expected: UpdateElementInfoTreeId nodeInfo pageid is 1.
218 */
219 EXPECT_EQ(info.GetPageId(), 1);
220 }
221
222 /**
223 * @tc.name: JsAccessibilityManager003
224 * @tc.desc: UpdateAccessibilityVisible
225 * @tc.type: FUNC
226 */
227 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager003, TestSize.Level1)
228 {
229 /**
230 * @tc.steps: step1. construct JsAccessibilityManager
231 */
232 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), false);
233 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
234
235 /**
236 * @tc.steps: step2. test UpdateAccessibilityVisible
237 */
238 Accessibility::AccessibilityElementInfo nodeInfo;
239 // without parent node return visiable false
240 jsAccessibilityManager->UpdateAccessibilityVisible(frameNode, nodeInfo);
241 EXPECT_EQ(nodeInfo.GetAccessibilityVisible(), false);
242
243 nodeInfo.SetParent(0);
244 jsAccessibilityManager->UpdateAccessibilityVisible(frameNode, nodeInfo);
245 EXPECT_EQ(nodeInfo.GetAccessibilityVisible(), false);
246
247 /**
248 * @tc.steps: step3. test with page_node
249 */
250 Accessibility::AccessibilityElementInfo nodeInfoNew;
251 auto pageNode = FrameNode::CreateFrameNode(V2::PAGE_ETS_TAG, 1,
252 AceType::MakeRefPtr<Pattern>(), false);
253 jsAccessibilityManager->UpdateAccessibilityVisible(pageNode, nodeInfoNew);
254 }
255
256 /**
257 * @tc.name: JsAccessibilityManager004
258 * @tc.desc: GenerateCommonProperty
259 * @tc.type: FUNC
260 */
261 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager004, TestSize.Level1)
262 {
263 /**
264 * @tc.steps: step1. construct JsAccessibilityManager
265 */
266 auto rootNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
267 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
268 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
269 AceType::MakeRefPtr<Pattern>(), false);
270 rootNode->AddChild(frameNode);
271 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
272 auto context = NG::PipelineContext::GetCurrentContext();
273 jsAccessibilityManager->SetPipelineContext(context);
274 jsAccessibilityManager->Register(true);
275 jsAccessibilityManager->SetWindowId(1);
276
277 /**
278 * @tc.steps: step2. test GenerateCommonProperty
279 */
280 auto mainContext = context;
281 Framework::CommonProperty commonProperty;
282 jsAccessibilityManager->GenerateCommonProperty(context, commonProperty, mainContext, frameNode);
283 EXPECT_EQ(commonProperty.innerWindowId, -1);
284
285 jsAccessibilityManager->DumpTreeNodeCommonInfoNg(frameNode, commonProperty);
286 jsAccessibilityManager->DumpTreeNodeSimplifyInfoNG(frameNode, 1, commonProperty, 1);
287 jsAccessibilityManager->DumpTreeNG(frameNode, 1, frameNode->GetId(), true);
288 jsAccessibilityManager->DumpTree(1, 1, true);
289
290 jsAccessibilityManager->UpdateViewScale();
291 EXPECT_EQ(jsAccessibilityManager->scaleX_, 1.0f);
292 }
293
294 /**
295 * @tc.name: JsAccessibilityManager005
296 * @tc.desc: dump func
297 * @tc.type: FUNC
298 */
299 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager005, TestSize.Level1)
300 {
301 /**
302 * @tc.steps: step1. construct JsAccessibilityManager
303 */
304 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
305 AceType::MakeRefPtr<Pattern>(), false);
306 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
307 Accessibility::AccessibilityElementInfo nodeInfo;
308 nodeInfo.SetAccessibilityId(1);
309 jsAccessibilityManager->DumpAccessibilityPropertyNG(nodeInfo);
310 jsAccessibilityManager->DumpCommonPropertyNG(nodeInfo, 1);
311
312 /**
313 * @tc.steps: step2. test DumpTreeNG
314 */
315 bool useWindowId = false;
316 uint32_t windowId = 1;
317 int64_t rootId = -1;
318 bool isDumpSimplify = false;
319 jsAccessibilityManager->DumpTreeNG(useWindowId, windowId, rootId, isDumpSimplify);
320
321 rootId = 1;
322 jsAccessibilityManager->SetWindowId(0);
323 jsAccessibilityManager->DumpTreeNG(useWindowId, windowId, rootId, isDumpSimplify);
324
325 jsAccessibilityManager->SetWindowId(1);
326 jsAccessibilityManager->DumpTreeNG(useWindowId, windowId, rootId, isDumpSimplify);
327
328 /**
329 * @tc.steps: step3. test DumpHoverTestNG/DumpTreeNodeSafeAreaInfoNg
330 */
331 bool verbose = false;
332 jsAccessibilityManager->DumpHoverTestNG(windowId, rootId, 100, 100, verbose);
333 jsAccessibilityManager->DumpTreeNodeSafeAreaInfoNg(frameNode);
334 EXPECT_EQ(nodeInfo.GetAccessibilityId(), 1);
335 }
336
337 /**
338 * @tc.name: JsAccessibilityManager006
339 * @tc.desc: UpdateVirtualNodeFocus
340 * @tc.type: FUNC
341 */
342 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager006, TestSize.Level1)
343 {
344 /**
345 * @tc.steps: step1. construct JsAccessibilityManager
346 */
347 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
348 AceType::MakeRefPtr<Pattern>(), false);
349 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
350
351 /**
352 * @tc.steps: step2. test UpdateVirtualNodeFocus
353 */
354 Accessibility::AccessibilityElementInfo nodeInfo;
355 RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
356 ASSERT_NE(geometryNode, nullptr);
357 frameNode->SetGeometryNode(geometryNode);
358 jsAccessibilityManager->SaveLast(0, frameNode);
359 jsAccessibilityManager->UpdateVirtualNodeFocus();
360 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
361 ASSERT_NE(accessibilityProperty, nullptr);
362 EXPECT_EQ(accessibilityProperty->GetAccessibilityFocusState(), false);
363 }
364
365 /**
366 * @tc.name: JsAccessibilityManager007
367 * @tc.desc: stateObserver
368 * @tc.type: FUNC
369 */
370 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager007, TestSize.Level1)
371 {
372 /**
373 * @tc.steps: step1. construct JsAccessibilityManager
374 */
375 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
376
377 /**
378 * @tc.steps: step2. test SubscribeToastObserver
379 */
380 auto ret = jsAccessibilityManager->SubscribeToastObserver();
381 EXPECT_EQ(ret, true);
382
383 /**
384 * @tc.steps: step3. test UnsubscribeToastObserver
385 */
386 ret = jsAccessibilityManager->UnsubscribeToastObserver();
387 EXPECT_EQ(ret, true);
388
389 /**
390 * @tc.steps: step4. test SubscribeStateObserver
391 */
392 ret = jsAccessibilityManager->SubscribeStateObserver(16);
393 EXPECT_EQ(ret, false);
394
395 /**
396 * @tc.steps: step5. test UnsubscribeStateObserver
397 */
398 ret = jsAccessibilityManager->UnsubscribeStateObserver(16);
399 EXPECT_EQ(ret, false);
400 }
401
402 /**
403 * @tc.name: JsAccessibilityManager008
404 * @tc.desc: SendAccessibilitySyncEvent, TransferAccessibilityAsyncEvent
405 * @tc.type: FUNC
406 */
407 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager008, TestSize.Level1)
408 {
409 /**
410 * @tc.steps: step1. construct JsAccessibilityManager
411 */
412 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
413 auto context = NG::PipelineContext::GetCurrentContext();
414 jsAccessibilityManager->SetPipelineContext(context);
415 jsAccessibilityManager->Register(true);
416 auto client = Accessibility::AccessibilitySystemAbilityClient::GetInstance();
417
418 /**
419 * @tc.steps: step2. test SendAccessibilitySyncEvent with register true
420 */
421 AccessibilityEvent accessibilityEvent;
422 Accessibility::AccessibilityEventInfo eventInfo;
423 auto ret = jsAccessibilityManager->SendAccessibilitySyncEvent(accessibilityEvent, eventInfo);
424 if (client) {
425 bool isEnabled = false;
426 client->IsEnabled(isEnabled);
427 EXPECT_EQ(ret, isEnabled);
428 } else {
429 EXPECT_EQ(ret, false);
430 }
431
432 /**
433 * @tc.steps: step3. test TransferAccessibilityAsyncEvent with register true
434 */
435 int64_t uiExtensionOffset = 1000;
436 ret = jsAccessibilityManager->TransferAccessibilityAsyncEvent(eventInfo, uiExtensionOffset);
437 if (client) {
438 bool isEnabled = false;
439 client->IsEnabled(isEnabled);
440 EXPECT_EQ(ret, isEnabled);
441 } else {
442 EXPECT_EQ(ret, false);
443 }
444
445 /**
446 * @tc.steps: step4. test SendAccessibilitySyncEvent with register false
447 */
448 jsAccessibilityManager->Register(false);
449 ret = jsAccessibilityManager->SendAccessibilitySyncEvent(accessibilityEvent, eventInfo);
450 EXPECT_EQ(ret, false);
451 /**
452 * @tc.steps: step5. test TransferAccessibilityAsyncEvent with register false
453 */
454 ret = jsAccessibilityManager->TransferAccessibilityAsyncEvent(eventInfo, uiExtensionOffset);
455 EXPECT_EQ(ret, false);
456 }
457
458 /**
459 * @tc.name: JsAccessibilityManager009
460 * @tc.desc: GetDelayTimeBeforeSendEvent
461 * @tc.type: FUNC
462 */
463 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager009, TestSize.Level1)
464 {
465 /**
466 * @tc.steps: step1. construct JsAccessibilityManager
467 */
468 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
469 AceType::MakeRefPtr<Pattern>(), false);
470 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
471 accessibilityProperty->SetAccessibilityLevel("yes");
472 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
473 auto context = NG::PipelineContext::GetCurrentContext();
474 jsAccessibilityManager->SetPipelineContext(context);
475 jsAccessibilityManager->Register(true);
476
477 /**
478 * @tc.steps: step2. test GetPipelineByWindowId
479 */
480 AccessibilityEvent event;
481 int64_t ret;
482 ret = jsAccessibilityManager->GetDelayTimeBeforeSendEvent(event, frameNode);
483 EXPECT_EQ(ret, 0);
484 // test GetDelayTimeBeforeSendEvent with node selected, event type click, return 0
485 event.type = AccessibilityEventType::CLICK;
486 accessibilityProperty->SetUserSelected(true);
487 ret = jsAccessibilityManager->GetDelayTimeBeforeSendEvent(event, frameNode);
488 EXPECT_EQ(ret, 20);
489 // test GetDelayTimeBeforeSendEvent with node not selected, return 0
490 accessibilityProperty->SetUserSelected(false);
491 ret = jsAccessibilityManager->GetDelayTimeBeforeSendEvent(event, frameNode);
492 EXPECT_EQ(ret, 20);
493
494 ret = jsAccessibilityManager->GetDelayTimeBeforeSendEvent(event, nullptr);
495 EXPECT_EQ(ret, 0);
496 }
497
498 /**
499 * @tc.name: JsAccessibilityManager010
500 * @tc.desc: GetPipelineByWindowId
501 * @tc.type: FUNC
502 */
503 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager010, TestSize.Level1)
504 {
505 /**
506 * @tc.steps: step1. construct JsAccessibilityManager
507 */
508 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
509 auto context = NG::PipelineContext::GetCurrentContext();
510 jsAccessibilityManager->SetPipelineContext(context);
511 jsAccessibilityManager->Register(true);
512 jsAccessibilityManager->SetWindowId(1);
513
514 /**
515 * @tc.steps: step2. test GetPipelineByWindowId
516 */
517 auto pattern = jsAccessibilityManager->GetPipelineByWindowId(1);
518 EXPECT_NE(pattern, nullptr);
519
520 pattern = jsAccessibilityManager->GetPipelineByWindowId(2);
521 EXPECT_EQ(pattern, nullptr);
522 }
523
524 /**
525 * @tc.name: GetPipelineByWindowId002
526 * @tc.desc: GetPipelineByWindowId
527 * @tc.type: FUNC
528 */
529 HWTEST_F(JsAccessibilityManagerTest, GetPipelineByWindowId002, TestSize.Level1)
530 {
531 /**
532 * @tc.steps: step1. construct JsAccessibilityManager
533 */
534 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
535 auto context = NG::PipelineContext::GetCurrentContext();
536 jsAccessibilityManager->SetPipelineContext(context);
537 jsAccessibilityManager->Register(true);
538 jsAccessibilityManager->SetWindowId(1);
539
540 RefPtr<NG::PipelineContext> context1 = nullptr;
541 jsAccessibilityManager->AddSubPipelineContext(context1);
542
543 auto context2 = AceType::MakeRefPtr<NG::PipelineContext>();
544 context2->SetWindowId(2);
545 jsAccessibilityManager->AddSubPipelineContext(context2);
546 /**
547 * @tc.steps: step2. test GetSubPipelineContext in GetPipelineByWindowId
548 */
549 auto pattern = jsAccessibilityManager->GetPipelineByWindowId(1);
550 EXPECT_NE(pattern, nullptr);
551
552 pattern = jsAccessibilityManager->GetPipelineByWindowId(2);
553 EXPECT_NE(pattern, nullptr);
554 }
555
556 /**
557 * @tc.name: AccessibilityDfxTest003
558 * @tc.desc: inject SecurityClickAction normal
559 * @tc.type: FUNC
560 */
561 HWTEST_F(JsAccessibilityManagerTest, AccessibilityHidumperTest001, TestSize.Level1)
562 {
563 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
564 ASSERT_NE(jsAccessibilityManager, nullptr);
565 auto context = NG::PipelineContext::GetCurrentContext();
566 ASSERT_NE(context, nullptr);
567 jsAccessibilityManager->SetPipelineContext(context);
568 jsAccessibilityManager->Register(true);
569 jsAccessibilityManager->SetWindowId(1);
570 auto root = context->GetRootElement();
571 ASSERT_NE(root, nullptr);
572 auto rootId = root->GetAccessibilityId();
573 std::string idStr = std::to_string(rootId);
574 auto accessibilityProperty = root->GetAccessibilityProperty<NG::AccessibilityProperty>();
575 ASSERT_NE(accessibilityProperty, nullptr);
576 // not SecurityClickAction
577 std::vector<std::string> params = {"-inspector", "--inject-action", idStr, "--SecurityClickAction"};
578 // suppose to parse inject-action normal
579 jsAccessibilityManager->DumpInjectActionTest(params);
580 ASSERT_NE(accessibilityProperty->GetSecurityClickActionFunc(), nullptr);
581
582 // reset
583 accessibilityProperty->SetSecurityClickAction(nullptr);
584 }
585
586 /**
587 * @tc.name: AccessibilityDfxTest003
588 * @tc.desc: inject SecurityClickAction abnormal
589 * @tc.type: FUNC
590 */
591 HWTEST_F(JsAccessibilityManagerTest, AccessibilityHidumperTest002, TestSize.Level1)
592 {
593 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
594 ASSERT_NE(jsAccessibilityManager, nullptr);
595 auto context = NG::PipelineContext::GetCurrentContext();
596 ASSERT_NE(context, nullptr);
597 jsAccessibilityManager->SetPipelineContext(context);
598 jsAccessibilityManager->Register(true);
599 jsAccessibilityManager->SetWindowId(1);
600 auto root = context->GetRootElement();
601 ASSERT_NE(root, nullptr);
602 auto rootId = root->GetAccessibilityId();
603 std::string idStr = std::to_string(rootId);
604 auto accessibilityProperty = root->GetAccessibilityProperty<NG::AccessibilityProperty>();
605 ASSERT_NE(accessibilityProperty, nullptr);
606 std::vector<std::string> params = {"-inspector", "--inject-action", idStr, "--NotSecurityClickAction"};
607 // suppose to parse inject-action normal
608 jsAccessibilityManager->DumpInjectActionTest(params);
609 ASSERT_EQ(accessibilityProperty->GetSecurityClickActionFunc(), nullptr);
610
611 // NotifyChildAction
612 params = {"-inspector", "--inject-action", idStr, "--NotifyChildAction", "5"};
613 jsAccessibilityManager->DumpInjectActionTest(params);
614 ASSERT_EQ(accessibilityProperty->GetSecurityClickActionFunc(), nullptr);
615 ASSERT_NE(accessibilityProperty->GetNotifyChildActionFunc(), nullptr);
616 // reset
617 accessibilityProperty->SetSecurityClickAction(nullptr);
618 accessibilityProperty->SetNotifyChildAction(nullptr);
619 }
620 /**
621 * @tc.name: JsAccessibilityManager011
622 * @tc.desc: CheckDumpInfoParams,OnDumpInfoNG,CheckDumpHandleEventParams,DumpProperty
623 * @tc.type: FUNC
624 */
625 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager011, TestSize.Level1)
626 {
627 /**
628 * @tc.steps: step1. construct JsAccessibilityManager
629 */
630 std::vector<std::string> params = {};
631 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
632
633 /**
634 * @tc.steps: step2. test CheckDumpInfoParams
635 */
636 auto ret = jsAccessibilityManager->CheckDumpInfoParams(params);
637 EXPECT_EQ(ret, false);
638
639 params = { "-inspector", "-accessibility", "-simplify"};
640 ret = jsAccessibilityManager->CheckDumpInfoParams(params);
641 EXPECT_EQ(ret, true);
642
643 params = { "-inspector", "-accessibility"};
644 ret = jsAccessibilityManager->CheckDumpInfoParams(params);
645 EXPECT_EQ(ret, true);
646
647 /**
648 * @tc.steps: step3. test OnDumpInfoNG
649 */
650 params = { "-inspector", "-accessibility", "-simplify", "-w", "1"};
651 jsAccessibilityManager->OnDumpInfoNG(params, 1, false);
652
653 /**
654 * @tc.steps: step4. test CheckDumpHandleEventParams
655 */
656 ret = jsAccessibilityManager->CheckDumpHandleEventParams(params);
657 EXPECT_EQ(ret, true);
658
659 /**
660 * @tc.steps: step5. test DumpProperty
661 */
662 jsAccessibilityManager->DumpProperty(params);
663 }
664
665 /**
666 * @tc.name: JsAccessibilityManager012
667 * @tc.desc: Test UIExtensionManager ConvertActionTypeToBoolen
668 * @tc.type: FUNC
669 */
670 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager012, TestSize.Level1)
671 {
672 /**
673 * @tc.steps: step1. construct JsAccessibilityManager
674 */
675 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
676 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
677 auto context = NG::PipelineContext::GetCurrentContext();
678 int64_t elementId = 0;
679 std::map<std::string, std::string> actionArguments;
680 /**
681 * @tc.steps: step2. test ConvertActionTypeToBoolen
682 */
683 auto ret = jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_FOCUS,
684 frameNode, elementId, context, actionArguments);
685 EXPECT_EQ(ret, false);
686
687 ret = jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLEAR_FOCUS,
688 frameNode, elementId, context, actionArguments);
689 EXPECT_EQ(ret, false);
690
691 ret = jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
692 frameNode, elementId, context, actionArguments);
693 EXPECT_EQ(ret, false);
694
695 ret = jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_LONG_CLICK,
696 frameNode, elementId, context, actionArguments);
697 EXPECT_EQ(ret, false);
698
699 ret = jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_ACCESSIBILITY_FOCUS,
700 frameNode, elementId, context, actionArguments);
701 EXPECT_EQ(ret, true);
702
703 ret = jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLEAR_ACCESSIBILITY_FOCUS,
704 frameNode, elementId, context, actionArguments);
705 EXPECT_EQ(ret, false);
706 }
707
708 /**
709 * @tc.name: JsAccessibilityManager013
710 * @tc.desc: Test UIExtensionManager SendEventToAccessibilityWithNode/SendEventToAccessibilityWithNodeInner
711 * @tc.type: FUNC
712 */
713 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager013, TestSize.Level1)
714 {
715 /**
716 * @tc.steps: step1. construct JsAccessibilityManager
717 */
718 auto rootNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
719 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
720 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
721 AceType::MakeRefPtr<Pattern>(), false);
722 rootNode->AddChild(frameNode);
723 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
724 accessibilityProperty->SetAccessibilityLevel("yes");
725 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
726
727 /**
728 * @tc.steps: step2. test SendEventToAccessibilityWithNode
729 */
730 AccessibilityEvent accessibilityEvent;
731 auto context = NG::PipelineContext::GetCurrentContext();
732 EXPECT_EQ(jsAccessibilityManager->context_.Upgrade(), nullptr);
733 jsAccessibilityManager->SetPipelineContext(context);
734 EXPECT_NE(jsAccessibilityManager->context_.Upgrade(), nullptr);
735 jsAccessibilityManager->SendEventToAccessibilityWithNode(accessibilityEvent, frameNode, context);
736
737 /**
738 * @tc.steps: step2. test SendEventToAccessibilityWithNodeInner
739 */
740 jsAccessibilityManager->SendEventToAccessibilityWithNodeInner(accessibilityEvent, frameNode, context);
741 }
742
743 /**
744 * @tc.name: JsAccessibilityManager014
745 * @tc.desc: Test UIExtensionManager RegisterSubWindowInteractionOperation/CanAccessibilityFocused
746 * @tc.type: FUNC
747 */
748 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager014, TestSize.Level1)
749 {
750 /**
751 * @tc.steps: step1. construct JsAccessibilityManager
752 */
753 auto rootNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
754 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
755 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
756 AceType::MakeRefPtr<Pattern>(), false);
757 rootNode->AddChild(frameNode);
758 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
759 accessibilityProperty->SetAccessibilityLevel("yes");
760 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
761
762 /**
763 * @tc.steps: step2. test RegisterSubWindowInteractionOperation
764 */
765 jsAccessibilityManager->RegisterSubWindowInteractionOperation(0);
766
767 /**
768 * @tc.steps: step3. test CanAccessibilityFocused
769 */
770 auto node = jsAccessibilityManager->GetAccessibilityNodeFromPage(0);
771 EXPECT_FALSE(jsAccessibilityManager->CanAccessibilityFocused(node));
772 }
773
774 /**
775 * @tc.name: JsAccessibilityManager015
776 * @tc.desc: Test UIExtensionManager NeedRegisterChildTree
777 * @tc.type: FUNC
778 */
779 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager015, TestSize.Level1)
780 {
781 /**
782 * @tc.steps: step1. construct JsAccessibilityManager
783 */
784 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
785
786 /**
787 * @tc.steps: step2. test NeedRegisterChildTree
788 */
789 uint32_t parentWindowId = 0;
790 int32_t parentTreeId = 0;
791 int64_t parentElementId = 0;
792 jsAccessibilityManager->parentWindowId_ = parentWindowId;
793 jsAccessibilityManager->parentTreeId_ = parentTreeId;
794 jsAccessibilityManager->parentElementId_ = parentElementId;
795 EXPECT_TRUE(jsAccessibilityManager->NeedRegisterChildTree(parentWindowId, parentTreeId, parentElementId));
796
797 jsAccessibilityManager->Register(true);
798 EXPECT_FALSE(jsAccessibilityManager->NeedRegisterChildTree(parentWindowId, parentTreeId, parentElementId));
799
800 jsAccessibilityManager->parentWindowId_ = 1;
801 EXPECT_TRUE(jsAccessibilityManager->NeedRegisterChildTree(parentWindowId, parentTreeId, parentElementId));
802 jsAccessibilityManager->parentTreeId_ = 1;
803 EXPECT_TRUE(jsAccessibilityManager->NeedRegisterChildTree(parentWindowId, parentTreeId, parentElementId));
804 jsAccessibilityManager->parentElementId_ = 1;
805 EXPECT_TRUE(jsAccessibilityManager->NeedRegisterChildTree(parentWindowId, parentTreeId, parentElementId));
806 }
807
808 /**
809 * @tc.name: JsAccessibilityManager016
810 * @tc.desc: Test UIExtensionManager OnDumpChildInfoForThird/CheckIsChildElement
811 * @tc.type: FUNC
812 */
813 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager016, TestSize.Level1)
814 {
815 /**
816 * @tc.steps: step1. construct JsAccessibilityManager
817 */
818 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
819 std::vector<std::string> params = {};
820 std::vector<std::string> info = {};
821
822 /**
823 * @tc.steps: step2. test CheckIsChildElement
824 */
825 int64_t elementId = 0;
826 int64_t rootId = 0;
827 EXPECT_FALSE(
828 jsAccessibilityManager->CheckIsChildElement(elementId, params, info, DumpMode::TREE, rootId));
829 EXPECT_FALSE(
830 jsAccessibilityManager->CheckIsChildElement(elementId, params, info, DumpMode::NODE, rootId));
831 }
832
833 /**
834 * @tc.name: JsAccessibilityManager017
835 * @tc.desc: Test UIExtensionManager RegisterInteractionOperation
836 * @tc.type: FUNC
837 */
838 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager017, TestSize.Level1)
839 {
840 /**
841 * @tc.steps: step1. construct JsAccessibilityManager
842 */
843 auto rootNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
844 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
845 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
846 AceType::MakeRefPtr<Pattern>(), false);
847 rootNode->AddChild(frameNode);
848 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
849 accessibilityProperty->SetAccessibilityLevel("yes");
850 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
851 std::vector<std::string> params = {};
852 std::vector<std::string> info = {};
853
854 /**
855 * @tc.steps: step2. test RegisterInteractionOperation
856 */
857 auto ret = jsAccessibilityManager->RegisterInteractionOperation(0);
858 EXPECT_EQ(ret, false);
859 }
860
861 /**
862 * @tc.name: JsAccessibilityManager018
863 * @tc.desc: Test UIExtensionManager RegisterAccessibilityChildTreeCallback/DeregisterAccessibilityChildTreeCallback
864 * @tc.type: FUNC
865 */
866 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager018, TestSize.Level1)
867 {
868 /**
869 * @tc.steps: step1. construct JsAccessibilityManager
870 */
871 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
872 EXPECT_EQ(0, jsAccessibilityManager->childTreeCallbackMap_.size());
873
874 /**
875 * @tc.steps: step2. test RegisterAccessibilityChildTreeCallback
876 */
877 int64_t elementId0 = 0;
878 auto callback0 = std::make_shared<MockAccessibilityChildTreeCallback>(0);
879 jsAccessibilityManager->RegisterAccessibilityChildTreeCallback(elementId0, callback0);
880 EXPECT_EQ(1, jsAccessibilityManager->childTreeCallbackMap_.size());
881 EXPECT_EQ(callback0, jsAccessibilityManager->childTreeCallbackMap_[elementId0]);
882 int64_t elementId1 = 1;
883 auto callback1 = std::make_shared<MockAccessibilityChildTreeCallback>(1);
884 jsAccessibilityManager->RegisterAccessibilityChildTreeCallback(elementId1, callback1);
885 EXPECT_EQ(2, jsAccessibilityManager->childTreeCallbackMap_.size());
886 EXPECT_EQ(callback1, jsAccessibilityManager->childTreeCallbackMap_[elementId1]);
887
888 /**
889 * @tc.steps: step3. test DeregisterAccessibilityChildTreeCallback
890 */
891 jsAccessibilityManager->DeregisterAccessibilityChildTreeCallback(elementId1);
892 EXPECT_EQ(1, jsAccessibilityManager->childTreeCallbackMap_.size());
893 EXPECT_EQ(callback0, jsAccessibilityManager->childTreeCallbackMap_[elementId0]);
894 jsAccessibilityManager->DeregisterAccessibilityChildTreeCallback(elementId0);
895 EXPECT_EQ(0, jsAccessibilityManager->childTreeCallbackMap_.size());
896 }
897
898 /**
899 * @tc.name: JsAccessibilityManager019
900 * @tc.desc: Test UIExtensionManager RegisterAccessibilitySAObserverCallback/DeregisterAccessibilitySAObserverCallback
901 * @tc.type: FUNC
902 */
903 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager019, TestSize.Level1)
904 {
905 /**
906 * @tc.steps: step1. construct JsAccessibilityManager
907 */
908 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
909 EXPECT_EQ(0, jsAccessibilityManager->componentSACallbackMap_.size());
910
911 /**
912 * @tc.steps: step2. test RegisterAccessibilitySAObserverCallback
913 */
914 int64_t elementId0 = 0;
915 auto callback0 = std::make_shared<MockAccessibilitySAObserverCallback>(0);
916 jsAccessibilityManager->RegisterAccessibilitySAObserverCallback(elementId0, callback0);
917 EXPECT_EQ(1, jsAccessibilityManager->componentSACallbackMap_.size());
918 EXPECT_EQ(callback0, jsAccessibilityManager->componentSACallbackMap_[elementId0]);
919 int64_t elementId1 = 1;
920 auto callback1 = std::make_shared<MockAccessibilitySAObserverCallback>(1);
921 jsAccessibilityManager->RegisterAccessibilitySAObserverCallback(elementId1, callback1);
922 EXPECT_EQ(2, jsAccessibilityManager->componentSACallbackMap_.size());
923 EXPECT_EQ(callback1, jsAccessibilityManager->componentSACallbackMap_[elementId1]);
924
925 /**
926 * @tc.steps: step3. test DeregisterAccessibilitySAObserverCallback
927 */
928 jsAccessibilityManager->DeregisterAccessibilitySAObserverCallback(elementId1);
929 EXPECT_EQ(1, jsAccessibilityManager->componentSACallbackMap_.size());
930 EXPECT_EQ(callback0, jsAccessibilityManager->componentSACallbackMap_[elementId0]);
931 jsAccessibilityManager->DeregisterAccessibilitySAObserverCallback(elementId0);
932 EXPECT_EQ(0, jsAccessibilityManager->componentSACallbackMap_.size());
933 }
934 /**
935 * @tc.name: UpdateWindowInfo001
936 * @tc.desc: UpdateWindowInfo
937 * @tc.type: FUNC
938 */
939 HWTEST_F(JsAccessibilityManagerTest, UpdateWindowInfo001, TestSize.Level1)
940 {
941 /**
942 * @tc.steps: step1. construct jsAccessibilityManager
943 */
944 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
945 ASSERT_NE(jsAccessibilityManager, nullptr);
946 auto pipelineContext = MockContainer::Current()->GetPipelineContext();
947 ASSERT_NE(pipelineContext, nullptr);
948 jsAccessibilityManager->context_ = pipelineContext;
949
950 /**
951 * @tc.steps: step2. construct windowInfo
952 */
953 AccessibilityWindowInfo windowInfo;
954 windowInfo.left = 10;
955 windowInfo.top = 10;
956 windowInfo.scaleX = 1.0f;
957 windowInfo.scaleY = 1.0f;
958
959 /**
960 * @tc.steps: step3. call and test UpdateWindowInfo method
961 */
962 jsAccessibilityManager->UpdateWindowInfo(windowInfo, pipelineContext);
963 EXPECT_EQ(windowInfo.left, 10);
964 EXPECT_EQ(windowInfo.top, 10);
965 EXPECT_EQ(windowInfo.scaleX, 1.0f);
966 EXPECT_EQ(windowInfo.scaleY, 1.0f);
967
968 auto container = Platform::AceContainer::GetContainer(pipelineContext->GetInstanceId());
969 ASSERT_NE(container, nullptr);
970 container->SetSingleHandTransform(Platform::SingleHandTransform(100.0f, 200.0f, 0.7f, 0.6f));
971
972 jsAccessibilityManager->UpdateWindowInfo(windowInfo, pipelineContext);
973 EXPECT_EQ(windowInfo.left, 107.0f);
974 EXPECT_EQ(windowInfo.top, 206.0f);
975 EXPECT_EQ(windowInfo.scaleX, 0.7f);
976 EXPECT_EQ(windowInfo.scaleY, 0.6f);
977 }
978
979 /**
980 * @tc.name: GenerateWindowInfo001
981 * @tc.desc: GenerateWindowInfo
982 * @tc.type: FUNC
983 */
984 HWTEST_F(JsAccessibilityManagerTest, GenerateWindowInfo001, TestSize.Level1)
985 {
986 /**
987 * @tc.steps: step1. construct jsAccessibilityManager
988 */
989 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
990 ASSERT_NE(jsAccessibilityManager, nullptr);
991
992 /**
993 * @tc.steps: step3. call and test GenerateWindowInfo method
994 */
995 auto windowInfo = jsAccessibilityManager->GenerateWindowInfo(nullptr, nullptr);
996 EXPECT_EQ(windowInfo.left, 0);
997 EXPECT_EQ(windowInfo.top, 0);
998 EXPECT_EQ(windowInfo.scaleX, 1.0f);
999 EXPECT_EQ(windowInfo.scaleY, 1.0f);
1000
1001 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
1002 AceType::MakeRefPtr<Pattern>(), false);
1003 windowInfo = jsAccessibilityManager->GenerateWindowInfo(frameNode, nullptr);
1004
1005 auto pipelineContext = MockContainer::Current()->GetPipelineContext();
1006 ASSERT_NE(pipelineContext, nullptr);
1007 jsAccessibilityManager->context_ = pipelineContext;
1008 auto container = Platform::AceContainer::GetContainer(pipelineContext->GetInstanceId());
1009 ASSERT_NE(container, nullptr);
1010 auto singleHandTransform = container->GetSingleHandTransform();
1011 container->SetSingleHandTransform(Platform::SingleHandTransform(0.0f, 0.0f, 1.0f, 1.0f));
1012
1013 auto context = NG::PipelineContext::GetCurrentContext();
1014 ASSERT_NE(context, nullptr);
1015 jsAccessibilityManager->getParentRectHandler_ = nullptr;
1016 jsAccessibilityManager->getParentRectHandlerNew_ = nullptr;
1017 windowInfo = jsAccessibilityManager->GenerateWindowInfo(nullptr, context);
1018
1019 EXPECT_EQ(windowInfo.left, 0);
1020 EXPECT_EQ(windowInfo.top, 0);
1021 EXPECT_EQ(windowInfo.scaleX, 1.0f);
1022 EXPECT_EQ(windowInfo.scaleY, 1.0f);
1023
1024 /**
1025 * @tc.steps: step4. mock IsReentrantLimit, and then test GenerateWindowInfo method again
1026 */
1027 jsAccessibilityManager->RegisterGetParentRectHandler();
1028 EXPECT_NE(jsAccessibilityManager->getParentRectHandlerNew_, nullptr);
1029 jsAccessibilityManager->SetReentrantLimit(true);
1030 windowInfo = jsAccessibilityManager->GenerateWindowInfo(frameNode, context);
1031
1032 EXPECT_EQ(windowInfo.left, 0);
1033 EXPECT_EQ(windowInfo.top, 0);
1034 EXPECT_EQ(windowInfo.scaleX, 1.0f);
1035 EXPECT_EQ(windowInfo.scaleY, 1.0f);
1036
1037 /**
1038 * @tc.steps: step5. mock SingleHandTransform, and then test GenerateWindowInfo method again
1039 */
1040 container->SetSingleHandTransform(Platform::SingleHandTransform(100.0f, 200.0f, 0.7f, 0.7f));
1041
1042 jsAccessibilityManager->UpdateWindowInfo(windowInfo, pipelineContext);
1043 EXPECT_EQ(windowInfo.left, 100.0f);
1044 EXPECT_EQ(windowInfo.top, 200.0f);
1045 EXPECT_EQ(windowInfo.scaleX, 0.7f);
1046 EXPECT_EQ(windowInfo.scaleY, 0.7f);
1047 }
1048
1049 /**
1050 * @tc.name: SingleHandTransformTest001
1051 * @tc.desc: SetSingleHandTransform & GetSingleHandTransform
1052 * @tc.type: FUNC
1053 */
1054 HWTEST_F(JsAccessibilityManagerTest, SingleHandTransformTest001, TestSize.Level1)
1055 {
1056 /**
1057 * @tc.steps: step1. construct AceContainer
1058 */
1059 auto pipelineContext = MockContainer::Current()->GetPipelineContext();
1060 ASSERT_NE(pipelineContext, nullptr);
1061 auto container = Platform::AceContainer::GetContainer(pipelineContext->GetInstanceId());
1062 ASSERT_NE(container, nullptr);
1063 container->uIContentType_ = UIContentType::PREVIEW_UI_EXTENSION;
1064
1065 /**
1066 * @tc.steps: step2. test SetSingleHandTransform & GetSingleHandTransform
1067 */
1068 container->SetSingleHandTransform(Platform::SingleHandTransform(100.0f, 200.0f, 0.7f, 0.6f));
1069 auto singleHandTransform = container->GetSingleHandTransform();
1070 EXPECT_EQ(singleHandTransform.x_, 100.0f);
1071 EXPECT_EQ(singleHandTransform.y_, 200.0f);
1072 EXPECT_EQ(singleHandTransform.scaleX_, 0.7f);
1073 EXPECT_EQ(singleHandTransform.scaleY_, 0.6f);
1074 }
1075
1076 /**
1077 * @tc.name: JsAccessibilityManager020
1078 * @tc.desc: dump event test DumpProcessEventParameters
1079 * @tc.type: FUNC
1080 */
1081 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager020, TestSize.Level1)
1082 {
1083 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1084 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1085 auto context = NG::PipelineContext::GetCurrentContext();
1086 jsAccessibilityManager->SetPipelineContext(context);
1087 jsAccessibilityManager->Register(true);
1088 bool ret;
1089 AccessibilityEvent accessibilityEvent;
1090 accessibilityEvent.nodeId = 1;
1091 accessibilityEvent.windowChangeTypes = WindowUpdateType::WINDOW_UPDATE_ACTIVE;
1092 accessibilityEvent.type = AccessibilityEventType::PAGE_CHANGE;
1093 // 1. parameter stackNodeId
1094 std::vector<std::string> params;
1095 params.push_back("-inspector");
1096 params.push_back("1");
1097
1098 params.push_back("--stackNodeId");
1099
1100 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1101 EXPECT_EQ(ret, false);
1102
1103 int64_t testStackId = 2;
1104 params.push_back(std::to_string(testStackId));
1105 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1106 EXPECT_EQ(ret, true);
1107 EXPECT_EQ(accessibilityEvent.stackNodeId, testStackId);
1108
1109 // 2. parameter beforeText
1110 params.push_back("--beforeText");
1111 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1112 EXPECT_EQ(ret, false);
1113
1114 std::string beforeText = "teststr1";
1115 params.push_back(beforeText);
1116 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1117 EXPECT_EQ(ret, true);
1118 EXPECT_EQ(accessibilityEvent.beforeText, beforeText);
1119 }
1120
1121 /**
1122 * @tc.name: JsAccessibilityManager020
1123 * @tc.desc: dump event test DumpProcessEventParameters
1124 * @tc.type: FUNC
1125 */
1126 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager0201, TestSize.Level1)
1127 {
1128 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1129 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1130 auto context = NG::PipelineContext::GetCurrentContext();
1131 jsAccessibilityManager->SetPipelineContext(context);
1132 jsAccessibilityManager->Register(true);
1133 bool ret;
1134 AccessibilityEvent accessibilityEvent;
1135 accessibilityEvent.nodeId = 1;
1136 accessibilityEvent.windowChangeTypes = WindowUpdateType::WINDOW_UPDATE_ACTIVE;
1137 accessibilityEvent.type = AccessibilityEventType::PAGE_CHANGE;
1138 std::vector<std::string> params;
1139 params.push_back("-inspector");
1140 params.push_back("1");
1141
1142 // 3. parameter latestContent
1143 params.push_back("--latestContent");
1144 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1145 EXPECT_EQ(ret, false);
1146
1147 std::string latestContent = "teststr2";
1148 params.push_back(latestContent);
1149 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1150 EXPECT_EQ(ret, true);
1151 EXPECT_EQ(accessibilityEvent.latestContent, latestContent);
1152
1153 // 4. parameter latestContent
1154 params.push_back("--textAnnounced");
1155 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1156 EXPECT_EQ(ret, false);
1157
1158 std::string textAnnounced = "teststr3";
1159 params.push_back(textAnnounced);
1160 ret = jsAccessibilityManager->DumpProcessEventParameters(accessibilityEvent, params);
1161 EXPECT_EQ(ret, true);
1162 EXPECT_EQ(accessibilityEvent.textAnnouncedForAccessibility, textAnnounced);
1163 }
1164
1165 /**
1166 * @tc.name: JsAccessibilityManager021
1167 * @tc.desc: dump event test DumpProcessEventParameters
1168 * @tc.type: FUNC
1169 */
1170 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager021, TestSize.Level1)
1171 {
1172 auto context = NG::PipelineContext::GetCurrentContext();
1173 CHECK_NULL_VOID(context);
1174 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1175 CHECK_NULL_VOID(frameNode);
1176 auto root = context->GetRootElement();
1177 CHECK_NULL_VOID(root);
1178 root->AddChild(frameNode);
1179
1180
1181 MockJsAccessibilityManager mockJsManger;
1182 mockJsManger.SetPipelineContext(context);
1183 mockJsManger.Register(true);
1184
1185 int64_t nodeId = frameNode->GetAccessibilityId();
1186 int32_t eventId = 2;
1187 // 1. check parameter fail
1188 std::vector<std::string> params;
1189 params.push_back("-inspector");
1190 params.push_back("1");
1191 params.push_back("--stackNodeId");
1192 EXPECT_CALL(mockJsManger, SendEventToAccessibilityWithNode(_, _, _))
1193 .Times(0);
1194
1195 mockJsManger.DumpSendEventTest(nodeId, eventId, params);
1196
1197 // 2. check parameter success
1198 int64_t testStackId = 2;
1199 params.push_back(std::to_string(testStackId));
1200
1201 EXPECT_CALL(mockJsManger, SendEventToAccessibilityWithNode(_, _, _))
1202 .Times(1);
1203
1204 mockJsManger.DumpSendEventTest(nodeId, eventId, params);
1205 }
1206
1207 /**
1208 * @tc.name: JsAccessibilityManager022
1209 * @tc.desc: dump event test OnDumpInfoNG
1210 * @tc.type: FUNC
1211 */
1212 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager022, TestSize.Level1)
1213 {
1214 auto context = NG::PipelineContext::GetCurrentContext();
1215 CHECK_NULL_VOID(context);
1216 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1217 CHECK_NULL_VOID(frameNode);
1218 auto root = context->GetRootElement();
1219 CHECK_NULL_VOID(root);
1220 root->AddChild(frameNode);
1221 MockJsAccessibilityManager mockJsManger;
1222 mockJsManger.SetPipelineContext(context);
1223 mockJsManger.Register(true);
1224
1225 std::vector<std::string> params;
1226
1227 // 1. dump event
1228 params.push_back("-inspector");
1229 params.push_back("--event-test");
1230 params.push_back(std::to_string(frameNode->GetAccessibilityId()).c_str());
1231 params.push_back("2");
1232
1233 EXPECT_CALL(mockJsManger, SendEventToAccessibilityWithNode(_, _, _))
1234 .Times(1);
1235 mockJsManger.OnDumpInfoNG(params, 1, false);
1236 }
1237
1238 /**
1239 * @tc.name: JsAccessibilityManager023
1240 * @tc.desc: UpdateAccessibilityElementInfo ScrollTriggerable
1241 * @tc.type: FUNC
1242 */
1243 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager023, TestSize.Level1)
1244 {
1245 /**
1246 * @tc.steps: step1. construct JsAccessibilityManager
1247 * @tc.desc: Create a FrameNode object and initialize the JsAccessibilityManager object.
1248 */
1249 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1250 CHECK_NULL_VOID(frameNode);
1251 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1252 Accessibility::AccessibilityElementInfo nodeInfo;
1253
1254 // Update information in nodeInfo and verify that its default scrollable is true
1255 jsAccessibilityManager->UpdateAccessibilityElementInfo(frameNode, nodeInfo);
1256 CHECK_NULL_VOID(jsAccessibilityManager);
1257 EXPECT_EQ(nodeInfo.GetAccessibilityScrollable(), true);
1258
1259 /**
1260 * @tc.steps: step2. Initialize accessibilityProperty and set ScrollTriggerable to false.
1261 * @tc.expected: The updated nodeInfo's ScrollTriggerable property should be false.
1262 */
1263 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
1264 CHECK_NULL_VOID(accessibilityProperty);
1265 accessibilityProperty->SetUserScrollTriggerable(false);
1266 jsAccessibilityManager->UpdateAccessibilityElementInfo(frameNode, nodeInfo);
1267 EXPECT_EQ(nodeInfo.GetAccessibilityScrollable(), false);
1268
1269 /**
1270 * @tc.steps: step3. Reset the ScrollTriggerable property of accessibilityProperty.
1271 * @tc.expected: The updated nodeInfo's ScrollTriggerable property should be true.
1272 */
1273 accessibilityProperty->ResetUserScrollTriggerable();
1274 jsAccessibilityManager->UpdateAccessibilityElementInfo(frameNode, nodeInfo);
1275 EXPECT_EQ(nodeInfo.GetAccessibilityScrollable(), true);
1276 }
1277
1278 class MockRenderContextTest : public RenderContext {
1279 public:
GetPaintRectWithoutTransform()1280 RectF GetPaintRectWithoutTransform() override
1281 {
1282 return *retf;
1283 }
1284 std::shared_ptr<RectF> retf;
1285 };
1286
1287 /**
1288 * @tc.name: FrameNodeAccessibilityVisible02
1289 * @tc.desc: Test the function accessibilityVisible
1290 * @tc.type: FUNC
1291 */
1292 HWTEST_F(JsAccessibilityManagerTest, FrameNodeAccessibilityVisible02, TestSize.Level1)
1293 {
1294 //@tc.steps: step1. create parent frameNode and set up its rect.
1295 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1296 CHECK_NULL_VOID(frameNode);
1297 EXPECT_NE(frameNode->pattern_, nullptr);
1298 frameNode->isActive_ = true;
1299 auto pipeline = frameNode->GetContext();
1300 auto parentRender = AceType::MakeRefPtr<MockRenderContextTest>();
1301 CHECK_NULL_VOID(parentRender);
1302 auto parentRec = std::make_shared<RectF>(10.0, 10.0, 10.0, 5.0);
1303 parentRender->retf = parentRec;
1304 frameNode->renderContext_ = parentRender;
1305 //@tc.steps: step2. create child frameNode and set up its rect.
1306 auto childNode = FrameNode::CreateFrameNode(
1307 "child", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1308 childNode->isActive_ = true;
1309 auto childRender = AceType::MakeRefPtr<MockRenderContextTest>();
1310 CHECK_NULL_VOID(childRender);
1311 auto childRec = std::make_shared<RectF>(10.0, 10.0, 10.0, 10.0);
1312 childRender->retf = childRec;
1313 childNode->renderContext_ = childRender;
1314 auto accessibilityProperty = childNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
1315 accessibilityProperty->SetAccessibilityNextFocusInspectorKey("test_inspector_id");
1316 //@tc.steps: step3. create next child frameNode and set up its rect.
1317 auto nextChildNode = FrameNode::CreateFrameNode(
1318 "child", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1319 nextChildNode->isActive_ = true;
1320 nextChildNode->UpdateInspectorId("test_inspector_id");
1321 auto nextChildAccessibilityId = nextChildNode->GetAccessibilityId();
1322 AccessibilitySystemAbilityClient::SetSplicElementIdTreeId(1, nextChildAccessibilityId);
1323 //@tc.steps: step4. add parent and child node to the pipeline context.
1324 auto context = NG::PipelineContext::GetCurrentContext();
1325 context->GetRootElement()->AddChild(frameNode);
1326 frameNode->AddChild(childNode);
1327 frameNode->AddChild(nextChildNode);
1328 //@tc.steps: step5. verify the child node's accessibilityVisible is true.
1329 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1330 CHECK_NULL_VOID(jsAccessibilityManager);
1331 jsAccessibilityManager->SetPipelineContext(context);
1332 jsAccessibilityManager->Register(true);
1333 RefPtr<NG::PipelineContext> ngPipeline;
1334 ngPipeline = AceType::DynamicCast<NG::PipelineContext>(pipeline);
1335 std::list<AccessibilityElementInfo> extensionElementInfos;
1336 jsAccessibilityManager->treeId_ = 1;
1337 jsAccessibilityManager->SearchElementInfoByAccessibilityIdNG(
1338 childNode->GetAccessibilityId(), 1, extensionElementInfos, ngPipeline, 1);
1339 for (auto& extensionElementInfo : extensionElementInfos) {
1340 if (childNode->GetAccessibilityId() == extensionElementInfo.GetAccessibilityId()) {
1341 EXPECT_TRUE(extensionElementInfo.GetAccessibilityVisible());
1342 EXPECT_EQ(extensionElementInfo.GetAccessibilityNextFocusId(), nextChildAccessibilityId);
1343 }
1344 }
1345 }
1346
1347 /**
1348 * @tc.name: FrameNodeAccessibilityVisible03
1349 * @tc.desc: Test searching root element info when elementId is -1
1350 * @tc.type: FUNC
1351 */
1352 HWTEST_F(JsAccessibilityManagerTest, FrameNodeAccessibilityVisible03, TestSize.Level1)
1353 {
1354 /**
1355 * @tc.steps: step1. create a pipeline context and set it as the current context.
1356 */
1357 auto context = NG::PipelineContext::GetCurrentContext();
1358
1359 /**
1360 * @tc.steps: step2. create an instance of JsAccessibilityManager and set the pipeline context.
1361 */
1362 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1363 CHECK_NULL_VOID(jsAccessibilityManager);
1364 jsAccessibilityManager->SetPipelineContext(context);
1365 jsAccessibilityManager->Register(true);
1366
1367 /**
1368 * @tc.steps: step3. call the function SearchElementInfoByAccessibilityIdNG with an invalid elementId.
1369 */
1370 std::list<AccessibilityElementInfo> infos;
1371 jsAccessibilityManager->SearchElementInfoByAccessibilityIdNG(-1, 1, infos, context, 0);
1372
1373 /**
1374 * @tc.steps: step4. verify that the infos list contains elements with specific properties.
1375 */
1376 EXPECT_FALSE(infos.empty());
1377 for (auto& info : infos) {
1378 EXPECT_FALSE(info.GetAccessibilityVisible());
1379 }
1380 }
1381
1382 /**
1383 * @tc.name: JsAccessibilityManager024
1384 * @tc.desc: RegisterGetParentRectHandler
1385 * @tc.type: FUNC
1386 */
1387 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager024, TestSize.Level1)
1388 {
1389 /**
1390 * @tc.steps: step1. construct JsAccessibilityManager
1391 */
1392 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1393 ASSERT_NE(jsAccessibilityManager, nullptr);
1394 /**
1395 * @tc.steps: step2. test RegisterGetParentRectHandler
1396 */
1397 jsAccessibilityManager->uecRectInfo_.isChanged = false;
1398 jsAccessibilityManager->RegisterGetParentRectHandler();
1399 EXPECT_NE(jsAccessibilityManager->getParentRectHandlerNew_, nullptr);
1400 }
1401
1402 /**
1403 * @tc.name: JsAccessibilityManager025
1404 * @tc.desc: GetTransformRectInfoRelativeToWindow
1405 * @tc.type: FUNC
1406 */
1407 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager025, TestSize.Level1)
1408 {
1409 /**
1410 * @tc.steps: step1. construct JsAccessibilityManager
1411 */
1412 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1413 auto context = NG::PipelineContext::GetCurrentContext();
1414 jsAccessibilityManager->SetPipelineContext(context);
1415 ASSERT_NE(jsAccessibilityManager, nullptr);
1416 auto frameNode = FrameNode::CreateFrameNode(
1417 "frameNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1418 ASSERT_NE(frameNode, nullptr);
1419 /**
1420 * @tc.steps: step2. test GetTransformRectInfoRelativeToWindow
1421 */
1422 auto rectInfo = jsAccessibilityManager->GetTransformRectInfoRelativeToWindow(frameNode, context);
1423 EXPECT_EQ(rectInfo.left, 100);
1424 EXPECT_EQ(rectInfo.top, 200);
1425 }
1426
1427 /**
1428 * @tc.name: JsAccessibilityManager026
1429 * @tc.desc: GetTransformRectInfoRelativeToWindow
1430 * @tc.type: FUNC
1431 */
1432 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager026, TestSize.Level1) {
1433 /**
1434 * @tc.steps: step1. construct JsAccessibilityManager
1435 */
1436 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1437 auto context = NG::PipelineContext::GetCurrentContext();
1438 jsAccessibilityManager->SetPipelineContext(context);
1439 ASSERT_NE(jsAccessibilityManager, nullptr);
1440
1441 auto result = jsAccessibilityManager->GetTransformRectInfoRelativeToWindow(nullptr, context);
1442 // Verify that the result is default constructed when node is null
1443 EXPECT_EQ(result.left, 0);
1444 EXPECT_EQ(result.top, 0);
1445 EXPECT_EQ(result.scaleX, 1.0f); // Assuming default scaleX is 1.0
1446 EXPECT_EQ(result.scaleY, 1.0f); // Assuming default scaleY is 1.0
1447 }
1448
1449 /**
1450 * @tc.name: JsAccessibilityManager027
1451 * @tc.desc: GetTransformRectInfoRelativeToWindow
1452 * @tc.type: FUNC
1453 */
1454 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager027, TestSize.Level1) {
1455 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1456 auto context = NG::PipelineContext::GetCurrentContext();
1457 jsAccessibilityManager->SetPipelineContext(context);
1458 ASSERT_NE(jsAccessibilityManager, nullptr);
1459 auto frameNode = FrameNode::CreateFrameNode(
1460 "frameNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1461 ASSERT_NE(frameNode, nullptr);
1462
1463 auto result = jsAccessibilityManager->GetTransformRectInfoRelativeToWindow(frameNode, nullptr);
1464
1465 // Verify that the result is default constructed when context is null
1466 EXPECT_EQ(result.left, 0);
1467 EXPECT_EQ(result.top, 0);
1468 EXPECT_EQ(result.scaleX, 1.0f);
1469 EXPECT_EQ(result.scaleY, 1.0f);
1470 }
1471
1472 /**
1473 * @tc.name: JsAccessibilityManager028
1474 * @tc.desc: GetPagePathInPageNodes
1475 * @tc.type: FUNC
1476 */
1477 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager028, TestSize.Level1)
1478 {
1479 /**
1480 * @tc.steps: step1. create jsAccessibilityManager and create test data.
1481 */
1482 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1483 auto frameNode1 = FrameNode::CreateFrameNode(
1484 "frameNode1", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1485 frameNode1->SetHostPageId(1);
1486 auto frameNode2 = FrameNode::CreateFrameNode(
1487 "frameNode2", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1488 frameNode2->SetHostPageId(2);
1489 std::vector<RefPtr<NG::FrameNode>> pageNodes = {frameNode1, frameNode2};
1490 /**
1491 * @tc.steps: step2. test Empty pagePaths
1492 */
1493 std::vector<std::string> pagePaths = {};
1494 EXPECT_EQ(jsAccessibilityManager->GetPagePathInPageNodes(1, pageNodes, pagePaths),
1495 jsAccessibilityManager->GetPagePath());
1496 /**
1497 * @tc.steps: step3. test Mismatched sizes of pageNodes and pagePaths
1498 */
1499 pagePaths = {"path1"};
1500 EXPECT_EQ(jsAccessibilityManager->GetPagePathInPageNodes(1, pageNodes, pagePaths),
1501 jsAccessibilityManager->GetPagePath());
1502 /**
1503 * @tc.steps: step4. test PageId not found in pageNodes
1504 */
1505 pagePaths = {"path1", "path2"};
1506 EXPECT_EQ(jsAccessibilityManager->GetPagePathInPageNodes(3, pageNodes, pagePaths),
1507 jsAccessibilityManager->GetPagePath());
1508 /**
1509 * @tc.steps: step5. test PageId found in pageNodes
1510 */
1511 pagePaths = {"path1", "path2"};
1512 EXPECT_EQ(jsAccessibilityManager->GetPagePathInPageNodes(2, pageNodes, pagePaths), "path2");
1513 }
1514
1515 /**
1516 * @tc.name: JsAccessibilityManager029
1517 * @tc.desc: GetCurrentWindowPages
1518 * @tc.type: FUNC
1519 */
1520 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager029, TestSize.Level1)
1521 {
1522 /**
1523 * @tc.steps: step1. create jsAccessibilityManager and create test data.
1524 */
1525 auto stageNode = FrameNode::CreateFrameNode(
1526 V2::STAGE_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1527 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1528 std::vector<RefPtr<FrameNode>> pageNodes;
1529 std::vector<std::string> pagePaths;
1530 auto context = MockPipelineContext::GetCurrentContext();
1531 RefPtr<MockStageManager> stageManager = AceType::MakeRefPtr<MockStageManager>(stageNode);
1532 auto stageManagerBackup = context->stageManager_;
1533 context->stageManager_ = stageManager;
1534 ASSERT_NE(context->stageManager_, nullptr);
1535
1536 auto frameNode1 = FrameNode::CreateFrameNode(
1537 "frameNode1", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1538 frameNode1->SetHostPageId(1);
1539 auto frameNode2 = FrameNode::CreateFrameNode(
1540 "frameNode2", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1541 frameNode2->SetHostPageId(2);
1542 auto frameNode3 = FrameNode::CreateFrameNode(
1543 "frameNode3", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
1544 frameNode3->SetHostPageId(3);
1545 /**
1546 * @tc.steps: step2. test GetCurrentWindowPages get data empty
1547 */
1548 EXPECT_CALL(*stageManager, IsSplitMode()).Times(2).WillRepeatedly(Return(true));
1549 EXPECT_CALL(*stageManager, GetTopPagesWithTransition()).Times(2)
1550 .WillRepeatedly(Return(std::vector<RefPtr<FrameNode>>{}));
1551 jsAccessibilityManager->GetCurrentWindowPages(context, pageNodes, pagePaths);
1552 ASSERT_EQ(pageNodes.size(), 0);
1553 ASSERT_EQ(pagePaths.size(), 0);
1554
1555 /**
1556 * @tc.steps: step3. test GetCurrentWindowPages get data size 2
1557 */
1558 EXPECT_CALL(*stageManager, GetTopPagesWithTransition()).Times(2)
1559 .WillRepeatedly(Return(std::vector<RefPtr<FrameNode>>{frameNode1, frameNode2}));
1560 jsAccessibilityManager->GetCurrentWindowPages(context, pageNodes, pagePaths);
1561 ASSERT_EQ(pageNodes.size(), 2);
1562 ASSERT_EQ(pagePaths.size(), 2);
1563
1564 /**
1565 * @tc.steps: step4. test GetCurrentWindowPages with IsSplitMode false
1566 */
1567 EXPECT_CALL(*stageManager, IsSplitMode()).WillOnce(Return(false));
1568 EXPECT_CALL(*stageManager, GetLastPageWithTransition()).WillOnce(Return(frameNode3));
1569 jsAccessibilityManager->GetCurrentWindowPages(context, pageNodes, pagePaths);
1570 ASSERT_EQ(pageNodes.size(), 3);
1571 context->stageManager_ = stageManagerBackup;
1572 }
1573
1574 /**
1575 * @tc.name: JsAccessibilityManager030
1576 * @tc.desc: IsEventIgnoredByWorkMode
1577 * @tc.type: FUNC
1578 */
1579 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager030, TestSize.Level1)
1580 {
1581 /**
1582 * @tc.steps: step1. create jsAccessibilityManager and create test data.
1583 */
1584 auto context = NG::PipelineContext::GetCurrentContext();
1585 MockJsAccessibilityManager mockJsManger;
1586 mockJsManger.SetPipelineContext(context);
1587 mockJsManger.Register(true);
1588
1589 AccessibilityEvent event;
1590 event.nodeId = 1;
1591 AccessibilityWorkMode accessibilityWorkMode;
1592 accessibilityWorkMode.isTouchExplorationEnabled = false;
1593 /**
1594 * @tc.steps: step2. test IsEventIgnoredByWorkMode return true
1595 */
1596 event.type = AccessibilityEventType::FOCUS;
1597 EXPECT_CALL(mockJsManger, GenerateAccessibilityWorkMode())
1598 .WillRepeatedly(Return(accessibilityWorkMode));
1599 EXPECT_TRUE(mockJsManger.IsEventIgnoredByWorkMode(event));
1600
1601 event.type = AccessibilityEventType::ELEMENT_INFO_CHANGE;
1602 EXPECT_TRUE(mockJsManger.IsEventIgnoredByWorkMode(event));
1603
1604 event.type = AccessibilityEventType::TEXT_CHANGE;
1605 EXPECT_TRUE(mockJsManger.IsEventIgnoredByWorkMode(event));
1606
1607 /**
1608 * @tc.steps: step3. test IsEventIgnoredByWorkMode return false
1609 */
1610 event.type = AccessibilityEventType::CLICK;
1611 EXPECT_FALSE(mockJsManger.IsEventIgnoredByWorkMode(event));
1612
1613 accessibilityWorkMode.isTouchExplorationEnabled = true;
1614 EXPECT_CALL(mockJsManger, GenerateAccessibilityWorkMode())
1615 .WillOnce(Return(accessibilityWorkMode));
1616 EXPECT_FALSE(mockJsManger.IsEventIgnoredByWorkMode(event));
1617 }
1618
1619 /**
1620 * @tc.name: ConvertActionTypeToBoolen001
1621 * @tc.desc: ConvertActionTypeToBoolen
1622 * @tc.type: FUNC
1623 */
1624 HWTEST_F(JsAccessibilityManagerTest, ConvertActionTypeToBoolen001, TestSize.Level1)
1625 {
1626 /**
1627 * @tc.steps: step1. construct JsAccessibilityManager
1628 */
1629 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
1630 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1631 auto context = NG::PipelineContext::GetCurrentContext();
1632 int64_t elementId = 0;
1633 auto eventHub = frameNode->GetOrCreateEventHub<NG::EventHub>();
1634 ASSERT_NE(eventHub, nullptr);
1635 eventHub->GetOrCreateGestureEventHub();
1636 auto gesture = eventHub->GetGestureEventHub();
1637 ASSERT_NE(gesture, nullptr);
1638 std::string nodeName = "Click";
1639 frameNode->SetNodeName(nodeName);
1640 std::map<std::string, std::string> actionArguments;
1641 /**
1642 * @tc.steps: step2. test do without any willClick or didClick, expect return nodeName Click
1643 */
1644 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1645 frameNode, elementId, context, actionArguments);
1646 EXPECT_EQ(frameNode->GetNodeName(), nodeName);
1647 /**
1648 * @tc.steps: step3. test do with willClick or didClick, expect return nodeName WillClick_Click_DidClick
1649 */
1650 NG::UIObserverHandler::WillClickHandleFunc willClickHandleFunc = [](
1651 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80202( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1652 const RefPtr<FrameNode>& frameNode) -> void {
1653 if (frameNode) {
1654 std::string willClick = "WillClick_" + frameNode->GetNodeName();
1655 frameNode->SetNodeName(willClick);
1656 }
1657 };
1658 ASSERT_NE(willClickHandleFunc, nullptr);
1659 NG::UIObserverHandler::GetInstance().SetWillClickFunc(willClickHandleFunc);
1660
1661 NG::UIObserverHandler::DidClickHandleFunc didClickHandleFunc = [](
1662 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80302( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1663 const RefPtr<FrameNode>& frameNode) -> void {
1664 if (frameNode) {
1665 std::string didClick = frameNode->GetNodeName() + "_DidClick";
1666 frameNode->SetNodeName(didClick);
1667 }
1668 };
1669 ASSERT_NE(didClickHandleFunc, nullptr);
1670 NG::UIObserverHandler::GetInstance().SetDidClickFunc(didClickHandleFunc);
1671 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1672 frameNode, elementId, context, actionArguments);
1673 EXPECT_EQ(frameNode->GetNodeName(), "WillClick_Click_DidClick");
1674 }
1675
1676 /**
1677 * @tc.name: ConvertActionTypeToBoolen002
1678 * @tc.desc: ConvertActionTypeToBoolen
1679 * @tc.type: FUNC
1680 */
1681 HWTEST_F(JsAccessibilityManagerTest, ConvertActionTypeToBoolen002, TestSize.Level1)
1682 {
1683 /**
1684 * @tc.steps: step1. construct JsAccessibilityManager
1685 */
1686 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
1687 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1688 auto context = NG::PipelineContext::GetCurrentContext();
1689 int64_t elementId = 0;
1690 auto eventHub = frameNode->GetOrCreateEventHub<NG::EventHub>();
1691 ASSERT_NE(eventHub, nullptr);
1692 eventHub->GetOrCreateGestureEventHub();
1693 auto gesture = eventHub->GetGestureEventHub();
1694 ASSERT_NE(gesture, nullptr);
1695 std::string nodeName = "Click";
1696 frameNode->SetNodeName(nodeName);
1697 std::map<std::string, std::string> actionArguments;
1698 /**
1699 * @tc.steps: step2. test only with willClick, expect return nodeName WillClick_Click
1700 */
1701 NG::UIObserverHandler::WillClickHandleFunc willClickHandleFunc = [](
1702 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80402( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1703 const RefPtr<FrameNode>& frameNode) -> void {
1704 if (frameNode) {
1705 std::string willClick = "WillClick_" + frameNode->GetNodeName();
1706 frameNode->SetNodeName(willClick);
1707 }
1708 };
1709 ASSERT_NE(willClickHandleFunc, nullptr);
1710 NG::UIObserverHandler::GetInstance().SetWillClickFunc(willClickHandleFunc);
1711
1712 NG::UIObserverHandler::DidClickHandleFunc didClickHandleFunc = [](
1713 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80502( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1714 const RefPtr<FrameNode>& frameNode) -> void {};
1715 ASSERT_NE(didClickHandleFunc, nullptr);
1716 NG::UIObserverHandler::GetInstance().SetDidClickFunc(didClickHandleFunc);
1717 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1718 frameNode, elementId, context, actionArguments);
1719 EXPECT_EQ(frameNode->GetNodeName(), "WillClick_Click");
1720 }
1721
1722 /**
1723 * @tc.name: ConvertActionTypeToBoolen003
1724 * @tc.desc: ConvertActionTypeToBoolen
1725 * @tc.type: FUNC
1726 */
1727 HWTEST_F(JsAccessibilityManagerTest, ConvertActionTypeToBoolen003, TestSize.Level1)
1728 {
1729 /**
1730 * @tc.steps: step1. construct JsAccessibilityManager
1731 */
1732 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
1733 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1734 auto context = NG::PipelineContext::GetCurrentContext();
1735 int64_t elementId = 0;
1736 auto eventHub = frameNode->GetOrCreateEventHub<NG::EventHub>();
1737 ASSERT_NE(eventHub, nullptr);
1738 eventHub->GetOrCreateGestureEventHub();
1739 auto gesture = eventHub->GetGestureEventHub();
1740 ASSERT_NE(gesture, nullptr);
1741 std::string nodeName = "Click";
1742 frameNode->SetNodeName(nodeName);
1743 std::map<std::string, std::string> actionArguments;
1744 /**
1745 * @tc.steps: step3. test do with didClick, expect return nodeName Click_DidClick
1746 */
1747 NG::UIObserverHandler::WillClickHandleFunc willClickHandleFunc = [](
1748 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80602( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1749 const RefPtr<FrameNode>& frameNode) -> void {};
1750 ASSERT_NE(willClickHandleFunc, nullptr);
1751 NG::UIObserverHandler::GetInstance().SetWillClickFunc(willClickHandleFunc);
1752
1753 NG::UIObserverHandler::DidClickHandleFunc didClickHandleFunc = [](
1754 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80702( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1755 const RefPtr<FrameNode>& frameNode) -> void {
1756 if (frameNode) {
1757 std::string didClick = frameNode->GetNodeName() + "_DidClick";
1758 frameNode->SetNodeName(didClick);
1759 }
1760 };
1761 ASSERT_NE(didClickHandleFunc, nullptr);
1762 NG::UIObserverHandler::GetInstance().SetDidClickFunc(didClickHandleFunc);
1763 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1764 frameNode, elementId, context, actionArguments);
1765 EXPECT_EQ(frameNode->GetNodeName(), "Click_DidClick");
1766 NG::UIObserverHandler::GetInstance().SetWillClickFunc(nullptr);
1767 NG::UIObserverHandler::GetInstance().SetDidClickFunc(nullptr);
1768 }
1769
1770 /**
1771 * @tc.name: ConvertActionTypeToBoolen004
1772 * @tc.desc: Test clear currentFocusNodeId when elementId equals to currentFocusNodeId
1773 * @tc.type: FUNC
1774 */
1775 HWTEST_F(JsAccessibilityManagerTest, ConvertActionTypeToBoolen004, TestSize.Level1)
1776 {
1777 int64_t elementId = 2LL;
1778 auto context = NG::PipelineContext::GetCurrentContext();
1779 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1780 ASSERT_NE(frameNode, nullptr);
1781 ASSERT_NE(frameNode->GetRenderContext(), nullptr);
1782
1783 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1784 ASSERT_NE(jsAccessibilityManager, nullptr);
1785 jsAccessibilityManager->currentFocusNodeId_ = 2LL;
1786 jsAccessibilityManager->currentFocusVirtualNodeParentId_ = 3LL;
1787 std::map<std::string, std::string> actionArguments;
1788 bool ret = jsAccessibilityManager->ConvertActionTypeToBoolen(
1789 ActionType::ACCESSIBILITY_ACTION_CLEAR_ACCESSIBILITY_FOCUS, frameNode, elementId, context, actionArguments);
1790 EXPECT_EQ(jsAccessibilityManager->currentFocusNodeId_, -1LL);
1791 EXPECT_EQ(jsAccessibilityManager->currentFocusVirtualNodeParentId_, 3LL);
1792 EXPECT_TRUE(ret);
1793 }
1794
1795 /**
1796 * @tc.name: ConvertActionTypeToBoolen005
1797 * @tc.desc: Test clear currentFocusNodeId when elementId not equals to currentFocusNodeId
1798 * @tc.type: FUNC
1799 */
1800 HWTEST_F(JsAccessibilityManagerTest, ConvertActionTypeToBoolen005, TestSize.Level1)
1801 {
1802 int64_t elementId = 6LL;
1803 auto context = NG::PipelineContext::GetCurrentContext();
1804 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1805 ASSERT_NE(frameNode, nullptr);
1806 ASSERT_NE(frameNode->GetRenderContext(), nullptr);
1807
1808 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1809 ASSERT_NE(jsAccessibilityManager, nullptr);
1810 jsAccessibilityManager->currentFocusNodeId_ = 4LL;
1811 jsAccessibilityManager->currentFocusVirtualNodeParentId_ = 5LL;
1812 std::map<std::string, std::string> actionArguments;
1813 bool ret = jsAccessibilityManager->ConvertActionTypeToBoolen(
1814 ActionType::ACCESSIBILITY_ACTION_CLEAR_ACCESSIBILITY_FOCUS, frameNode, elementId, context, actionArguments);
1815 EXPECT_EQ(jsAccessibilityManager->currentFocusNodeId_, 4LL);
1816 EXPECT_EQ(jsAccessibilityManager->currentFocusVirtualNodeParentId_, 5LL);
1817 EXPECT_FALSE(ret);
1818 }
1819
1820 /**
1821 * @tc.name: ConvertActionTypeToBoolen006
1822 * @tc.desc: Test focusing action
1823 * @tc.type: FUNC
1824 */
1825 HWTEST_F(JsAccessibilityManagerTest, ConvertActionTypeToBoolen006, TestSize.Level1)
1826 {
1827 /**
1828 * @tc.steps: step1. construct JsAccessibilityManager
1829 */
1830 int64_t elementId = 0;
1831 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
1832 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1833 auto context = NG::PipelineContext::GetCurrentContext();
1834 auto eventHub = frameNode->GetOrCreateEventHub<NG::EventHub>();
1835 ASSERT_NE(eventHub, nullptr);
1836 eventHub->GetOrCreateGestureEventHub();
1837 auto gesture = eventHub->GetGestureEventHub();
1838 ASSERT_NE(gesture, nullptr);
1839 std::string nodeName = "Click";
1840 frameNode->SetNodeName(nodeName);
1841 std::map<std::string, std::string> actionArguments;
1842 /**
1843 * @tc.steps: step2. test with nothing, expect return nodeName Click
1844 */
1845 NG::UIObserverHandler::WillClickHandleFunc willClickHandleFunc = [](
1846 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80802( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1847 const RefPtr<FrameNode>& frameNode) -> void {};
1848 ASSERT_NE(willClickHandleFunc, nullptr);
1849 NG::UIObserverHandler::GetInstance().SetWillClickFunc(willClickHandleFunc);
1850
1851 NG::UIObserverHandler::DidClickHandleFunc didClickHandleFunc = [](
1852 AbilityContextInfo&, const GestureEvent&, const ClickInfo&,
__anon15955db80902( AbilityContextInfo&, const GestureEvent&, const ClickInfo&, const RefPtr<FrameNode>& frameNode) 1853 const RefPtr<FrameNode>& frameNode) -> void {};
1854 ASSERT_NE(didClickHandleFunc, nullptr);
1855 NG::UIObserverHandler::GetInstance().SetDidClickFunc(didClickHandleFunc);
1856 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1857 frameNode, elementId, context, actionArguments);
1858 EXPECT_EQ(frameNode->GetNodeName(), "Click");
1859 NG::UIObserverHandler::GetInstance().SetWillClickFunc(nullptr);
1860 NG::UIObserverHandler::GetInstance().SetDidClickFunc(nullptr);
1861 }
1862
1863 /**
1864 * @tc.name: HandleClickBySecComp001
1865 * @tc.desc: HandleClickBySecComp
1866 * @tc.type: FUNC
1867 */
1868 HWTEST_F(JsAccessibilityManagerTest, HandleClickBySecComp001, TestSize.Level1)
1869 {
1870 /**
1871 * @tc.steps: step1. construct JsAccessibilityManager
1872 */
1873 int64_t elementId = 0;
1874 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
1875 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1876 auto context = NG::PipelineContext::GetCurrentContext();
1877 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
1878 ASSERT_NE(accessibilityProperty, nullptr);
1879
1880 std::map<std::string, std::string> actionArguments;
1881
1882 /**
1883 * @tc.steps: step2. test only with willClick, expect return nodeName WillClick_Click
1884 */
1885 bool processFlag1 = false;
1886 bool processFlag2 = false;
1887 SecCompEnhanceEvent testEvent;
1888 std::string hmacTest = "test";
1889 uint64_t timeTest = 123456;
1890 actionArguments[ACTION_ARGU_CLICK_ENHANCE_DATA] = hmacTest;
1891 actionArguments[ACTION_ARGU_CLICK_TIMESTAMP] = std::to_string(timeTest);
1892
1893 accessibilityProperty->SetAccessibilityActionIntercept (
__anon15955db80a02(AccessibilityInterfaceAction accessibilityInterfaceAction) 1894 [&] (AccessibilityInterfaceAction accessibilityInterfaceAction) {
1895 processFlag2 = true;
1896 return AccessibilityActionInterceptResult::ACTION_INTERCEPT;
1897 }
1898 );
1899
1900 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1901 frameNode, elementId, context, actionArguments);
1902 EXPECT_EQ(processFlag1, false);
1903 EXPECT_EQ(processFlag2, true);
1904
1905 processFlag2 = false;
1906 accessibilityProperty->SetSecurityClickAction (
__anon15955db80b02(const SecCompEnhanceEvent& event) 1907 [&] (const SecCompEnhanceEvent& event) {
1908 processFlag1 = true;
1909 testEvent = event;
1910 }
1911 );
1912
1913 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1914 frameNode, elementId, context, actionArguments);
1915 EXPECT_EQ(processFlag1, true);
1916 EXPECT_EQ(processFlag2, false);
1917 }
1918
1919 /**
1920 * @tc.name: HandleClickBySecComp002
1921 * @tc.desc: HandleClickBySecComp
1922 * @tc.type: FUNC
1923 */
1924 HWTEST_F(JsAccessibilityManagerTest, HandleClickBySecComp002, TestSize.Level1)
1925 {
1926 /**
1927 * @tc.steps: step1. construct JsAccessibilityManager
1928 */
1929 int64_t elementId = 0;
1930 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
1931 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
1932 auto context = NG::PipelineContext::GetCurrentContext();
1933 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
1934 ASSERT_NE(accessibilityProperty, nullptr);
1935
1936 std::map<std::string, std::string> actionArguments;
1937
1938 /**
1939 * @tc.steps: step2. test only with willClick, expect return nodeName WillClick_Click
1940 */
1941 bool processFlag1 = false;
1942 bool processFlag2 = false;
1943 SecCompEnhanceEvent testEvent;
1944 std::string hmacTest = "test";
1945 uint64_t timeTest = 123456;
1946 actionArguments[ACTION_ARGU_CLICK_ENHANCE_DATA] = hmacTest;
1947 actionArguments[ACTION_ARGU_CLICK_TIMESTAMP] = std::to_string(timeTest);
1948
1949 accessibilityProperty->SetAccessibilityActionIntercept (
__anon15955db80c02(AccessibilityInterfaceAction accessibilityInterfaceAction) 1950 [&] (AccessibilityInterfaceAction accessibilityInterfaceAction) {
1951 processFlag2 = true;
1952 return AccessibilityActionInterceptResult::ACTION_INTERCEPT;
1953 }
1954 );
1955
1956 accessibilityProperty->SetSecurityClickAction (
__anon15955db80d02(const SecCompEnhanceEvent& event) 1957 [&] (const SecCompEnhanceEvent& event) {
1958 processFlag1 = true;
1959 testEvent = event;
1960 }
1961 );
1962
1963 jsAccessibilityManager->ConvertActionTypeToBoolen(ActionType::ACCESSIBILITY_ACTION_CLICK,
1964 frameNode, elementId, context, actionArguments);
1965 EXPECT_EQ(processFlag1, true);
1966 EXPECT_EQ(processFlag2, false);
1967
1968 std::vector<uint8_t> dataBuffer;
1969 dataBuffer.assign(hmacTest.begin(), hmacTest.end());
1970 std::chrono::microseconds microseconds(timeTest);
1971 auto testTime = TimeStamp { microseconds };
1972
1973 EXPECT_EQ(testEvent.dataBuffer, dataBuffer);
1974 EXPECT_EQ(testEvent.time, testTime);
1975 }
1976 /**
1977 * @tc.name: JsAccessibilityManager031
1978 * @tc.desc: IsUpdateWindowSceneInfo
1979 * @tc.type: FUNC
1980 */
1981 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager031, TestSize.Level1)
1982 {
1983 /**
1984 * @tc.steps: step1. construct jsAccessibilityManager
1985 */
1986 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
1987 ASSERT_NE(jsAccessibilityManager, nullptr);
1988
1989 /**
1990 * @tc.steps: step2. node is nullptr, expect return false
1991 */
1992 RefPtr<FrameNode> node = nullptr;
1993 NG::WindowSceneInfo windowSceneInfo;
1994 bool ret = jsAccessibilityManager->IsUpdateWindowSceneInfo(node, windowSceneInfo);
1995 EXPECT_FALSE(ret);
1996 }
1997
1998 /**
1999 * @tc.name: JsAccessibilityManager032
2000 * @tc.desc: IsUpdateWindowSceneInfo
2001 * @tc.type: FUNC
2002 */
2003 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager032, TestSize.Level1)
2004 {
2005 /**
2006 * @tc.steps: step1. construct jsAccessibilityManager, test node
2007 */
2008 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2009 ASSERT_NE(jsAccessibilityManager, nullptr);
2010
2011 auto rootNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
2012 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
2013 auto frameNode1 = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
2014 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), false);
2015 rootNode->AddChild(frameNode1);
2016 auto frameNode2 = FrameNode::CreateFrameNode("frameNode",
2017 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), false);
2018 frameNode1->AddChild(frameNode2);
2019 NG::WindowSceneInfo windowSceneInfo;
2020 /**
2021 * @tc.steps: step2. check root node, expect return false
2022 */
2023 bool ret1 = jsAccessibilityManager->IsUpdateWindowSceneInfo(rootNode, windowSceneInfo);
2024 EXPECT_FALSE(ret1);
2025
2026 bool ret2 = jsAccessibilityManager->IsUpdateWindowSceneInfo(frameNode2, windowSceneInfo);
2027 EXPECT_FALSE(ret2);
2028 }
2029
2030 /**
2031 * @tc.name: JsAccessibilityManager033
2032 * @tc.desc: IsUpdateWindowSceneInfo
2033 * @tc.type: FUNC
2034 */
2035 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager033, TestSize.Level1)
2036 {
2037 /**
2038 * @tc.steps: step1. construct jsAccessibilityManager, test node
2039 */
2040 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2041 ASSERT_NE(jsAccessibilityManager, nullptr);
2042
2043 auto rootNode = FrameNode::CreateFrameNode("frameNode0",
2044 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
2045 auto frameNode1 = FrameNode::CreateFrameNode("frameNode1",
2046 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), false);
2047 rootNode->AddChild(frameNode1);
2048 NG::WindowSceneInfo windowSceneInfo;
2049 /**
2050 * @tc.steps: step2. check frameNode1, expect return false
2051 */
2052 bool ret1 = jsAccessibilityManager->IsUpdateWindowSceneInfo(frameNode1, windowSceneInfo);
2053 EXPECT_FALSE(ret1);
2054 }
2055
2056 /**
2057 * @tc.name: JsAccessibilityManager034
2058 * @tc.desc: UpdateElementInfosTreeId
2059 * @tc.type: FUNC
2060 */
2061 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager034, TestSize.Level1)
2062 {
2063 /**
2064 * @tc.steps: step1. construct jsAccessibilityManager, test node
2065 */
2066 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2067 ASSERT_NE(jsAccessibilityManager, nullptr);
2068 /**
2069 * @tc.steps: step2. check empty infos
2070 */
2071 std::list<Accessibility::AccessibilityElementInfo> infos;
2072 jsAccessibilityManager->UpdateElementInfosTreeId(infos);
2073 EXPECT_TRUE(infos.empty());
2074
2075 /**
2076 * @tc.steps: step3. check info with treeId < 0
2077 */
2078 Accessibility::AccessibilityElementInfo info;
2079 info.SetBelongTreeId(0);
2080 info.SetAccessibilityId(100);
2081 infos.push_back(info);
2082 jsAccessibilityManager->UpdateElementInfosTreeId(infos);
2083
2084 /**
2085 * @tc.steps: step4. check info with treeId > 0
2086 */
2087 infos.clear();
2088 info.SetBelongTreeId(1);
2089 info.SetAccessibilityId(100);
2090 info.SetParent(10);
2091 infos.push_back(info);
2092 jsAccessibilityManager->UpdateElementInfosTreeId(infos);
2093 }
2094 /**
2095 * @tc.name: JsAccessibilityManager035
2096 * @tc.desc: UpdateVirtualNodeChildAccessibilityElementInfo
2097 * @tc.type: FUNC
2098 */
2099 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager035, TestSize.Level1)
2100 {
2101 /**
2102 * @tc.steps: step1. construct jsAccessibilityManager, test node
2103 */
2104 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2105 ASSERT_NE(jsAccessibilityManager, nullptr);
2106 auto context = NG::PipelineContext::GetCurrentContext();
2107 jsAccessibilityManager->SetPipelineContext(context);
2108 jsAccessibilityManager->Register(true);
2109
2110 Framework::CommonProperty commonProperty;
2111 commonProperty.innerWindowId = 10;
2112 AccessibilityElementInfo nodeParentInfo;
2113 AccessibilityElementInfo nodeInfo;
2114 auto frameNode = FrameNode::CreateFrameNode("frameNode",
2115 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), false);
2116
2117 /**
2118 * @tc.steps: step2. test with frameNode nullptr
2119 */
2120 jsAccessibilityManager->UpdateVirtualNodeChildAccessibilityElementInfo(nullptr,
2121 commonProperty, nodeParentInfo, nodeInfo, context);
2122
2123 /**
2124 * @tc.steps: step3. test with frameNode
2125 */
2126 jsAccessibilityManager->UpdateVirtualNodeChildAccessibilityElementInfo(frameNode,
2127 commonProperty, nodeParentInfo, nodeInfo, context);
2128 EXPECT_EQ(nodeInfo.GetInnerWindowId(), 10);
2129
2130 /**
2131 * @tc.steps: step3. test UpdateVirtualNodeAccessibilityElementInfo
2132 */;
2133 AccessibilityElementInfo nodeInfoNew;
2134 auto rootNode = FrameNode::CreateFrameNode("rootNode",
2135 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
2136 rootNode->AddChild(frameNode);
2137 jsAccessibilityManager->UpdateVirtualNodeAccessibilityElementInfo(nullptr, nullptr,
2138 commonProperty, nodeInfoNew, context);
2139 jsAccessibilityManager->UpdateVirtualNodeAccessibilityElementInfo(rootNode, nullptr,
2140 commonProperty, nodeInfoNew, context);
2141 jsAccessibilityManager->UpdateVirtualNodeAccessibilityElementInfo(rootNode, frameNode,
2142 commonProperty, nodeInfoNew, context);
2143 EXPECT_EQ(nodeInfoNew.GetInnerWindowId(), 10);
2144 }
2145
2146 /**
2147 * @tc.name: JsAccessibilityManager036
2148 * @tc.desc: UpdateVirtualNodeFocus
2149 * @tc.type: FUNC
2150 */
2151 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager036, TestSize.Level1)
2152 {
2153 /**
2154 * @tc.steps: step1. construct JsAccessibilityManager
2155 */
2156 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2157 AceType::MakeRefPtr<Pattern>(), false);
2158 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2159
2160 /**
2161 * @tc.steps: step2. test UpdateVirtualNodeFocus
2162 */
2163 Accessibility::AccessibilityElementInfo nodeInfo;
2164 RefPtr<GeometryNode> geometryNode = AceType::MakeRefPtr<GeometryNode>();
2165 ASSERT_NE(geometryNode, nullptr);
2166 frameNode->SetGeometryNode(geometryNode);
2167 frameNode->SetAccessibilityNodeVirtual();
2168 jsAccessibilityManager->SaveLast(0, frameNode);
2169 /**
2170 * @tc.steps: step3. expect GetAccessibilityFocusState true.
2171 */
2172 jsAccessibilityManager->UpdateVirtualNodeFocus();
2173 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
2174 ASSERT_NE(accessibilityProperty, nullptr);
2175 EXPECT_FALSE(accessibilityProperty->GetAccessibilityFocusState());
2176 }
2177
2178 /**
2179 * @tc.name: JsAccessibilityManager037
2180 * @tc.desc: UpdateAccessibilityNextFocusIdMap
2181 * @tc.type: FUNC
2182 */
2183 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager037, TestSize.Level1)
2184 {
2185 /**
2186 * @tc.steps: step1. construct JsAccessibilityManager
2187 */
2188 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2189 /**
2190 * @tc.steps: step2. test UpdateAccessibilityNextFocusIdMap expect update success
2191 */
2192 const int32_t containerIdA = 1;
2193 const std::string nextFocusKeyA = "test_key";
2194 const int64_t preAccessibilityIdA = 100;
2195 jsAccessibilityManager->UpdateAccessibilityNextFocusIdMap(containerIdA, nextFocusKeyA, preAccessibilityIdA);
2196 EXPECT_EQ(jsAccessibilityManager->nextFocusMapWithSubWindow_.size(), 1);
2197 /**
2198 * @tc.steps: step3. test UpdateAccessibilityNextFocusIdMap expect update fail
2199 */
2200 const int32_t containerIdB = 2;
2201 const std::string nextFocusKeyB = "";
2202 const int64_t preAccessibilityIdB = 200;
2203 jsAccessibilityManager->UpdateAccessibilityNextFocusIdMap(containerIdA, nextFocusKeyA, preAccessibilityIdA);
2204 EXPECT_EQ(jsAccessibilityManager->nextFocusMapWithSubWindow_.size(), 1);
2205 /**
2206 * @tc.steps: step4. test UpdateAccessibilityNextFocusIdMap expect update contained data
2207 */
2208 const int32_t containerIdC = 3;
2209 const std::string nextFocusKeyC = "key3";
2210 const int64_t preAccessibilityIdC = 301;
2211 jsAccessibilityManager->UpdateAccessibilityNextFocusIdMap(containerIdC, "key1", 300);
2212 jsAccessibilityManager->UpdateAccessibilityNextFocusIdMap(containerIdC, nextFocusKeyC, preAccessibilityIdC);
2213 EXPECT_EQ(jsAccessibilityManager->nextFocusMapWithSubWindow_[containerIdC][nextFocusKeyC], preAccessibilityIdC);
2214 EXPECT_EQ(jsAccessibilityManager->nextFocusMapWithSubWindow_.size(), 2);
2215 }
2216
2217 /**
2218 * @tc.name: JsAccessibilityManager038
2219 * @tc.desc: IsSendAccessibilityEvent
2220 * @tc.type: FUNC
2221 */
2222 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager038, TestSize.Level1)
2223 {
2224 /**
2225 * @tc.steps: step1. construct JsAccessibilityManager
2226 */
2227 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2228 auto pipelineContext = MockContainer::Current()->GetPipelineContext();
2229 ASSERT_NE(pipelineContext, nullptr);
2230 jsAccessibilityManager->SetPipelineContext(pipelineContext);
2231 /**
2232 * @tc.steps: step2. test IsSendAccessibilityEvent accessibilityEvent type with default value
2233 */
2234 AccessibilityEvent accessibilityEvent;
2235 EXPECT_TRUE(jsAccessibilityManager->IsSendAccessibilityEvent(accessibilityEvent));
2236 }
2237
2238 /**
2239 * @tc.name: AddHoverTransparentCallbackTest001
2240 * @tc.desc: AddHoverTransparentCallback
2241 * @tc.type: FUNC
2242 */
2243 HWTEST_F(JsAccessibilityManagerTest, AddHoverTransparentCallbackTest001, TestSize.Level1)
2244 {
2245 /**
2246 * @tc.steps: step1. create jsAccessibilityManager.
2247 */
2248 MockJsAccessibilityManager mockJsManger;
2249
2250 /**
2251 * @tc.steps: step2. create frameNode and add to list.
2252 */
2253 auto frameNode = FrameNode::CreateFrameNode("framenode1", 1, AceType::MakeRefPtr<Pattern>(), true);
2254 auto context = AceType::MakeRefPtr<NG::PipelineContext>();
2255 ASSERT_NE(context, nullptr);
2256 context->instanceId_ = 1;
2257 frameNode->AttachContext(AceType::RawPtr(context), false);
2258
2259 /**
2260 * @tc.steps: step3. test CheckHoverTransparentCallbackListEmpty return true.
2261 */
2262 EXPECT_TRUE(mockJsManger.CheckHoverTransparentCallbackListEmpty(1));
2263
2264 /**
2265 * @tc.steps: step4. test CheckHoverTransparentCallbackListEmpty return false.
2266 */
2267 mockJsManger.AddHoverTransparentCallback(frameNode);
2268 EXPECT_FALSE(mockJsManger.CheckHoverTransparentCallbackListEmpty(1));
2269
2270 /**
2271 * @tc.steps: step5. test CheckHoverTransparentCallbackListEmpty return true.
2272 */
2273 frameNode = nullptr;
2274 EXPECT_TRUE(mockJsManger.CheckHoverTransparentCallbackListEmpty(1));
2275 }
2276
2277 /**
2278 * @tc.name: GetComponentTypeAndPageIdByNodeIdTest001
2279 * @tc.desc: GetComponentTypeAndPageIdByNodeId
2280 * @tc.type: FUNC
2281 */
2282 HWTEST_F(JsAccessibilityManagerTest, GetComponentTypeAndPageIdByNodeIdTest001, TestSize.Level1)
2283 {
2284 /**
2285 * @tc.steps: step1. construct jsAccessibilityManager, test node
2286 */
2287 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2288 ASSERT_NE(jsAccessibilityManager, nullptr);
2289 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2290 AceType::MakeRefPtr<Pattern>(), false);
2291 auto context = NG::PipelineContext::GetCurrentContext();
2292 CHECK_NULL_VOID(context);
2293 auto root = context->GetRootElement();
2294 CHECK_NULL_VOID(root);
2295
2296 jsAccessibilityManager->SetPipelineContext(context);
2297
2298 Framework::GetInfoByNodeId infoOfNode;
2299 /**
2300 * @tc.steps: step2. check get infos by nodeId
2301 */
2302 jsAccessibilityManager->GetComponentTypeAndPageIdByNodeId(root->GetAccessibilityId(), root->GetContextRefPtr(), infoOfNode);
2303
2304 EXPECT_EQ(infoOfNode.componentType, root->GetTag());
2305 }
2306
2307 /**
2308 * @tc.name: IsSendAccessibilityEventTest001
2309 * @tc.desc: IsSendAccessibilityEvent in UIExtensionWindow
2310 * @tc.type: FUNC
2311 */
2312 HWTEST_F(JsAccessibilityManagerTest, IsSendAccessibilityEventTest001, TestSize.Level1)
2313 {
2314 /**
2315 * @tc.steps: step1. construct jsAccessibilityManager, test node
2316 */
2317 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
2318 ASSERT_NE(jsAccessibilityManager, nullptr);
2319 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2320 AceType::MakeRefPtr<Pattern>(), false);
2321 auto context = NG::PipelineContext::GetCurrentContext();
2322 ASSERT_NE(context, nullptr);
2323 auto root = context->GetRootElement();
2324 ASSERT_NE(root, nullptr);
2325
2326 jsAccessibilityManager->SetPipelineContext(context);
2327 auto container = Platform::AceContainer::GetContainer(context->GetInstanceId());
2328 ASSERT_NE(container, nullptr);
2329
2330 AccessibilityEvent accessibilityEvent {
2331 .nodeId = root->GetAccessibilityId(),
2332 .type = AccessibilityEventType::PAGE_CHANGE
2333 };
2334
2335 // mock conntainer will return isUIexentionwindow by SetUIExtensionSubWindow
2336 container->SetUIExtensionSubWindow(true);
2337 jsAccessibilityManager->AddToPageEventController(root);
2338 jsAccessibilityManager->UpdatePageMode(std::string(""));
2339 /**
2340 * @tc.steps: step2. save pages when in UIExtensionWindow
2341 */
2342 AccessibilityWorkMode accessibilityWorkMode { .isTouchExplorationEnabled = true };
2343 EXPECT_CALL(*jsAccessibilityManager,
2344 GenerateAccessibilityWorkMode()).WillOnce(::testing::Return(accessibilityWorkMode));
2345 auto result = jsAccessibilityManager->IsSendAccessibilityEvent(accessibilityEvent);
2346 EXPECT_EQ(result, false);
2347
2348 container->SetUIExtensionSubWindow(false);
2349 }
2350
2351 /**
2352 * @tc.name: IsSendAccessibilityEventTest002
2353 * @tc.desc: IsSendAccessibilityEvent in UIExtensionWindow
2354 * @tc.type: FUNC
2355 */
2356 HWTEST_F(JsAccessibilityManagerTest, IsSendAccessibilityEventTest002, TestSize.Level1)
2357 {
2358 /**
2359 * @tc.steps: step1. construct jsAccessibilityManager, test node
2360 */
2361 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
2362 ASSERT_NE(jsAccessibilityManager, nullptr);
2363 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2364 AceType::MakeRefPtr<Pattern>(), false);
2365 auto context = NG::PipelineContext::GetCurrentContext();
2366 ASSERT_NE(context, nullptr);
2367 auto root = context->GetRootElement();
2368 ASSERT_NE(root, nullptr);
2369
2370 jsAccessibilityManager->SetPipelineContext(context);
2371 auto container = Platform::AceContainer::GetContainer(context->GetInstanceId());
2372 ASSERT_NE(container, nullptr);
2373
2374 AccessibilityEvent accessibilityEvent {
2375 .nodeId = root->GetAccessibilityId(),
2376 .type = AccessibilityEventType::PAGE_CHANGE
2377 };
2378
2379 // mock conntainer will return isUIexentionwindow by SetUIExtensionSubWindow
2380 container->SetUIExtensionSubWindow(true);
2381 jsAccessibilityManager->AddToPageEventController(root);
2382 jsAccessibilityManager->UpdatePageMode(std::string(""));
2383
2384 /**
2385 * @tc.steps: step2. save pages when in UIExtensionWindow
2386 */
2387 AccessibilityWorkMode accessibilityWorkMode { .isTouchExplorationEnabled = false };
2388 EXPECT_CALL(*jsAccessibilityManager,
2389 GenerateAccessibilityWorkMode()).WillOnce(::testing::Return(accessibilityWorkMode));
2390 auto result = jsAccessibilityManager->IsSendAccessibilityEvent(accessibilityEvent);
2391 EXPECT_EQ(result, true);
2392
2393 container->SetUIExtensionSubWindow(false);
2394 }
2395
2396 /**
2397 * @tc.name: DeleteFromPageEventController001
2398 * @tc.desc: IsSendAccessibilityEvent in UIExtensionWindow
2399 * @tc.type: FUNC
2400 */
2401 HWTEST_F(JsAccessibilityManagerTest, DeleteFromPageEventController001, TestSize.Level1)
2402 {
2403 /**
2404 * @tc.steps: step1. construct jsAccessibilityManager, test node
2405 */
2406 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
2407 ASSERT_NE(jsAccessibilityManager, nullptr);
2408 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2409 AceType::MakeRefPtr<Pattern>(), false);
2410 auto context = NG::PipelineContext::GetCurrentContext();
2411 ASSERT_NE(context, nullptr);
2412 auto root = context->GetRootElement();
2413 ASSERT_NE(root, nullptr);
2414
2415 jsAccessibilityManager->SetPipelineContext(context);
2416 jsAccessibilityManager->AddToPageEventController(root);
2417 auto result = jsAccessibilityManager->DeleteFromPageEventController(root);
2418
2419 /**
2420 * @tc.steps: step2. save pages when in UIExtensionWindow
2421 */
2422 EXPECT_EQ(result, true);
2423 }
2424
2425 /**
2426 * @tc.name: IsSendAccessibilityEventTest003
2427 * @tc.desc: IsSendAccessibilityEvent
2428 * @tc.type: FUNC
2429 */
2430 HWTEST_F(JsAccessibilityManagerTest, IsSendAccessibilityEventTest003, TestSize.Level1)
2431 {
2432 /**
2433 * @tc.steps: step1. construct jsAccessibilityManager, test node
2434 */
2435 auto jsAccessibilityManager = AceType::MakeRefPtr<MockJsAccessibilityManager>();
2436 ASSERT_NE(jsAccessibilityManager, nullptr);
2437 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2438 AceType::MakeRefPtr<Pattern>(), false);
2439 auto context = NG::PipelineContext::GetCurrentContext();
2440 ASSERT_NE(context, nullptr);
2441 auto root = context->GetRootElement();
2442 ASSERT_NE(root, nullptr);
2443
2444 jsAccessibilityManager->SetPipelineContext(context);
2445 auto container = Platform::AceContainer::GetContainer(context->GetInstanceId());
2446 ASSERT_NE(container, nullptr);
2447
2448 AccessibilityEvent accessibilityEvent {
2449 .nodeId = root->GetAccessibilityId(),
2450 .type = AccessibilityEventType::PAGE_CHANGE
2451 };
2452
2453 jsAccessibilityManager->AddToPageEventController(root);
2454 /**
2455 * @tc.steps: step2. save pages when in UIExtensionWindow
2456 */
2457 AccessibilityWorkMode accessibilityWorkMode { .isTouchExplorationEnabled = true };
2458 EXPECT_CALL(*jsAccessibilityManager,
2459 GenerateAccessibilityWorkMode()).WillOnce(::testing::Return(accessibilityWorkMode));
2460 auto result = jsAccessibilityManager->IsSendAccessibilityEvent(accessibilityEvent);
2461 EXPECT_EQ(result, false);
2462 }
2463
2464 /**
2465 * @tc.name: IsSendAccessibilityEventForHostTest001
2466 * @tc.desc: IsSendAccessibilityEventForHost
2467 * @tc.type: FUNC
2468 */
2469 HWTEST_F(JsAccessibilityManagerTest, IsSendAccessibilityEventForHostTest001, TestSize.Level1)
2470 {
2471 /**
2472 * @tc.steps: step1. construct jsAccessibilityManager, test node
2473 */
2474 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2475 ASSERT_NE(jsAccessibilityManager, nullptr);
2476 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2477 AceType::MakeRefPtr<Pattern>(), false);
2478 auto context = NG::PipelineContext::GetCurrentContext();
2479 ASSERT_NE(context, nullptr);
2480 auto root = context->GetRootElement();
2481 ASSERT_NE(root, nullptr);
2482 auto accessibilityProperty = root->GetAccessibilityProperty<NG::AccessibilityProperty>();
2483 ASSERT_NE(accessibilityProperty, nullptr);
2484 accessibilityProperty->SetAccessibilitySamePage("FULL_SILENT");
2485
2486 jsAccessibilityManager->SetPipelineContext(context);
2487 auto container = Platform::AceContainer::GetContainer(context->GetInstanceId());
2488 ASSERT_NE(container, nullptr);
2489 jsAccessibilityManager->AddDefaultFocusNode(root);
2490 jsAccessibilityManager->AddFrameNodeToUecStatusVec(root);
2491
2492 AccessibilityEvent accessibilityEvent {
2493 .nodeId = root->GetAccessibilityId(),
2494 .type = AccessibilityEventType::PAGE_CHANGE
2495 };
2496 /**
2497 * @tc.steps: step2. save events when UIExtension not ready
2498 */
2499 auto result =
2500 jsAccessibilityManager->IsSendAccessibilityEventForHost(accessibilityEvent, "test", root->GetPageId());
2501 EXPECT_EQ(result, false);
2502 }
2503
2504
2505 /**
2506 * @tc.name: IsSendAccessibilityEventTestForHost004
2507 * @tc.desc: IsSendAccessibilityEvent
2508 * @tc.type: FUNC
2509 */
2510 HWTEST_F(JsAccessibilityManagerTest, IsSendAccessibilityEventTestForHost004, TestSize.Level1)
2511 {
2512 /**
2513 * @tc.steps: step1. construct jsAccessibilityManager, test node
2514 */
2515 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2516 ASSERT_NE(jsAccessibilityManager, nullptr);
2517 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2518 AceType::MakeRefPtr<Pattern>(), false);
2519 auto context = NG::PipelineContext::GetCurrentContext();
2520 ASSERT_NE(context, nullptr);
2521 auto root = context->GetRootElement();
2522 ASSERT_NE(root, nullptr);
2523
2524 jsAccessibilityManager->SetPipelineContext(context);
2525
2526 jsAccessibilityManager->AddFrameNodeToUecStatusVec(root);
2527 jsAccessibilityManager->AddDefaultFocusNode(root);
2528
2529 AccessibilityEvent accessibilityEvent {
2530 .nodeId = root->GetAccessibilityId(),
2531 .type = AccessibilityEventType::PAGE_CHANGE
2532 };
2533
2534 /**
2535 * @tc.steps: step2. save events when UIExtension not ready
2536 */
2537 auto result =
2538 jsAccessibilityManager->IsSendAccessibilityEventForHost(accessibilityEvent, "test", root->GetPageId() + 1);
2539 EXPECT_EQ(result, true);
2540
2541 /**
2542 * @tc.steps: step2. save events when UIExtension not ready
2543 */
2544 jsAccessibilityManager->UpdateFrameNodeState(root->GetId());
2545 result =
2546 jsAccessibilityManager->IsSendAccessibilityEventForHost(accessibilityEvent, "test", root->GetPageId());
2547 EXPECT_EQ(result, true);
2548 }
2549
2550 /**
2551 * @tc.name: SearchDefaultFocusByWindowIdNGTest001
2552 * @tc.desc: SearchDefaultFocusByWindowIdNG
2553 * @tc.type: FUNC
2554 */
2555 HWTEST_F(JsAccessibilityManagerTest, SearchDefaultFocusByWindowIdNGTest001, TestSize.Level1)
2556 {
2557 /**
2558 * @tc.steps: step1. construct jsAccessibilityManager, test node
2559 */
2560 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2561 ASSERT_NE(jsAccessibilityManager, nullptr);
2562 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2563 AceType::MakeRefPtr<Pattern>(), false);
2564 auto context = NG::PipelineContext::GetCurrentContext();
2565 ASSERT_NE(context, nullptr);
2566 jsAccessibilityManager->SetPipelineContext(context);
2567 jsAccessibilityManager->AddDefaultFocusNode(frameNode);
2568 /**
2569 * @tc.steps: step2. test
2570 */
2571 int32_t pageId = frameNode->GetPageId();
2572 std::list<Accessibility::AccessibilityElementInfo> infos;
2573
2574 jsAccessibilityManager->SearchDefaultFocusByWindowIdNG(pageId + 1, infos, context);
2575 EXPECT_TRUE(infos.empty());
2576
2577 jsAccessibilityManager->SearchDefaultFocusByWindowIdNG(pageId, infos, context);
2578 EXPECT_FALSE(infos.empty());
2579
2580 infos.clear();
2581 frameNode.Reset();
2582 jsAccessibilityManager->SearchDefaultFocusByWindowIdNG(pageId, infos, context);
2583 EXPECT_TRUE(infos.empty());
2584 }
2585
2586 /**
2587 * @tc.name: JsAccessibilityManager039
2588 * @tc.desc: ActClick
2589 * @tc.type: FUNC
2590 */
2591 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager039, TestSize.Level1)
2592 {
2593 /**
2594 * @tc.steps: step1. construct mockJsManger
2595 */
2596 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2597 AceType::MakeRefPtr<Pattern>(), false);
2598 ASSERT_NE(frameNode, nullptr);
2599 auto context = NG::PipelineContext::GetCurrentContext();
2600 ASSERT_NE(context, nullptr);
2601 MockJsAccessibilityManager mockJsManger;
2602 mockJsManger.SetPipelineContext(context);
2603 mockJsManger.Register(true);
2604 /**
2605 * @tc.steps: step2. test
2606 */
2607 auto eventHub = frameNode->GetOrCreateEventHub<NG::EventHub>();
2608 ASSERT_NE(eventHub, nullptr);
2609 eventHub->SetGestureEventHub(nullptr);
2610 EXPECT_CALL(mockJsManger, ActClick(_)).Times(0).WillOnce(Return(false));
2611 }
2612
2613 /**
2614 * @tc.name: JsAccessibilityManager040
2615 * @tc.desc: Test GetFramenodeByAccessibilityId
2616 * @tc.type: FUNC
2617 */
2618 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager040, TestSize.Level1)
2619 {
2620 /**
2621 * @tc.steps: step1. construct JsAccessibilityManager
2622 */
2623 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2624 AceType::MakeRefPtr<Pattern>(), false);
2625 ASSERT_NE(frameNode, nullptr);
2626 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2627 ASSERT_NE(jsAccessibilityManager, nullptr);
2628
2629 /**
2630 * @tc.steps: step2. test GetFramenodeByAccessibilityId by DumpTreeNG
2631 */
2632 frameNode->accessibilityId_ = frameNode->GetId() + 1;
2633 jsAccessibilityManager->DumpTreeNG(frameNode, 1, frameNode->GetId(), true);
2634 }
2635
2636 /**
2637 * @tc.name: JsAccessibilityManager041
2638 * @tc.desc: CheckDumpInfoParams,OnDumpInfoNG
2639 * @tc.type: FUNC
2640 */
2641 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager041, TestSize.Level1)
2642 {
2643 /**
2644 * @tc.steps: step1. construct JsAccessibilityManager
2645 */
2646 std::vector<std::string> params = {};
2647 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2648
2649 params = { "-inspector", "-accessibility", "-simplify", "--set-whitelist", "1"};
2650 auto ret = jsAccessibilityManager->CheckDumpInfoParams(params);
2651 EXPECT_EQ(ret, true);
2652 DumpInfoArgument argument;
2653 auto isSetList = jsAccessibilityManager->GetDumpInfoArgument(params, argument);
2654 EXPECT_EQ(isSetList, true);
2655 jsAccessibilityManager->OnDumpInfoNG(params, 1, false);
2656 }
2657
2658 /**
2659 * @tc.name: JsAccessibilityManager042
2660 * @tc.desc: CheckDumpInfoParams,OnDumpInfoNG
2661 * @tc.type: FUNC
2662 */
2663 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager042, TestSize.Level1)
2664 {
2665 /**
2666 * @tc.steps: step1. construct JsAccessibilityManager
2667 */
2668 std::vector<std::string> params = {};
2669 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2670
2671 params = { "-inspector", "-accessibility", "-simplify", "--get-whitelist", "1"};
2672 auto ret = jsAccessibilityManager->CheckDumpInfoParams(params);
2673 EXPECT_EQ(ret, true);
2674 DumpInfoArgument argument;
2675 auto isGetList = jsAccessibilityManager->GetDumpInfoArgument(params, argument);
2676 EXPECT_EQ(isGetList, true);
2677 jsAccessibilityManager->OnDumpInfoNG(params, 1, false);
2678 }
2679
2680 /**
2681 * @tc.name: ShouldSkipAccessibilityStateChange001
2682 * @tc.desc: ShouldSkipAccessibilityStateChange
2683 * @tc.type: FUNC
2684 */
2685 HWTEST_F(JsAccessibilityManagerTest, ShouldSkipAccessibilityStateChange001, TestSize.Level1)
2686 {
2687 auto pipelineContext = MockContainer::Current()->GetPipelineContext();
2688 ASSERT_NE(pipelineContext, nullptr);
2689 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2690 auto container = Platform::AceContainer::GetContainer(pipelineContext->GetInstanceId());
2691 ASSERT_NE(container, nullptr);
2692 auto isState = jsAccessibilityManager->ShouldSkipAccessibilityStateChange(pipelineContext);
2693 ASSERT_FALSE(isState);
2694 }
2695
2696 /**
2697 * @tc.name: InitializeCallback003
2698 * @tc.desc: InitializeCallback
2699 * @tc.type: FUNC
2700 */
2701 HWTEST_F(JsAccessibilityManagerTest, InitializeCallback003, TestSize.Level1)
2702 {
2703 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2704 ASSERT_NE(jsAccessibilityManager, nullptr);
2705 auto context = NG::PipelineContext::GetCurrentContext();
2706 ASSERT_NE(context, nullptr);
2707 context->SetWindowId(1);
2708 jsAccessibilityManager->SetPipelineContext(context);
2709 jsAccessibilityManager->Register(true);
2710 jsAccessibilityManager->InitializeCallback();
2711 EXPECT_EQ(jsAccessibilityManager->windowId_, 0);
2712 }
2713
2714 /**
2715 * @tc.name: SendEventToAccessibilityWithNode001
2716 * @tc.desc: SendEventToAccessibilityWithNode
2717 * @tc.type: FUNC
2718 */
2719 HWTEST_F(JsAccessibilityManagerTest, SendEventToAccessibilityWithNode001, TestSize.Level1)
2720 {
2721 auto context = NG::PipelineContext::GetCurrentContext();
2722 CHECK_NULL_VOID(context);
2723 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
2724 CHECK_NULL_VOID(frameNode);
2725 auto root = context->GetRootElement();
2726 CHECK_NULL_VOID(root);
2727 root->AddChild(frameNode);
2728 MockJsAccessibilityManager mockJsManger;
2729 mockJsManger.SetPipelineContext(context);
2730 mockJsManger.Register(true);
2731 int64_t nodeId = frameNode->GetAccessibilityId();
2732 int32_t eventId = 2;
2733 std::vector<std::string> params;
2734 params.push_back("-inspector");
2735 params.push_back("1");
2736 params.push_back("--stackNodeId");
2737 int64_t testStackId = 2;
2738 params.push_back(std::to_string(testStackId));
2739 mockJsManger.UpdateEventWhiteList({0});
2740 EXPECT_CALL(mockJsManger, SendEventToAccessibilityWithNode(_, _, _))
2741 .Times(1);
2742 mockJsManger.DumpSendEventTest(nodeId, eventId, params);
2743 }
2744
2745 /**
2746 * @tc.name: SendEventToAccessibilityWithNode002
2747 * @tc.desc: SendEventToAccessibilityWithNode
2748 * @tc.type: FUNC
2749 */
2750 HWTEST_F(JsAccessibilityManagerTest, SendEventToAccessibilityWithNode002, TestSize.Level1)
2751 {
2752 /**
2753 * @tc.steps: step1. construct JsAccessibilityManager
2754 */
2755 auto rootNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
2756 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
2757 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2758 AceType::MakeRefPtr<Pattern>(), false);
2759 rootNode->AddChild(frameNode);
2760 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
2761 accessibilityProperty->SetAccessibilityLevel("yes");
2762 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2763
2764 /**
2765 * @tc.steps: step2. test SendEventToAccessibilityWithNode
2766 */
2767 AccessibilityEvent accessibilityEvent;
2768 auto context = NG::PipelineContext::GetCurrentContext();
2769 EXPECT_EQ(jsAccessibilityManager->context_.Upgrade(), nullptr);
2770 jsAccessibilityManager->SetPipelineContext(context);
2771 EXPECT_NE(jsAccessibilityManager->context_.Upgrade(), nullptr);
2772 jsAccessibilityManager->UpdateEventWhiteList({0xFFFFFFFF});
2773 jsAccessibilityManager->SendEventToAccessibilityWithNode(accessibilityEvent, frameNode, context);
2774 EXPECT_TRUE(jsAccessibilityManager->CheckWhiteList(0));
2775 }
2776
2777 /**
2778 * @tc.name: SendEventToAccessibilityWithNode003
2779 * @tc.desc: SendEventToAccessibilityWithNode
2780 * @tc.type: FUNC
2781 */
2782 HWTEST_F(JsAccessibilityManagerTest, SendEventToAccessibilityWithNode003, TestSize.Level1)
2783 {
2784 /**
2785 * @tc.steps: step1. construct JsAccessibilityManager
2786 */
2787 std::vector<std::string> params = {};
2788 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2789
2790 params = { "-inspector", "--get-whitelist"};
2791 auto ret = jsAccessibilityManager->CheckDumpInfoParams(params);
2792 EXPECT_EQ(ret, true);
2793 std::vector<uint32_t> eventList = {1, 2};
2794 jsAccessibilityManager->UpdateEventWhiteList(eventList);
2795 jsAccessibilityManager->OnDumpInfoNG(params, 1, false);
2796 }
2797
2798 /**
2799 * @tc.name: SendEventToAccessibilityWithNode004
2800 * @tc.desc: SendEventToAccessibilityWithNode
2801 * @tc.type: FUNC
2802 */
2803 HWTEST_F(JsAccessibilityManagerTest, SendEventToAccessibilityWithNode004, TestSize.Level1)
2804 {
2805 auto context = NG::PipelineContext::GetCurrentContext();
2806 CHECK_NULL_VOID(context);
2807 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), true);
2808 CHECK_NULL_VOID(frameNode);
2809 auto root = context->GetRootElement();
2810 CHECK_NULL_VOID(root);
2811 root->AddChild(frameNode);
2812 MockJsAccessibilityManager mockJsManger;
2813 mockJsManger.SetPipelineContext(context);
2814 mockJsManger.Register(true);
2815 int64_t nodeId = frameNode->GetAccessibilityId();
2816 int32_t eventId = 2;
2817 std::vector<std::string> params;
2818 params.push_back("-inspector");
2819 params.push_back("1");
2820 params.push_back("--stackNodeId");
2821 int64_t testStackId = 2;
2822 params.push_back(std::to_string(testStackId));
2823 mockJsManger.UpdateEventWhiteList({2});
2824 EXPECT_CALL(mockJsManger, SendEventToAccessibilityWithNode(_, _, _))
2825 .Times(1);
2826 mockJsManger.DumpSendEventTest(nodeId, eventId, params);
2827 }
2828
2829 /**
2830 * @tc.name: GetTransformDegreeRelativeToWindow001
2831 * @tc.desc: Test GetTransformDegreeRelativeToWindow
2832 * @tc.type: FUNC
2833 */
2834 HWTEST_F(JsAccessibilityManagerTest, GetTransformDegreeRelativeToWindow001, TestSize.Level1)
2835 {
2836 auto frameNode = FrameNode::CreateFrameNode("framenode", 1, AceType::MakeRefPtr<Pattern>(), false);
2837 ASSERT_NE(frameNode, nullptr);
2838
2839 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2840 ASSERT_NE(jsAccessibilityManager, nullptr);
2841
2842 int32_t result = jsAccessibilityManager->GetTransformDegreeRelativeToWindow(frameNode, false);
2843 EXPECT_EQ(result, 0);
2844 }
2845
2846 /**
2847 * @tc.name: JsAccessibilityManager043
2848 * @tc.desc: test UpdateVirtualNodeFocus
2849 * @tc.type: FUNC
2850 */
2851 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager043, TestSize.Level1)
2852 {
2853 /**
2854 * @tc.steps: step1. construct jsAccessibilityManager
2855 */
2856 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2857 ASSERT_NE(jsAccessibilityManager, nullptr);
2858 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2859 AceType::MakeRefPtr<Pattern>(), false);
2860 ASSERT_NE(frameNode, nullptr);
2861 frameNode->isAccessibilityVirtualNode_ = true;
2862 frameNode->accessibilityId_ = 1;
2863 jsAccessibilityManager->lastFrameNode_ = frameNode;
2864 jsAccessibilityManager->currentFocusNodeId_ = frameNode->accessibilityId_;
2865
2866 /**
2867 * @tc.steps: step2. construct parentNode
2868 */
2869 auto rootNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2870 AceType::MakeRefPtr<Pattern>(), true);
2871 ASSERT_NE(rootNode, nullptr);
2872 rootNode->accessibilityId_ = 0;
2873 rootNode->children_.push_back(frameNode);
2874 frameNode->SetAccessibilityVirtualNodeParent(rootNode);
2875 EXPECT_EQ(rootNode->children_.size(), 1);
2876
2877 /**
2878 * @tc.steps: step3. construct size
2879 */
2880 NG::SizeF size;
2881 size.width_ = 123.0f;
2882 size.height_ = 456.0f;
2883 jsAccessibilityManager->oldGeometrySize_ = size;
2884 frameNode->geometryNode_->SetFrameSize(size);
2885
2886 /**
2887 * @tc.steps: step4. test UpdateVirtualNodeFocus
2888 */
2889 auto accessibilityProperty = frameNode->GetAccessibilityProperty<NG::AccessibilityProperty>();
2890 accessibilityProperty->SetAccessibilityFocusState(false);
2891 jsAccessibilityManager->UpdateVirtualNodeFocus();
2892 EXPECT_EQ(accessibilityProperty->isAccessibilityFocused_, true);
2893 }
2894
2895 /**
2896 * @tc.name: JsAccessibilityManager044
2897 * @tc.desc: Test UpdateVirtualNodeInfo
2898 * @tc.type: FUNC
2899 */
2900 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager044, TestSize.Level1)
2901 {
2902 /**
2903 * @tc.steps: step1. construct JsAccessibilityManager
2904 */
2905 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2906 AceType::MakeRefPtr<Pattern>(), false);
2907 ASSERT_NE(frameNode, nullptr);
2908 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2909 ASSERT_NE(jsAccessibilityManager, nullptr);
2910 auto context = NG::PipelineContext::GetCurrentContext();
2911 ASSERT_NE(context, nullptr);
2912 jsAccessibilityManager->SetPipelineContext(context);
2913
2914 std::list<AccessibilityElementInfo> infos;
2915 Accessibility::AccessibilityElementInfo nodeInfo;
2916 Framework::CommonProperty commonProperty;
2917 /**
2918 * @tc.steps: step2. test UpdateVirtualNodeInfo
2919 */
2920 jsAccessibilityManager->UpdateVirtualNodeInfo(infos, nodeInfo, frameNode, commonProperty, context);
2921 EXPECT_TRUE(infos.empty());
2922 }
2923
2924 /**
2925 * @tc.name: JsAccessibilityManager045
2926 * @tc.desc: Test UpdateChildrenNodeInCache
2927 * @tc.type: FUNC
2928 */
2929 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager045, TestSize.Level1)
2930 {
2931 /**
2932 * @tc.steps: step1. construct JsAccessibilityManager
2933 */
2934 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
2935 AceType::MakeRefPtr<Pattern>(), false);
2936 ASSERT_NE(frameNode, nullptr);
2937 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2938 ASSERT_NE(jsAccessibilityManager, nullptr);
2939 auto context = NG::PipelineContext::GetCurrentContext();
2940 ASSERT_NE(context, nullptr);
2941 jsAccessibilityManager->SetPipelineContext(context);
2942
2943 std::list<AccessibilityElementInfo> infos;
2944 Accessibility::AccessibilityElementInfo nodeInfo;
2945 Framework::CommonProperty commonProperty;
2946 /**
2947 * @tc.steps: step2. test UpdateChildrenNodeInCache
2948 */
2949 Framework::SearchParameter searchParam;
2950 std::list<AccessibilityElementInfo> infosSecond;
2951 std::list<RefPtr<NG::FrameNode>> children;
2952 jsAccessibilityManager->UpdateChildrenNodeInCache(infosSecond, commonProperty,
2953 context, searchParam, children);
2954 EXPECT_TRUE(infosSecond.empty());
2955
2956 children.emplace_back(frameNode);
2957 jsAccessibilityManager->UpdateChildrenNodeInCache(infosSecond, commonProperty,
2958 context, searchParam, children);
2959 EXPECT_EQ(infosSecond.size(), 1);
2960
2961 auto vNode = FrameNode::CreateFrameNode(V2::PAGE_ETS_TAG,
2962 ElementRegister::GetInstance()->MakeUniqueId(),
2963 AceType::MakeRefPtr<Pattern>());
2964 auto vChildNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
2965 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
2966 vNode->AddChild(vChildNode);
2967 auto accessibilityProperty = frameNode->GetAccessibilityProperty<AccessibilityProperty>();
2968 accessibilityProperty->SetAccessibilityLevel("yes");
2969 accessibilityProperty->SetAccessibilityGroup(false);
2970 accessibilityProperty->SaveAccessibilityVirtualNode(vNode);
2971 commonProperty.isReduceMode = true;
2972 std::list<AccessibilityElementInfo> infosThird;
2973 jsAccessibilityManager->UpdateChildrenNodeInCache(infosThird, commonProperty,
2974 context, searchParam, children);
2975 EXPECT_EQ(infosSecond.size(), 1);
2976 }
2977
2978 /**
2979 * @tc.name: JsAccessibilityManager046
2980 * @tc.desc: test OnDumpInfoNG
2981 * @tc.type: FUNC
2982 */
2983 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager046, TestSize.Level1)
2984 {
2985 std::vector<std::string> params;
2986 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
2987 params.push_back("-inspector");
2988 params.push_back("--specific-search");
2989 params.push_back("1");
2990 params.push_back("2");
2991 auto ret = jsAccessibilityManager->CheckDumpInfoParams(params);
2992 EXPECT_EQ(ret, true);
2993 jsAccessibilityManager->OnDumpInfoNG(params, 1, false);
2994 }
2995
2996 /**
2997 * @tc.name: JsAccessibilityManager047
2998 * @tc.desc: test UpdateAccessibilityVisible nodeInfo
2999 * @tc.type: FUNC
3000 */
3001 HWTEST_F(JsAccessibilityManagerTest, JsAccessibilityManager047, TestSize.Level1)
3002 {
3003 /**
3004 * @tc.steps: step1. construct JsAccessibilityManager
3005 */
3006 auto frameNode1 = AceType::MakeRefPtr<NG::FrameNode>(V2::PAGE_ETS_TAG, 555, AceType::MakeRefPtr<NG::Pattern>());
3007 ASSERT_NE(frameNode1, nullptr);
3008 auto frameNode2 = AceType::MakeRefPtr<NG::FrameNode>(V2::PAGE_ETS_TAG, 666, AceType::MakeRefPtr<NG::Pattern>());
3009 ASSERT_NE(frameNode2, nullptr);
3010 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3011 ASSERT_NE(jsAccessibilityManager, nullptr);
3012 AceApplicationInfo::GetInstance().SetAccessibilityScreenReadEnabled(true);
3013
3014 /**
3015 * @tc.steps: step2. set accessibility visible
3016 */
3017 frameNode1->SetAccessibilityVisible(false);
3018 frameNode2->SetAccessibilityVisible(true);
3019
3020 /**
3021 * @tc.steps: step3. test UpdateAccessibilityVisible
3022 */
3023 Accessibility::AccessibilityElementInfo info1;
3024 Accessibility::AccessibilityElementInfo info2;
3025 jsAccessibilityManager->UpdateAccessibilityVisible(frameNode1, info1);
3026 EXPECT_EQ(info1.GetAccessibilityVisible(), false);
3027 jsAccessibilityManager->UpdateAccessibilityVisible(frameNode2, info2);
3028 EXPECT_EQ(info2.GetAccessibilityVisible(), true);
3029 }
3030
3031 #ifdef WEB_SUPPORTED
3032 /**
3033 * @tc.name: GetWebAccessibilityIdBySurfaceId
3034 * @tc.desc: Test GetWebAccessibilityIdBySurfaceId with valid and invalid surfaceId
3035 * @tc.type: FUNC
3036 */
3037 HWTEST_F(JsAccessibilityManagerTest, GetWebAccessibilityIdBySurfaceId001, TestSize.Level1)
3038 {
3039 auto mainFrameNode = FrameNode::CreateFrameNode(
3040 "main", 1, AceType::MakeRefPtr<NodeContainerPattern>(), true);
3041 ViewStackProcessor::GetInstance()->Push(mainFrameNode);
3042
3043 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
3044 ASSERT_NE(frameNode, nullptr);
3045 auto pattern = AceType::DynamicCast<NodeContainerPattern>(frameNode->GetPattern());
3046 ASSERT_NE(pattern, nullptr); auto pipe = MockPipelineContext::GetCurrent();
3047 frameNode->context_ = AceType::RawPtr(pipe);
3048
3049 pattern->surfaceId_ = 1U;
3050
3051 auto exportNode = AceType::MakeRefPtr<FrameNode>("exportNode", -1, AceType::MakeRefPtr<Pattern>());
3052 ASSERT_NE(exportNode, nullptr);
3053 auto context = NG::PipelineContext::GetCurrentContext();
3054 ASSERT_NE(context, nullptr);
3055 exportNode->context_ = AceType::RawPtr(context);
3056
3057 pattern->exportTextureNode_ = AceType::WeakClaim(AceType::RawPtr(exportNode));
3058 auto rootElement = context->GetRootElement();
3059 ASSERT_NE(rootElement, nullptr);
3060 rootElement->AddChild(exportNode);
3061
3062 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3063 ASSERT_NE(jsAccessibilityManager, nullptr);
3064 jsAccessibilityManager->SetPipelineContext(context);
3065 jsAccessibilityManager->Register(true);
3066
3067 std::stringstream ss;
3068 ss << 1U;
3069 auto accessibilityId = jsAccessibilityManager->GetWebAccessibilityIdBySurfaceId(ss.str());
3070 EXPECT_EQ(accessibilityId, -1);
3071
3072 auto accessibilityId2 = jsAccessibilityManager->GetWebAccessibilityIdBySurfaceId("not_exist_id");
3073 EXPECT_EQ(accessibilityId2, -1);
3074 }
3075 #endif
3076
3077 /**
3078 * @tc.name: CheckAndGetEmbedFrameNode001
3079 * @tc.desc: Test CheckAndGetEmbedFrameNode with normal and nullptr node
3080 * @tc.type: FUNC
3081 */
3082 HWTEST_F(JsAccessibilityManagerTest, CheckAndGetEmbedFrameNode001, TestSize.Level1)
3083 {
3084 auto frameNode = FrameNode::CreateFrameNode(
3085 "embedNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
3086 ASSERT_NE(frameNode, nullptr);
3087 auto context = NG::PipelineContext::GetCurrentContext();
3088 ASSERT_NE(context, nullptr);
3089 frameNode->context_ = AceType::RawPtr(context);
3090
3091 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3092 ASSERT_NE(jsAccessibilityManager, nullptr);
3093 jsAccessibilityManager->SetPipelineContext(context);
3094 jsAccessibilityManager->Register(true);
3095
3096 int64_t ret = jsAccessibilityManager->CheckAndGetEmbedFrameNode(frameNode);
3097 EXPECT_EQ(ret, -1);
3098
3099 RefPtr<NG::FrameNode> nullNode;
3100 ret = jsAccessibilityManager->CheckAndGetEmbedFrameNode(nullNode);
3101 EXPECT_EQ(ret, -1);
3102 }
3103
3104 /**
3105 * @tc.name: SearchElementInfoBySurfaceId001
3106 * @tc.desc: Test SearchElementInfoBySurfaceId with valid surfaceId and different types
3107 * @tc.type: FUNC
3108 */
3109 HWTEST_F(JsAccessibilityManagerTest, SearchElementInfoBySurfaceId001, TestSize.Level1)
3110 {
3111 auto context = NG::PipelineContext::GetCurrentContext();
3112 ASSERT_NE(context, nullptr);
3113
3114 auto embedNode = FrameNode::CreateFrameNode(
3115 "embedNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
3116 ASSERT_NE(embedNode, nullptr);
3117 embedNode->context_ = AceType::RawPtr(context);
3118 embedNode->isActive_ = true;
3119
3120 uint64_t surfaceId = embedNode->GetId();
3121 ElementRegister::GetInstance()->RegisterEmbedNode(surfaceId, embedNode);
3122
3123 auto rootElement = context->GetRootElement();
3124 ASSERT_NE(rootElement, nullptr);
3125 rootElement->AddChild(embedNode);
3126
3127 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3128 ASSERT_NE(jsAccessibilityManager, nullptr);
3129 jsAccessibilityManager->SetPipelineContext(context);
3130 jsAccessibilityManager->Register(true);
3131 jsAccessibilityManager->SetWindowId(1);
3132
3133 std::list<AccessibilityElementInfo> infos;
3134 auto ret = jsAccessibilityManager->SearchElementInfoBySurfaceId(
3135 std::to_string(surfaceId), 1, Framework::SearchSurfaceIdType::SEARCH_ALL, infos);
3136 EXPECT_EQ(ret, Framework::SearchSurfaceIdRet::SEARCH_SUCCESS);
3137 EXPECT_FALSE(infos.empty());
3138
3139 infos.clear();
3140 ret = jsAccessibilityManager->SearchElementInfoBySurfaceId(
3141 "not_exist_id", 1, Framework::SearchSurfaceIdType::SEARCH_ALL, infos);
3142 EXPECT_EQ(ret, Framework::SearchSurfaceIdRet::NO_MATCH_NODE);
3143 EXPECT_TRUE(infos.empty());
3144
3145 rootElement->RemoveChild(embedNode);
3146 }
3147
3148 /**
3149 * @tc.name: IsTagInEmbedComponent001
3150 * @tc.desc: Test IsTagInEmbedComponent with exist componentType
3151 * @tc.type: FUNC
3152 */
3153 HWTEST_F(JsAccessibilityManagerTest, IsTagInEmbedComponent001, TestSize.Level1)
3154 {
3155 std::string tag = "embeddedObject";
3156 bool result = OHOS::Ace::Framework::JsAccessibilityManager::IsTagInEmbedComponent(tag);
3157 EXPECT_TRUE(result);
3158 }
3159
3160 /**
3161 * @tc.name: IsTagInEmbedComponent002
3162 * @tc.desc: Test IsTagInEmbedComponent with no exist componentType
3163 * @tc.type: FUNC
3164 */
3165 HWTEST_F(JsAccessibilityManagerTest, IsTagInEmbedComponent002, TestSize.Level1)
3166 {
3167 std::string tag = "noExist_embeddedObject";
3168 bool result = OHOS::Ace::Framework::JsAccessibilityManager::IsTagInEmbedComponent(tag);
3169 EXPECT_FALSE(result);
3170 }
3171
3172 /**
3173 * @tc.name: IsTagInEmbedComponent003
3174 * @tc.desc: Test IsTagInEmbedComponent with null string
3175 * @tc.type: FUNC
3176 */
3177 HWTEST_F(JsAccessibilityManagerTest, IsTagInEmbedComponent003, TestSize.Level1)
3178 {
3179 std::string tag = "";
3180 bool result = OHOS::Ace::Framework::JsAccessibilityManager::IsTagInEmbedComponent(tag);
3181 EXPECT_FALSE(result);
3182 }
3183
3184 /**
3185 * @tc.name: InitializeCallback001
3186 * @tc.desc: Test InitializeCallback with register false
3187 * @tc.type: FUNC
3188 */
3189 HWTEST_F(JsAccessibilityManagerTest, InitializeCallback001, TestSize.Level1)
3190 {
3191 /**
3192 * @tc.steps: step1. construct JsAccessibilityManager
3193 */
3194 MockPipelineContext::SetUp();
3195 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3196 ASSERT_NE(jsAccessibilityManager, nullptr);
3197
3198 auto context = MockPipelineContext::GetCurrentContext();
3199 ASSERT_NE(context, nullptr);
3200 context->SetWindowId(1);
3201 jsAccessibilityManager->SetPipelineContext(context);
3202
3203 /**
3204 * @tc.steps: step2. test InitializeCallback with register false;
3205 */
3206 jsAccessibilityManager->Register(false);
3207 jsAccessibilityManager->InitializeCallback();
3208 EXPECT_EQ(jsAccessibilityManager->windowId_, 1);
3209 MockPipelineContext::TearDown();
3210 }
3211
3212 /**
3213 * @tc.name: InitializeCallback002
3214 * @tc.desc: Test InitializeCallback with register true
3215 * @tc.type: FUNC
3216 */
3217 HWTEST_F(JsAccessibilityManagerTest, InitializeCallback002, TestSize.Level1)
3218 {
3219 /**
3220 * @tc.steps: step1. construct JsAccessibilityManager
3221 */
3222 MockPipelineContext::SetUp();
3223 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3224 ASSERT_NE(jsAccessibilityManager, nullptr);
3225
3226 auto context = MockPipelineContext::GetCurrentContext();
3227 ASSERT_NE(context, nullptr);
3228 context->SetWindowId(1);
3229 jsAccessibilityManager->SetPipelineContext(context);
3230
3231 /**
3232 * @tc.steps: step2. test InitializeCallback with register true;
3233 */
3234 jsAccessibilityManager->Register(true);
3235 jsAccessibilityManager->InitializeCallback();
3236 EXPECT_EQ(jsAccessibilityManager->windowId_, 0);
3237 MockPipelineContext::TearDown();
3238 }
3239
3240 /**
3241 * @tc.name: SearchElementInfoBySurfaceId002
3242 * @tc.desc: Test SearchElementInfoBySurfaceId with valid surfaceId and different types
3243 * @tc.type: FUNC
3244 */
3245 HWTEST_F(JsAccessibilityManagerTest, SearchElementInfoBySurfaceId002, TestSize.Level1)
3246 {
3247 MockPipelineContext::SetUp();
3248 auto context = NG::PipelineContext::GetCurrentContext();
3249 ASSERT_NE(context, nullptr);
3250
3251 auto embedNode = FrameNode::CreateFrameNode(
3252 "embedNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
3253 ASSERT_NE(embedNode, nullptr);
3254 embedNode->context_ = AceType::RawPtr(context);
3255 embedNode->isActive_ = true;
3256
3257 uint64_t surfaceId = embedNode->GetId();
3258 ElementRegister::GetInstance()->RegisterEmbedNode(surfaceId, embedNode);
3259
3260 auto rootElement = context->GetRootElement();
3261 ASSERT_NE(rootElement, nullptr);
3262 rootElement->AddChild(embedNode);
3263
3264 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3265 ASSERT_NE(jsAccessibilityManager, nullptr);
3266 jsAccessibilityManager->SetPipelineContext(context);
3267 jsAccessibilityManager->Register(true);
3268 jsAccessibilityManager->SetWindowId(1);
3269
3270 std::list<AccessibilityElementInfo> infos;
3271 auto ret = jsAccessibilityManager->SearchElementInfoBySurfaceId(
3272 std::to_string(surfaceId), 1, Framework::SearchSurfaceIdType::SEARCH_TAIL, infos);
3273 EXPECT_EQ(ret, Framework::SearchSurfaceIdRet::SEARCH_SUCCESS);
3274 EXPECT_EQ(infos.size(), 1);
3275
3276 rootElement->RemoveChild(embedNode);
3277 }
3278
3279 /**
3280 * @tc.name: UpdateChildrenNodeInCache001
3281 * @tc.desc: Test UpdateChildrenNodeInCache Func
3282 * @tc.type: FUNC
3283 */
3284 HWTEST_F(JsAccessibilityManagerTest, UpdateChildrenNodeInCache001, TestSize.Level1)
3285 {
3286 /**
3287 * @tc.steps: step1. create PipelineContext
3288 */
3289 MockPipelineContext::SetUp();
3290 auto context = NG::PipelineContext::GetCurrentContext();
3291 ASSERT_NE(context, nullptr);
3292
3293 /**
3294 * @tc.steps: step2. create frameNode and add child
3295 */
3296 auto rootNode = FrameNode::CreateFrameNode(V2::WINDOW_SCENE_ETS_TAG,
3297 ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>(), true);
3298 ASSERT_NE(rootNode, nullptr);
3299 rootNode->context_ = AceType::RawPtr(context);
3300 rootNode->isActive_ = true;
3301 auto embedNode = FrameNode::CreateFrameNode(
3302 "embedNode", ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<Pattern>());
3303 ASSERT_NE(embedNode, nullptr);
3304 embedNode->context_ = AceType::RawPtr(context);
3305 embedNode->isActive_ = true;
3306 rootNode->AddChild(embedNode);
3307
3308 /**
3309 * @tc.steps: step3. construct JsAccessibilityManager
3310 */
3311 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3312 ASSERT_NE(jsAccessibilityManager, nullptr);
3313 jsAccessibilityManager->SetPipelineContext(context);
3314 jsAccessibilityManager->Register(true);
3315 jsAccessibilityManager->SetWindowId(1);
3316
3317 /**
3318 * @tc.steps: step4. construct the parameters required to test the UpdateChildrenNodeInCache function.
3319 */
3320 std::list<AccessibilityElementInfo> infos;
3321 auto mainContext = context;
3322 Framework::CommonProperty commonProperty;
3323 jsAccessibilityManager->GenerateCommonProperty(context, commonProperty, mainContext, rootNode);
3324 auto mode = 1 << 3;
3325 Framework::SearchParameter param {-1, "", mode, NG::UI_EXTENSION_OFFSET_MAX};
3326 std::list<RefPtr<NG::FrameNode>> children {rootNode};
3327
3328 /**
3329 * @tc.steps: step4. test UpdateChildrenNodeInCache
3330 */
3331 jsAccessibilityManager->UpdateChildrenNodeInCache(infos, commonProperty, context, param, children);
3332 EXPECT_EQ(infos.size(), 2);
3333
3334 infos.clear();
3335 commonProperty.checkGetFunc = nullptr;
3336 commonProperty.checkEmbedNode = false;
3337 children = {rootNode};
3338 jsAccessibilityManager->UpdateChildrenNodeInCache(infos, commonProperty, context, param, children);
3339 EXPECT_EQ(infos.size(), 2);
3340 }
3341
3342 /**
3343 * @tc.name: SearchElementInfoByAccessibilityIdNG001
3344 * @tc.desc: Test SearchElementInfoByAccessibilityIdNG
3345 * @tc.type: FUNC
3346 */
3347 HWTEST_F(JsAccessibilityManagerTest, SearchElementInfoByAccessibilityIdNG001, TestSize.Level1)
3348 {
3349 MockPipelineContext::SetUp();
3350 auto context = PipelineContext::GetCurrentContext();
3351 ASSERT_NE(context, nullptr);
3352
3353 auto embedNode = FrameNode::CreateFrameNode(
3354 "embedNode", ElementRegister::GetInstance()->MakeUniqueId(),
3355 AceType::MakeRefPtr<Pattern>());
3356 ASSERT_NE(embedNode, nullptr);
3357 embedNode->context_ = AceType::RawPtr(context);
3358 embedNode->isActive_ = true;
3359
3360 uint64_t surfaceId = embedNode->GetId();
3361 ElementRegister::GetInstance()->RegisterEmbedNode(surfaceId, embedNode);
3362
3363 auto rootElement = context->GetRootElement();
3364 ASSERT_NE(rootElement, nullptr);
3365 rootElement->AddChild(embedNode);
3366
3367 auto jsAccessibilityManager = AceType::MakeRefPtr<OHOS::Ace::Framework::JsAccessibilityManager>();
3368 ASSERT_NE(jsAccessibilityManager, nullptr);
3369 jsAccessibilityManager->SetPipelineContext(context);
3370 jsAccessibilityManager->Register(true);
3371
3372 std::list<OHOS::Ace::Framework::AccessibilityElementInfo> infos;
3373 int64_t elementId = embedNode->GetAccessibilityId();
3374 jsAccessibilityManager->SearchElementInfoByAccessibilityIdNG(
3375 elementId, 0, infos, context, UI_EXTENSION_OFFSET_MAX);
3376
3377 EXPECT_FALSE(infos.empty());
3378 EXPECT_NE(infos.front().GetParentNodeId(), -1);
3379
3380 rootElement->RemoveChild(embedNode);
3381 }
3382
3383 /**
3384 * @tc.name: UpdateElementInfoTreeId001
3385 * @tc.desc: Test UpdateElementInfoTreeId with different treeId, parentId, childIds
3386 * @tc.type: FUNC
3387 */
3388 HWTEST_F(JsAccessibilityManagerTest, UpdateElementInfoTreeId001, TestSize.Level1)
3389 {
3390 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3391 Accessibility::AccessibilityElementInfo info;
3392
3393 info.SetBelongTreeId(0);
3394 info.SetAccessibilityId(100);
3395 info.SetParent(200);
3396 jsAccessibilityManager->UpdateElementInfoTreeId(info);
3397 EXPECT_EQ(info.GetBelongTreeId(), 0);
3398 EXPECT_EQ(info.GetAccessibilityId(), 100);
3399 EXPECT_EQ(info.GetParentNodeId(), 200);
3400
3401 info.SetBelongTreeId(10);
3402 info.SetAccessibilityId(101);
3403 info.SetParent(-1);
3404 jsAccessibilityManager->UpdateElementInfoTreeId(info);
3405 EXPECT_EQ(info.GetBelongTreeId(), 10);
3406 EXPECT_EQ(info.GetParentNodeId(), -1);
3407
3408 info.SetBelongTreeId(20);
3409 info.SetAccessibilityId(102);
3410 int64_t parentId = 202;
3411 info.SetParent(parentId);
3412 jsAccessibilityManager->UpdateElementInfoTreeId(info);
3413 int64_t expectedParentId = parentId;
3414 AccessibilitySystemAbilityClient::SetSplicElementIdTreeId(20, expectedParentId);
3415 EXPECT_EQ(info.GetBelongTreeId(), 20);
3416 EXPECT_EQ(info.GetParentNodeId(), expectedParentId);
3417
3418 info.SetBelongTreeId(30);
3419 info.SetAccessibilityId(103);
3420 info.SetParent(203);
3421 info.AddChild(301);
3422 info.AddChild(302);
3423 jsAccessibilityManager->UpdateElementInfoTreeId(info);
3424 EXPECT_EQ(info.GetBelongTreeId(), 30);
3425 auto childIds = info.GetChildIds();
3426 int64_t childId1 = 301;
3427 int64_t childId2 = 302;
3428 AccessibilitySystemAbilityClient::SetSplicElementIdTreeId(30, childId1);
3429 AccessibilitySystemAbilityClient::SetSplicElementIdTreeId(30, childId2);
3430 EXPECT_NE(std::find(childIds.begin(), childIds.end(), childId1), childIds.end());
3431 EXPECT_NE(std::find(childIds.begin(), childIds.end(), childId2), childIds.end());
3432 }
3433
3434 /**
3435 * @tc.name: ExecuteActionNG001
3436 * @tc.desc: Test func ExecuteActionNG
3437 * @tc.type: FUNC
3438 */
3439 HWTEST_F(JsAccessibilityManagerTest, ExecuteActionNG001, TestSize.Level1)
3440 {
3441 /**
3442 * @tc.steps: step1. construct jsAccessibilityManager, test node
3443 */
3444 MockPipelineContext::SetUp();
3445 auto frameNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
3446 AceType::MakeRefPtr<Pattern>(), false);
3447 ASSERT_NE(frameNode, nullptr);
3448 auto context = NG::PipelineContext::GetCurrentContext();
3449 ASSERT_NE(context, nullptr);
3450 auto root = context->GetRootElement();
3451 ASSERT_NE(root, nullptr);
3452 root->focusHub_ = nullptr;
3453 root->accessibilityProperty_ = nullptr;
3454 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3455 ASSERT_NE(jsAccessibilityManager, nullptr);
3456 jsAccessibilityManager->SetPipelineContext(context);
3457 jsAccessibilityManager->Register(true);
3458 jsAccessibilityManager->SetWindowId(1);
3459
3460 /**
3461 * @tc.steps: step2. test func ExecuteActionNG
3462 */
3463 const std::map<std::string, std::string> actionArguments {};
3464 auto lhs = jsAccessibilityManager->ExecuteActionNG(
3465 root->GetAccessibilityId(), actionArguments, ActionType::ACCESSIBILITY_ACTION_CLICK, nullptr, -1);
3466 EXPECT_FALSE(lhs);
3467 jsAccessibilityManager->SetIsIgnoreAllAction(true);
3468 lhs = jsAccessibilityManager->ExecuteActionNG(
3469 root->GetAccessibilityId(), actionArguments, ActionType::ACCESSIBILITY_ACTION_CLICK, context, -1);
3470 EXPECT_FALSE(lhs);
3471 lhs = jsAccessibilityManager->ExecuteActionNG(
3472 root->GetAccessibilityId(), actionArguments, ActionType::ACCESSIBILITY_ACTION_FOCUS, context, -1);
3473 lhs = jsAccessibilityManager->ExecuteActionNG(
3474 root->GetAccessibilityId(), actionArguments, ActionType::ACCESSIBILITY_ACTION_CLEAR_FOCUS, context, -1);
3475 MockPipelineContext::TearDown();
3476 }
3477
3478 /**
3479 * @tc.name: ReleaseCacheEvent001
3480 * @tc.desc: Test func ReleaseCacheEvent
3481 * @tc.type: FUNC
3482 */
3483 HWTEST_F(JsAccessibilityManagerTest, ReleaseCacheEvent001, TestSize.Level1)
3484 {
3485 /**
3486 * @tc.steps: step1. construct jsAccessibilityManager
3487 */
3488 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3489 ASSERT_NE(jsAccessibilityManager, nullptr);
3490
3491 /**
3492 * @tc.steps: step2. test func ReleaseCacheEvent
3493 */
3494 jsAccessibilityManager->ReleaseCacheEvent();
3495 EXPECT_TRUE(jsAccessibilityManager->eventQueue_.empty());
3496 AccessibilityEvent accessibilityEvent;
3497 jsAccessibilityManager->eventQueue_.push(accessibilityEvent);
3498 jsAccessibilityManager->ReleaseCacheEvent();
3499 EXPECT_TRUE(jsAccessibilityManager->eventQueue_.empty());
3500 }
3501
3502 /**
3503 * @tc.name: IsSendAccessibilityEventForUEA001
3504 * @tc.desc: Test func IsSendAccessibilityEventForUEA
3505 * @tc.type: FUNC
3506 */
3507 HWTEST_F(JsAccessibilityManagerTest, IsSendAccessibilityEventForUEA001, TestSize.Level1)
3508 {
3509 /**
3510 * @tc.steps: step1. construct IsSendAccessibilityEventForUEA
3511 */
3512 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3513 ASSERT_NE(jsAccessibilityManager, nullptr);
3514
3515 /**
3516 * @tc.steps: step2. test func ReleaseCacheEvent
3517 */
3518 AccessibilityEvent accessibilityEvent;
3519 std::string componentType = V2::STAGE_ETS_TAG;
3520 int32_t pageId = 2;
3521
3522 jsAccessibilityManager->UpdatePageMode(std::string(""));
3523 jsAccessibilityManager->treeId_ = -1;
3524 auto ret = jsAccessibilityManager->IsSendAccessibilityEventForUEA(accessibilityEvent, componentType, pageId);
3525 EXPECT_FALSE(ret);
3526 jsAccessibilityManager->treeId_ = 1;
3527 ret = jsAccessibilityManager->IsSendAccessibilityEventForUEA(accessibilityEvent, componentType, pageId);
3528 EXPECT_TRUE(ret);
3529
3530 jsAccessibilityManager->UpdatePageMode(std::string("FULL_SILENT"));
3531 ret = jsAccessibilityManager->IsSendAccessibilityEventForUEA(accessibilityEvent, componentType, pageId);
3532 EXPECT_FALSE(ret);
3533 jsAccessibilityManager->UpdatePageMode(std::string("SEMI_SILENT"));
3534 ret = jsAccessibilityManager->IsSendAccessibilityEventForUEA(accessibilityEvent, componentType, pageId);
3535 EXPECT_TRUE(ret);
3536 }
3537
3538 /**
3539 * @tc.name: FindUIExtensionAccessibilityElement001
3540 * @tc.desc: Test FindUIExtensionAccessibilityElement
3541 * @tc.type: FUNC
3542 */
3543 HWTEST_F(JsAccessibilityManagerTest, FindUIExtensionAccessibilityElement001, TestSize.Level1)
3544 {
3545 MockPipelineContext::SetUp();
3546 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3547 auto checkNode = FrameNode::CreateFrameNode("framenode", ElementRegister::GetInstance()->MakeUniqueId(),
3548 AceType::MakeRefPtr<Pattern>(), false);
3549 ASSERT_NE(checkNode, nullptr);
3550 std::string customid = "testCustomId";
3551 Framework::CommonProperty commonProperty;
3552 std::list<AccessibilityElementInfo> infos;
3553 auto context = PipelineContext::GetCurrentContext();
3554 ASSERT_NE(context, nullptr);
3555 Accessibility::AccessibilityElementInfo elementInfo;
3556 elementInfo.SetInspectorKey(customid);
3557 infos.push_back(elementInfo);
3558 bool result = jsAccessibilityManager->FindUIExtensionAccessibilityElement(checkNode,
3559 customid, commonProperty, infos, context);
3560 EXPECT_FALSE(result);
3561 MockPipelineContext::TearDown();
3562 }
3563
3564 /**
3565 * @tc.name: FindUIExtensionAccessibilityElement002
3566 * @tc.desc: Test FindUIExtensionAccessibilityElement
3567 * @tc.type: FUNC
3568 */
3569 HWTEST_F(JsAccessibilityManagerTest, FindUIExtensionAccessibilityElement002, TestSize.Level1)
3570 {
3571 MockPipelineContext::SetUp();
3572 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
3573 auto uiExtensionNodeId = ElementRegister::GetInstance()->MakeUniqueId();
3574 auto uiExtensionNode = FrameNode::GetOrCreateFrameNode(
__anon15955db80e02() 3575 V2::UI_EXTENSION_COMPONENT_ETS_TAG, uiExtensionNodeId, []() {
3576 return AceType::MakeRefPtr<MockUiExtensionPattern>();
3577 });
3578 std::string customid = "testCustomId";
3579 Framework::CommonProperty commonProperty;
3580 std::list<AccessibilityElementInfo> infos;
3581 auto context = PipelineContext::GetCurrentContext();
3582 ASSERT_NE(context, nullptr);
3583 Accessibility::AccessibilityElementInfo elementInfo;
3584 elementInfo.SetInspectorKey(customid);
3585 infos.push_back(elementInfo);
3586 bool result = jsAccessibilityManager->FindUIExtensionAccessibilityElement(uiExtensionNode,
3587 customid, commonProperty, infos, context);
3588 EXPECT_TRUE(result);
3589 MockPipelineContext::TearDown();
3590 }
3591 } // namespace OHOS::Ace::NG