• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "test/unittest/core/event/focus_hub_test_ng.h"
16 
17 using namespace testing;
18 using namespace testing::ext;
19 
20 namespace OHOS::Ace::NG {
21 /**
22  * @tc.name: FocusHubTestNg0043
23  * @tc.desc: Test the function SwitchFocus.
24  * @tc.type: FUNC
25  */
26 HWTEST_F(FocusHubTestNg, FocusHubTestNg0043, TestSize.Level1)
27 {
28     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
29         AceType::MakeRefPtr<Pattern>());
30     auto frameNode2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_COMPONENT_TAG, -1,
31         AceType::MakeRefPtr<Pattern>());
32     auto nodeParent = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BLANK_ETS_TAG, -1,
33         AceType::MakeRefPtr<FlexLayoutPattern>());
34     frameNode->GetOrCreateFocusHub();
35     frameNode2->GetOrCreateFocusHub();
36     nodeParent->GetOrCreateFocusHub();
37     frameNode->SetParent(nodeParent);
38     frameNode2->SetParent(nodeParent);
39 
40     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
41     eventHub->AttachHost(frameNode);
42     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
43     auto parent = focusHub->GetParentFocusHub();
44     parent->focusType_ = FocusType::NODE;
45     parent->SwitchFocus(focusHub);
46     parent->focusType_ = FocusType::SCOPE;
47     parent->SwitchFocus(focusHub);
48     EXPECT_NE(focusHub->focusType_, FocusType::SCOPE);
49     parent->currentFocus_ = true;
50     frameNode->AddChild(frameNode2);
51     frameNode2->focusHub_ = focusHub;
52     parent->SwitchFocus(focusHub);
53     EXPECT_TRUE(parent->currentFocus_);
54 }
55 
56 /**
57  * @tc.name: FocusHubTestNg0046
58  * @tc.desc: Test the function TriggerFocusScroll.
59  * @tc.type: FUNC
60  */
61 HWTEST_F(FocusHubTestNg, FocusHubTestNg0046, TestSize.Level1)
62 {
63     /**
64      * @tc.steps: step1. Create frameNode.
65      */
66     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
67         AceType::MakeRefPtr<Pattern>());
68     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
69     eventHub->AttachHost(frameNode);
70     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
71     ASSERT_NE(focusHub, nullptr);
72     auto context = PipelineContext::GetCurrentContext();
73     ASSERT_NE(context, nullptr);
74     auto focusManager = context->GetOrCreateFocusManager();
75     ASSERT_NE(focusManager, nullptr);
76     focusManager->isFocusActive_ = true;
77     focusHub->isFocusUnit_ = true;
78     auto parentNode = FrameNodeOnTree::CreateFrameNode(V2::ROW_ETS_TAG, 1,
79         AceType::MakeRefPtr<Pattern>());
80     auto parentFocusHub = parentNode->GetOrCreateFocusHub();
81     parentFocusHub->focusType_ = FocusType::SCOPE;
82     frameNode->parent_ = AceType::WeakClaim(AceType::RawPtr(parentNode));
__anonf9fb217b0102() 83     focusHub->onPaintFocusStateCallback_ = []() { return true; };
84     focusHub->PaintAllFocusState();
85     focusHub->TriggerFocusScroll();
86     focusHub->focusType_ = FocusType::DISABLE;
87     focusHub->isFocusUnit_ = false;
88     focusHub->TriggerFocusScroll();
89     EXPECT_FALSE(focusHub->isFocusUnit_);
90 }
91 
92 /**
93  * @tc.name: FocusHubTestNg0047
94  * @tc.desc: Test the function CalculatePosition and PaintAllFocusState.
95  * @tc.type: FUNC
96  */
97 HWTEST_F(FocusHubTestNg, FocusHubTestNg0047, TestSize.Level1)
98 {
99     /**
100      * @tc.steps: step1. Create frameNode.
101      */
102     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
103         AceType::MakeRefPtr<Pattern>());
104     auto frameNode1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
105         AceType::MakeRefPtr<Pattern>());
106     auto eventHub = AceType::MakeRefPtr<EventHub>();
107     auto eventHub1 = AceType::MakeRefPtr<EventHub>();
108     eventHub->AttachHost(frameNode);
109     eventHub1->AttachHost(frameNode1);
110     auto focusHub = frameNode->GetOrCreateFocusHub();
111     auto focusHub1 = frameNode1->GetOrCreateFocusHub();
112     std::list<RefPtr<FocusHub>> focusNodes;
113     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
114     EXPECT_EQ(itNewFocusNode, focusNodes.end());
115     focusHub->ClearAllFocusState();
116     focusHub->PaintAllFocusState();
117     focusHub->CalculatePosition();
118     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
119     EXPECT_FALSE(focusHub->CalculatePosition());
120     focusHub->focusStyleType_ = FocusStyleType::NONE;
121     focusHub->isFocusActiveWhenFocused_ = true;
122     EXPECT_FALSE(focusHub->PaintAllFocusState());
123     EXPECT_FALSE(focusHub->CalculatePosition());
124 }
125 
126 /**
127  * @tc.name: FocusHubTestNg0048
128  * @tc.desc: Test the function ClearFocusState.
129  * @tc.type: FUNC
130  */
131 HWTEST_F(FocusHubTestNg, FocusHubTestNg0048, TestSize.Level1)
132 {
133     /**
134      * @tc.steps: step1. Create frameNode.
135      */
136     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
137     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
138     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<AppTheme>()));
139     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
140         AceType::MakeRefPtr<Pattern>());
141     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
142         AceType::MakeRefPtr<ButtonPattern>());
143     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
144         AceType::MakeRefPtr<ButtonPattern>());
145     child->GetOrCreateFocusHub();
146     child2->GetOrCreateFocusHub();
147     frameNode->AddChild(child);
148     frameNode->AddChild(child2);
149     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
150     eventHub->AttachHost(frameNode);
151     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
152     auto context = PipelineContext::GetCurrentContext();
153     ASSERT_NE(context, nullptr);
154     RoundRect focusRectInner;
155     auto focusManager = context->GetOrCreateFocusManager();
156     ASSERT_NE(focusManager, nullptr);
157     focusManager->isFocusActive_ = true;
158     focusHub->focusType_ = FocusType::NODE;
159     EXPECT_FALSE(focusHub->PaintInnerFocusState(focusRectInner));
160     focusHub->focusStyleType_ = FocusStyleType::OUTER_BORDER;
161     std::list<RefPtr<FocusHub>> focusNodes;
162     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
163     EXPECT_EQ(itNewFocusNode, focusNodes.end());
164     EXPECT_TRUE(focusHub->PaintInnerFocusState(focusRectInner));
165     focusHub->focusPaintParamsPtr_ = std::make_unique<FocusPaintParam>();
166     focusHub->focusPaintParamsPtr_->paintColor = Color::RED;
167     focusHub->focusPaintParamsPtr_->paintWidth = Dimension(10);
168     EXPECT_TRUE(focusHub->PaintInnerFocusState(focusRectInner));
169 }
170 
171 /**
172  * @tc.name: FocusHubTestNg0049
173  * @tc.desc: Test the function PaintFocusState.
174  * @tc.type: FUNC
175  */
176 HWTEST_F(FocusHubTestNg, FocusHubTestNg0049, TestSize.Level1)
177 {
178     /**
179      * @tc.steps: step1. Create frameNode.
180      */
181     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
182     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
183     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<AppTheme>()));
184     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
185         AceType::MakeRefPtr<Pattern>());
186     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
187         AceType::MakeRefPtr<ButtonPattern>());
188     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
189         AceType::MakeRefPtr<ButtonPattern>());
190     child->GetOrCreateFocusHub();
191     child2->GetOrCreateFocusHub();
192     frameNode->AddChild(child);
193     frameNode->AddChild(child2);
194     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
195     eventHub->AttachHost(frameNode);
196     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
197     auto context = PipelineContext::GetCurrentContext();
198     ASSERT_NE(context, nullptr);
199     auto focusManager = context->GetOrCreateFocusManager();
200     ASSERT_NE(focusManager, nullptr);
201     focusManager->isFocusActive_ = true;
202     focusHub->focusType_ = FocusType::NODE;
203     std::list<RefPtr<FocusHub>> focusNodes;
204     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
205     EXPECT_EQ(itNewFocusNode, focusNodes.end());
206     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_REGION;
207     RoundRect paintRect;
__anonf9fb217b0202(RoundRect) 208     focusHub->getInnerFocusRectFunc_ = [](RoundRect) {};
209     EXPECT_FALSE(focusHub->PaintFocusState(false));
210     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_BORDER;
211     EXPECT_FALSE(focusHub->PaintFocusState(false));
212     focusHub->focusPaintParamsPtr_ = std::make_unique<FocusPaintParam>();
213     focusHub->focusPaintParamsPtr_->paintColor = Color::RED;
214     focusHub->focusPaintParamsPtr_->paintWidth = Dimension(10);
215     focusHub->focusPaintParamsPtr_->paintRect = RoundRect(RectF(), 0.0f, 0.0f);
216     EXPECT_TRUE(focusHub->PaintFocusState(false));
217     focusHub->focusStyleType_ = FocusStyleType::OUTER_BORDER;
218     EXPECT_TRUE(focusHub->PaintFocusState(false));
219     focusHub->focusStyleType_ = FocusStyleType::INNER_BORDER;
220     EXPECT_TRUE(focusHub->PaintFocusState(false));
221     focusHub->focusPaintParamsPtr_->focusPadding = Dimension(10);
222     EXPECT_TRUE(focusHub->PaintFocusState(false));
223 }
224 
225 /**
226  * @tc.name: FocusHubTestNg0050
227  * @tc.desc: Test the function ScrollToLastFocusIndex.
228  * @tc.type: FUNC
229  */
230 HWTEST_F(FocusHubTestNg, FocusHubTestNg0050, TestSize.Level1)
231 {
232     /**
233      * @tc.steps: step1. Create frameNode.
234      */
235     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
236         AceType::MakeRefPtr<Pattern>());
237     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
238     eventHub->AttachHost(frameNode);
239     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
240     ASSERT_NE(focusHub, nullptr);
241     focusHub->currentFocus_ = true;
242     auto parentNode = FrameNodeOnTree::CreateFrameNode(V2::ROW_ETS_TAG, 1,
243         AceType::MakeRefPtr<Pattern>());
244     auto parentFocusHub = parentNode->GetOrCreateFocusHub();
245     parentFocusHub->focusType_ = FocusType::SCOPE;
246     frameNode->parent_ = AceType::WeakClaim(AceType::RawPtr(parentNode));
247     focusHub->SetLastFocusNodeIndex(focusHub);
248     focusHub->ScrollToLastFocusIndex();
249     focusHub->lastFocusNodeIndex_ = 1;
250     focusHub->ScrollToLastFocusIndex();
251     EXPECT_NE(focusHub->focusType_, FocusType::SCOPE);
252 }
253 
254 /**
255  * @tc.name: FocusHubTestNg0051
256  * @tc.desc: Test the function RequestFocus.
257  * @tc.type: FUNC
258  */
259 HWTEST_F(FocusHubTestNg, FocusHubTestNg0051, TestSize.Level1)
260 {
261     /**
262      * @tc.steps: step1. Create frameNode.
263      */
264     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
265         AceType::MakeRefPtr<Pattern>());
266     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
267     eventHub->AttachHost(frameNode);
268     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
269     ASSERT_NE(focusHub, nullptr);
270     focusHub->RequestFocus();
271     focusHub->currentFocus_ = true;
272     focusHub->RequestFocus();
273     EXPECT_TRUE(focusHub->currentFocus_);
274 }
275 
276 /**
277  * @tc.name: FocusHubTestNg0052
278  * @tc.desc: Test the function FocusToHeadOrTailChild.
279  * @tc.type: FUNC
280  */
281 HWTEST_F(FocusHubTestNg, FocusHubTestNg0052, TestSize.Level1)
282 {
283     /**
284      * @tc.steps: step1. Create frameNode.
285      */
286     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
287         AceType::MakeRefPtr<Pattern>());
288     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
289     eventHub->AttachHost(frameNode);
290     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
291     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_REGION;
292     std::list<RefPtr<FocusHub>> focusNodes;
293     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
294     EXPECT_EQ(itNewFocusNode, focusNodes.end());
295     auto parentNode = FrameNodeOnTree::CreateFrameNode(V2::ROW_ETS_TAG, 1,
296         AceType::MakeRefPtr<Pattern>());
297     auto parentFocusHub = parentNode->GetOrCreateFocusHub();
298     parentFocusHub->focusType_ = FocusType::SCOPE;
299     frameNode->parent_ = AceType::WeakClaim(AceType::RawPtr(parentNode));
300     focusHub->focusType_ = FocusType::NODE;
301     EXPECT_FALSE(focusHub->FocusToHeadOrTailChild(true));
302     focusHub->focusType_ = FocusType::SCOPE;
303     EXPECT_FALSE(focusHub->FocusToHeadOrTailChild(false));
304 }
305 
306 /**
307  * @tc.name: FocusHubTestNg0054
308  * @tc.desc: Test the function GoToNextFocusLinear.
309  * @tc.type: FUNC
310  */
311 HWTEST_F(FocusHubTestNg, FocusHubTestNg0054, TestSize.Level1)
312 {
313     /**
314      * @tc.steps: step1. Create frameNode.
315      */
316     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
317         AceType::MakeRefPtr<Pattern>());
318     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
319         AceType::MakeRefPtr<ButtonPattern>());
320     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
321         AceType::MakeRefPtr<ButtonPattern>());
322     child->GetOrCreateFocusHub();
323     child2->GetOrCreateFocusHub();
324     frameNode->AddChild(child);
325     frameNode->AddChild(child2);
326     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
327     eventHub->AttachHost(frameNode);
328     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
329     focusHub->currentFocus_ = true;
330     std::list<RefPtr<FocusHub>> focusNodes;
331     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
332     EXPECT_EQ(itNewFocusNode, focusNodes.end());
333     EXPECT_FALSE(focusHub->GoToNextFocusLinear(FocusStep::LEFT));
334 }
335 
336 /**
337  * @tc.name: FocusHubTestNg0055
338  * @tc.desc: Test the function OnKeyEventScope.
339  * @tc.type: FUNC
340  */
341 HWTEST_F(FocusHubTestNg, FocusHubTestNg0055, TestSize.Level1)
342 {
343     /**
344      * @tc.steps: step1. Create frameNode.
345      */
346     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
347         AceType::MakeRefPtr<Pattern>());
348     auto frameNode1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
349         AceType::MakeRefPtr<Pattern>());
350     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
351     RefPtr<EventHub> eventHub1 = AceType::MakeRefPtr<EventHub>();
352     eventHub->AttachHost(frameNode);
353     eventHub1->AttachHost(frameNode1);
354     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
355     auto focusHub1 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub1)));
356     KeyEvent keyEvent;
357     std::list<RefPtr<FocusHub>> focusNodes;
358     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
359     EXPECT_EQ(itNewFocusNode, focusNodes.end());
360     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
361     auto pipeline = PipelineContext::GetCurrentContext();
362     ASSERT_NE(pipeline, nullptr);
363     focusHub->currentFocus_ = false;
364     auto focusManager = pipeline->GetOrCreateFocusManager();
365     ASSERT_NE(focusManager, nullptr);
366     focusManager->isFocusActive_ = true;
367     keyEvent.action = KeyAction::DOWN;
368     keyEvent.code = KeyCode::KEY_TAB;
369     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
370     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
371     pipeline->eventManager_->isTabJustTriggerOnKeyEvent_ = true;
372     focusHub->currentFocus_ = true;
373     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
374     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_SHIFT_LEFT);
375     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_TAB);
376     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
377 }
378 
379 /**
380  * @tc.name: FocusHubTestNg0056
381  * @tc.desc: Test the function RequestNextFocus.
382  * @tc.type: FUNC
383  */
384 HWTEST_F(FocusHubTestNg, FocusHubTestNg0056, TestSize.Level1)
385 {
386     /**
387      * @tc.steps: step1. Create frameNode.
388      */
389     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
390         AceType::MakeRefPtr<Pattern>());
391     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
392         AceType::MakeRefPtr<ButtonPattern>());
393     child->GetOrCreateFocusHub();
394     frameNode->AddChild(child);
395     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
396     RefPtr<EventHub> eventHub1 = AceType::MakeRefPtr<EventHub>();
397     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
398     auto focusHub1 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub1)));
399     std::list<RefPtr<FocusHub>> focusNodes;
400     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
401     EXPECT_EQ(itNewFocusNode, focusNodes.end());
402     focusHub->focusAlgorithm_.scopeType = ScopeType::PROJECT_AREA;
403     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
404     EXPECT_FALSE(focusHub->RequestNextFocus(FocusStep::LEFT));
405     EXPECT_FALSE(focusHub->RequestNextFocus(FocusStep::SHIFT_TAB));
406     focusHub->focusAlgorithm_.getNextFocusNode = [](FocusStep, const WeakPtr<FocusHub>&, WeakPtr<FocusHub>&)
__anonf9fb217b0302(FocusStep, const WeakPtr<FocusHub>&, WeakPtr<FocusHub>&) 407         -> bool { return false; };
408     EXPECT_FALSE(focusHub->RequestNextFocus(FocusStep::TAB));
409 }
410 
411 /**
412  * @tc.name: FocusHubTestNg0057
413  * @tc.desc: Test the function GetNearestNodeByProjectArea.
414  * @tc.type: FUNC
415  */
416 HWTEST_F(FocusHubTestNg, FocusHubTestNg0057, TestSize.Level1)
417 {
418     /**
419      * @tc.steps: step1. Create frameNode.
420      */
421     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
422         AceType::MakeRefPtr<Pattern>());
423     auto frameNode2 = FrameNodeOnTree::CreateFrameNode(V2::ROW_ETS_TAG, 1, AceType::MakeRefPtr<Pattern>());
424     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
425         AceType::MakeRefPtr<ButtonPattern>());
426     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
427         AceType::MakeRefPtr<ButtonPattern>());
428     child->GetOrCreateFocusHub();
429     child2->GetOrCreateFocusHub();
430     frameNode->AddChild(child);
431     frameNode->AddChild(child2);
432     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
433     RefPtr<EventHub> eventHub2 = AceType::MakeRefPtr<EventHub>();
434     eventHub->AttachHost(frameNode);
435     eventHub2->AttachHost(frameNode2);
436     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
437     auto focusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub2)));
438     focusHub->currentFocus_ = true;
439     std::list<RefPtr<FocusHub>> focusNodes;
440     focusNodes.emplace_back(focusHub2);
441     EXPECT_EQ(focusHub->GetNearestNodeByProjectArea(focusNodes, FocusStep::NONE), nullptr);
442     EXPECT_EQ(focusHub->GetNearestNodeByProjectArea(focusNodes, FocusStep::TAB), nullptr);
443     EXPECT_EQ(focusHub->GetNearestNodeByProjectArea(focusNodes, FocusStep::SHIFT_TAB), nullptr);
444 }
445 
446 /**
447  * @tc.name: FocusHubTestNg058
448  * @tc.desc: Test the function HandleFocusByTabIndex.
449  * @tc.type: FUNC
450  */
451 HWTEST_F(FocusHubTestNg, FocusHubTestNg0058, TestSize.Level1)
452 {
453     /**
454      * @tc.steps1: initialize parameters.
455      */
456     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
457     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
458     KeyEvent keyEvent;
459     TabIndexNodeList tabIndexNodes;
460     keyEvent.action = KeyAction::DOWN;
461     keyEvent.code = KeyCode::KEY_TAB;
462     focusHub->currentFocus_ = true;
463     EXPECT_FALSE(focusHub->HandleFocusByTabIndex(keyEvent));
464 }
465 
466 /**
467  * @tc.name: FocusHubTestNg059
468  * @tc.desc: Test the function HandleFocusByTabIndex.
469  * @tc.type: FUNC
470  */
471 HWTEST_F(FocusHubTestNg, FocusHubTestNg0059, TestSize.Level1)
472 {
473     /**
474      * @tc.steps1: create focusHub and construct allNodes.
475      */
476     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101, AceType::MakeRefPtr<ButtonPattern>());
477     frameNode->GetOrCreateFocusHub();
478     auto focusHub = frameNode->GetFocusHub();
479     frameNode->geometryNode_->SetFrameSize(SizeF(20, 20));
480     frameNode->geometryNode_->SetFrameOffset(OffsetF(20, 20));
481     ASSERT_NE(focusHub, nullptr);
482     std::list<RefPtr<FocusHub>> allNodes;
483 
484     auto focus1 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim<EventHub>(nullptr), FocusType::NODE, true);
485 
486     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode2", 102,
487         AceType::MakeRefPtr<ButtonPattern>());
488     frameNode2->GetOrCreateFocusHub();
489     auto focusHub2 = frameNode2->GetFocusHub();
490     frameNode2->geometryNode_->SetFrameOffset(OffsetF(15, 15));
491     frameNode2->geometryNode_->SetFrameSize(SizeF(30, 30));
492 
493     auto frameNode3 = FrameNodeOnTree::CreateFrameNode("frameNode3", 103,
494         AceType::MakeRefPtr<ButtonPattern>());
495     frameNode3->GetOrCreateFocusHub();
496     auto focusHub3 = frameNode3->GetFocusHub();
497     frameNode3->geometryNode_->SetFrameOffset(OffsetF(20, 20));
498     frameNode3->geometryNode_->SetFrameSize(SizeF(30, 30));
499 
500     auto frameNode4 = FrameNodeOnTree::CreateFrameNode("frameNode4", 104,
501         AceType::MakeRefPtr<ButtonPattern>());
502     frameNode4->GetOrCreateFocusHub();
503     auto focusHub4 = frameNode4->GetFocusHub();
504     frameNode4->geometryNode_->SetFrameOffset(OffsetF(10, 20));
505     frameNode4->geometryNode_->SetFrameSize(SizeF(20, 20));
506 
507     auto frameNode5 = FrameNodeOnTree::CreateFrameNode("frameNode5", 105,
508         AceType::MakeRefPtr<ButtonPattern>());
509     frameNode5->GetOrCreateFocusHub();
510     auto focusHub5 = frameNode5->GetFocusHub();
511     frameNode5->geometryNode_->SetFrameOffset(OffsetF(20, 20));
512     frameNode5->geometryNode_->SetFrameSize(SizeF(30, 30));
513 
514     allNodes.push_back(nullptr);
515     allNodes.push_back(focus1);
516     allNodes.push_back(focusHub);
517     allNodes.push_back(focusHub2);
518     allNodes.push_back(focusHub3);
519     allNodes.push_back(focusHub4);
520     allNodes.push_back(focusHub5);
521 
522     auto res = focusHub->GetNearestNodeByProjectArea(allNodes, FocusStep::UP);
523     ASSERT_NE(res, nullptr);
524     res = focusHub->GetNearestNodeByProjectArea(allNodes, FocusStep::DOWN);
525     ASSERT_NE(res, nullptr);
526     res = focusHub->GetNearestNodeByProjectArea(allNodes, FocusStep::LEFT);
527     ASSERT_NE(res, nullptr);
528     res = focusHub->GetNearestNodeByProjectArea(allNodes, FocusStep::RIGHT);
529     ASSERT_NE(res, nullptr);
530 }
531 
532 /**
533  * @tc.name: FocusHubTestNg064
534  * @tc.desc: Test the function CollectTabIndexNodes.
535  * @tc.type: FUNC
536  */
537 HWTEST_F(FocusHubTestNg, FocusHubTestNg0064, TestSize.Level1)
538 {
539     /**
540      * @tc.steps1: create focusHub and construct allNodes.
541      */
542     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
543         AceType::MakeRefPtr<ButtonPattern>());
544     frameNode->GetOrCreateFocusHub();
545     auto focusHub = frameNode->GetFocusHub();
546     ASSERT_NE(focusHub, nullptr);
547 
548     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
549         AceType::MakeRefPtr<ButtonPattern>());
550     frameNode1->GetOrCreateFocusHub();
551     auto focusHub1 = frameNode1->GetFocusHub();
552 
553     frameNode->children_.push_back(frameNode1);
554     focusHub->focusable_ = true;
555     focusHub->parentFocusable_ = true;
556     focusHub->focusType_ = FocusType::SCOPE;
557 
558     focusHub->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
559     focusHub1->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
560     focusHub1->focusable_ = true;
561     focusHub1->parentFocusable_ = true;
562     focusHub1->focusType_ = FocusType::NODE;
563     focusHub1->focusCallbackEvents_->tabIndex_ = 1;
564 
565     TabIndexNodeList list;
566     focusHub->CollectTabIndexNodes(list);
567     ASSERT_FALSE(list.empty());
568 
569     focusHub->focusCallbackEvents_->tabIndex_ = 1;
570     focusHub->CollectTabIndexNodes(list);
571     ASSERT_FALSE(list.empty());
572 }
573 
574 /**
575  * @tc.name: FocusHubTestNg065
576  * @tc.desc: Test the function AcceptFocusByRectOfLastFocusFlex.
577  * @tc.type: FUNC
578  */
579 HWTEST_F(FocusHubTestNg, FocusHubTestNg0065, TestSize.Level1)
580 {
581     /**
582      * @tc.steps1: create focusHub and construct allNodes.
583      */
584     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
585         AceType::MakeRefPtr<ButtonPattern>());
586     frameNode->GetOrCreateFocusHub();
587     auto focusHub = frameNode->GetFocusHub();
588     ASSERT_NE(focusHub, nullptr);
589 
590     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
591         AceType::MakeRefPtr<ButtonPattern>());
592     frameNode1->GetOrCreateFocusHub();
593     auto focusHub1 = frameNode1->GetFocusHub();
594 
595     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
596         AceType::MakeRefPtr<ButtonPattern>());
597     frameNode2->GetOrCreateFocusHub();
598     auto focusHub2 = frameNode2->GetFocusHub();
599 
600     auto frameNode3 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
601         AceType::MakeRefPtr<ButtonPattern>());
602     frameNode3->GetOrCreateFocusHub();
603     auto focusHub3 = frameNode3->GetFocusHub();
604 
605     auto frameNode4 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
606         AceType::MakeRefPtr<ButtonPattern>());
607     frameNode4->GetOrCreateFocusHub();
608     auto focusHub4 = frameNode4->GetFocusHub();
609 
610     focusHub1->focusable_ = false;
611     frameNode2->geometryNode_ = nullptr;
612     focusHub3->currentFocus_ = true;
613 
614     focusHub->focusable_ = true;
615     focusHub->parentFocusable_ = true;
616     focusHub->focusType_ = FocusType::SCOPE;
617     frameNode->children_.push_back(frameNode1);
618     frameNode->children_.push_back(frameNode2);
619     frameNode->children_.push_back(frameNode3);
620     frameNode->children_.push_back(frameNode4);
621 
622     auto res = focusHub->AcceptFocusByRectOfLastFocusFlex(RectF(0, 0, -1, -1));
623     ASSERT_FALSE(res);
624     focusHub->AcceptFocusByRectOfLastFocusFlex(RectF());
625     focusHub->focusDepend_ = FocusDependence::SELF;
626     focusHub->focusType_ = FocusType::DISABLE;
627     res = focusHub->AcceptFocusByRectOfLastFocusFlex(RectF(0, 0, -1, -1));
628     ASSERT_FALSE(res);
629 }
630 
631 /**
632  * @tc.name: FocusHubTestNg067
633  * @tc.desc: Test the function GetChildFocusNodeByType.
634  * @tc.type: FUNC
635  */
636 HWTEST_F(FocusHubTestNg, FocusHubTestNg0067, TestSize.Level1)
637 {
638     /**
639      * @tc.steps1: create focusHub and construct allNodes.
640      */
641     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
642         AceType::MakeRefPtr<ButtonPattern>());
643     frameNode->GetOrCreateFocusHub();
644     auto focusHub = frameNode->GetFocusHub();
645     ASSERT_NE(focusHub, nullptr);
646 
647     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
648         AceType::MakeRefPtr<ButtonPattern>());
649     frameNode1->GetOrCreateFocusHub();
650     auto focusHub1 = frameNode1->GetFocusHub();
651 
652     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
653         AceType::MakeRefPtr<ButtonPattern>());
654     frameNode2->GetOrCreateFocusHub();
655     auto focusHub2 = frameNode2->GetFocusHub();
656 
657     auto frameNode3 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
658         AceType::MakeRefPtr<ButtonPattern>());
659     frameNode3->GetOrCreateFocusHub();
660     auto focusHub3 = frameNode3->GetFocusHub();
661 
662     focusHub1->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
663     focusHub2->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
664     focusHub3->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
665 
666     focusHub3->focusCallbackEvents_->isDefaultGroupFocus_ = false;
667     focusHub1->focusCallbackEvents_->isDefaultGroupFocus_ = true;
668 
669     focusHub->focusType_ = FocusType::SCOPE;
670     frameNode->children_.push_back(frameNode3);
671     frameNode->children_.push_back(frameNode1);
672 
673     auto res = focusHub->GetChildFocusNodeByType(FocusNodeType::GROUP_DEFAULT);
674     ASSERT_NE(res, nullptr);
675 }
676 
677 /**
678  * @tc.name: FocusHubTestNg068
679  * @tc.desc: Test the function GoToFocusByTabNodeIdx.
680  * @tc.type: FUNC
681  */
682 HWTEST_F(FocusHubTestNg, FocusHubTestNg0068, TestSize.Level1)
683 {
684     /**
685      * @tc.steps1: create focusHub and construct allNodes.
686      */
687     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
688         AceType::MakeRefPtr<ButtonPattern>());
689     frameNode->GetOrCreateFocusHub();
690     auto focusHub = frameNode->GetFocusHub();
691     ASSERT_NE(focusHub, nullptr);
692 
693     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
694         AceType::MakeRefPtr<ButtonPattern>());
695     frameNode1->GetOrCreateFocusHub();
696     auto focusHub1 = frameNode1->GetFocusHub();
697 
698     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
699         AceType::MakeRefPtr<ButtonPattern>());
700     frameNode2->GetOrCreateFocusHub();
701     auto focusHub2 = frameNode2->GetFocusHub();
702 
703     auto frameNode3 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
704         AceType::MakeRefPtr<ButtonPattern>());
705     frameNode3->GetOrCreateFocusHub();
706     auto focusHub3 = frameNode3->GetFocusHub();
707 
708     auto frameNode4 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
709         AceType::MakeRefPtr<ButtonPattern>());
710     frameNode4->GetOrCreateFocusHub();
711     auto focusHub4 = frameNode4->GetFocusHub();
712 
713     focusHub1->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
714     focusHub2->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
715     focusHub3->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
716     focusHub4->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
717 
718     frameNode4->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode2));
719     focusHub1->focusType_ = FocusType::SCOPE;
720     focusHub2->focusType_ = FocusType::SCOPE;
721     focusHub3->focusCallbackEvents_->isDefaultGroupFocus_ = true;
722     focusHub4->focusCallbackEvents_->isDefaultGroupFocus_ = true;
723     focusHub2->focusable_ = false;
724 
725     frameNode1->children_.push_back(frameNode3);
726     frameNode2->children_.push_back(frameNode4);
727 
728     TabIndexNodeList list;
729     list.push_back({1, AceType::WeakClaim(AceType::RawPtr(focusHub1))});
730     list.push_back({2, AceType::WeakClaim(AceType::RawPtr(focusHub2))});
731 
732     focusHub->focusType_ = FocusType::SCOPE;
733     auto res = focusHub->GoToFocusByTabNodeIdx(list, 0);
734     ASSERT_TRUE(res);
735     res = focusHub->GoToFocusByTabNodeIdx(list, 1);
736     ASSERT_FALSE(res);
737 }
738 
739 /**
740  * @tc.name: FocusHubTestNg069
741  * @tc.desc: Test the function CollectTabIndexNodes.
742  * @tc.type: FUNC
743  */
744 HWTEST_F(FocusHubTestNg, FocusHubTestNg0069, TestSize.Level1)
745 {
746     /**
747      * @tc.steps1: create focusHub and construct allNodes.
748      */
749     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
750         AceType::MakeRefPtr<ButtonPattern>());
751     frameNode->GetOrCreateFocusHub();
752     auto focusHub = frameNode->GetFocusHub();
753     ASSERT_NE(focusHub, nullptr);
754 
755     focusHub->focusable_ = false;
756     focusHub->focusType_ = FocusType::SCOPE;
757     TabIndexNodeList list;
758     focusHub->CollectTabIndexNodes(list);
759     ASSERT_TRUE(list.empty());
760 }
761 
762 /**
763  * @tc.name: FocusHubTestNg070
764  * @tc.desc: Test the function IsFocusableWholePath.
765  * @tc.type: FUNC
766  */
767 HWTEST_F(FocusHubTestNg, FocusHubTestNg0070, TestSize.Level1)
768 {
769     /**
770      * @tc.steps1: create focusHub and construct allNodes.
771      */
772     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
773         AceType::MakeRefPtr<ButtonPattern>());
774     frameNode->GetOrCreateFocusHub();
775     auto focusHub = frameNode->GetFocusHub();
776     ASSERT_NE(focusHub, nullptr);
777 
778     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
779         AceType::MakeRefPtr<ButtonPattern>());
780     frameNode1->GetOrCreateFocusHub();
781     auto focusHub1 = frameNode1->GetFocusHub();
782 
783     focusHub->focusType_ = FocusType::SCOPE;
784     frameNode1->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
785     frameNode->children_.push_back(frameNode1);
786 
787     ASSERT_TRUE(focusHub->IsFocusableNode());
788     ASSERT_TRUE(focusHub->IsFocusableScope());
789     auto res = focusHub1->IsFocusableWholePath();
790     ASSERT_TRUE(res);
791 }
792 
793 /**
794  * @tc.name: FocusHubTestNg071
795  * @tc.desc: Test the function IsFocusableScopeByTab.
796  * @tc.type: FUNC
797  */
798 HWTEST_F(FocusHubTestNg, FocusHubTestNg0071, TestSize.Level1)
799 {
800     /**
801      * @tc.steps1: create focusHub and construct allNodes.
802      */
803     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
804         AceType::MakeRefPtr<ButtonPattern>());
805     frameNode->GetOrCreateFocusHub();
806     auto focusHub = frameNode->GetFocusHub();
807     ASSERT_NE(focusHub, nullptr);
808 
809     focusHub->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
810     focusHub->focusCallbackEvents_->tabIndex_ = 1;
811 
812     auto res = focusHub->IsFocusableScopeByTab();
813     ASSERT_FALSE(res);
814 }
815 
816 /**
817  * @tc.name: FocusHubTestNg072
818  * @tc.desc: Test the function AcceptFocusOfSpecifyChild.
819  * @tc.type: FUNC
820  */
821 HWTEST_F(FocusHubTestNg, FocusHubTestNg0072, TestSize.Level1)
822 {
823     /**
824      * @tc.steps1: create focusHub and construct allNodes.
825      */
826     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
827         AceType::MakeRefPtr<ButtonPattern>());
828     frameNode->GetOrCreateFocusHub();
829     auto focusHub = frameNode->GetFocusHub();
830     ASSERT_NE(focusHub, nullptr);
831 
832     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
833         AceType::MakeRefPtr<ButtonPattern>());
834     frameNode1->GetOrCreateFocusHub();
835     auto focusHub1 = frameNode1->GetFocusHub();
836 
837     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
838         AceType::MakeRefPtr<ButtonPattern>());
839     frameNode2->GetOrCreateFocusHub();
840     auto focusHub2 = frameNode2->GetFocusHub();
841 
842     focusHub1->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
843     focusHub2->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
844 
845     focusHub->focusType_ = FocusType::SCOPE;
846     focusHub->AcceptFocusOfSpecifyChild(FocusStep::TAB);
847     frameNode->children_.push_back(frameNode1);
848     frameNode->children_.push_back(frameNode2);
849     focusHub1->focusable_ = false;
850     auto res = focusHub->AcceptFocusOfSpecifyChild(FocusStep::TAB);
851     ASSERT_TRUE(res);
852     res = focusHub->AcceptFocusOfSpecifyChild(FocusStep::SHIFT_TAB);
853     ASSERT_TRUE(res);
854     res = focusHub->AcceptFocusOfSpecifyChild(FocusStep::DOWN);
855     ASSERT_FALSE(res);
856     focusHub2->focusable_ = false;
857     res = focusHub->AcceptFocusOfSpecifyChild(FocusStep::SHIFT_TAB);
858     ASSERT_FALSE(res);
859     res = focusHub->AcceptFocusOfSpecifyChild(FocusStep::TAB);
860     ASSERT_FALSE(res);
861 }
862 
863 /**
864  * @tc.name: FocusHubTestNg073
865  * @tc.desc: Test the function ClearAllFocusState.
866  * @tc.type: FUNC
867  */
868 HWTEST_F(FocusHubTestNg, FocusHubTestNg0073, TestSize.Level1)
869 {
870     /**
871      * @tc.steps1: create focusHub and construct allNodes.
872      */
873     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
874         AceType::MakeRefPtr<ButtonPattern>());
875     frameNode->GetOrCreateFocusHub();
876     auto focusHub = frameNode->GetFocusHub();
877     ASSERT_NE(focusHub, nullptr);
878 
879     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
880         AceType::MakeRefPtr<ButtonPattern>());
881     frameNode1->GetOrCreateFocusHub();
882     auto focusHub1 = frameNode1->GetFocusHub();
883 
884     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
885     focusHub->ClearAllFocusState();
886     ASSERT_NE(focusHub->lastWeakFocusNode_.Upgrade(), nullptr);
887 
888     /**
889      * @tc.steps: step1. Create frameNode.
890      */
891     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
892     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
893     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<AppTheme>()));
894 }
895 
896 /**
897  * @tc.name: FocusHubTestNg074
898  * @tc.desc: Test the function PaintAllFocusState.
899  * @tc.type: FUNC
900  */
901 HWTEST_F(FocusHubTestNg, FocusHubTestNg0074, TestSize.Level1)
902 {
903     /**
904      * @tc.steps1: create focusHub and construct allNodes.
905      */
906     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
907     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
908     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<AppTheme>()));
909     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
910         AceType::MakeRefPtr<ButtonPattern>());
911     frameNode->GetOrCreateFocusHub();
912     auto focusHub = frameNode->GetFocusHub();
913     ASSERT_NE(focusHub, nullptr);
914     auto context = PipelineContext::GetCurrentContext();
915     ASSERT_NE(context, nullptr);
916     auto focusManager = context->GetOrCreateFocusManager();
917     ASSERT_NE(focusManager, nullptr);
918     focusManager->isFocusActive_ = true;
919 
920     focusHub->focusStyleType_ = FocusStyleType::OUTER_BORDER;
921     auto res = focusHub->PaintAllFocusState();
922     ASSERT_TRUE(res);
923 }
924 
925 /**
926  * @tc.name: FocusHubTestNg075
927  * @tc.desc: Test the function PaintFocusState.
928  * @tc.type: FUNC
929  */
930 HWTEST_F(FocusHubTestNg, FocusHubTestNg0075, TestSize.Level1)
931 {
932     /**
933      * @tc.steps1: create focusHub and construct allNodes.
934      */
935     auto themeManager = AceType::MakeRefPtr<MockThemeManager>();
936     MockPipelineContext::GetCurrent()->SetThemeManager(themeManager);
937     EXPECT_CALL(*themeManager, GetTheme(_)).WillRepeatedly(Return(AceType::MakeRefPtr<AppTheme>()));
938     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
939         AceType::MakeRefPtr<ButtonPattern>());
940     frameNode->GetOrCreateFocusHub();
941     auto focusHub = frameNode->GetFocusHub();
942     auto context = PipelineContext::GetCurrentContext();
943     ASSERT_NE(context, nullptr);
944     auto focusManager = context->GetOrCreateFocusManager();
945     ASSERT_NE(focusManager, nullptr);
946     focusManager->isFocusActive_ = true;
947 
__anonf9fb217b0402(RoundRect& rect) 948     auto func = [](RoundRect& rect) { rect.rect_ = RectF(); };
949     focusHub->getInnerFocusRectFunc_ = func;
950     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_REGION;
951     auto res = focusHub->PaintFocusState();
952     ASSERT_TRUE(res);
953 }
954 
955 /**
956  * @tc.name: FocusHubTestNg076
957  * @tc.desc: Test the function OnFocusScope.
958  * @tc.type: FUNC
959  */
960 HWTEST_F(FocusHubTestNg, FocusHubTestNg0076, TestSize.Level1)
961 {
962     /**
963      * @tc.steps1: create focusHub and construct allNodes.
964      */
965     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
966         AceType::MakeRefPtr<ButtonPattern>());
967     frameNode->GetOrCreateFocusHub();
968     auto focusHub = frameNode->GetFocusHub();
969     ASSERT_NE(focusHub, nullptr);
970 
971     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
972         AceType::MakeRefPtr<ButtonPattern>());
973     frameNode1->GetOrCreateFocusHub();
974     auto focusHub1 = frameNode1->GetFocusHub();
975 
976     focusHub1->focusable_ =false;
977     focusHub->focusType_ = FocusType::SCOPE;
978     frameNode->children_.push_back(frameNode1);
979     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
980     focusHub->OnFocusScope();
981     ASSERT_FALSE(focusHub1->focusable_);
982 }
983 
984 /**
985  * @tc.name: FocusHubTestNg077
986  * @tc.desc: Test the function OnFocus.
987  * @tc.type: FUNC
988  */
989 HWTEST_F(FocusHubTestNg, FocusHubTestNg0077, TestSize.Level1)
990 {
991     /**
992      * @tc.steps1: create focusHub and construct allNodes.
993      */
994     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
995         AceType::MakeRefPtr<ButtonPattern>());
996     frameNode->GetOrCreateFocusHub();
997     auto focusHub = frameNode->GetFocusHub();
998     ASSERT_NE(focusHub, nullptr);
999 
1000     focusHub->focusType_ = FocusType::DISABLE;
1001     focusHub->OnFocus();
1002     ASSERT_EQ(focusHub->focusType_, FocusType::DISABLE);
1003 }
1004 
1005 /**
1006  * @tc.name: FocusHubTestNg078
1007  * @tc.desc: Test the function CalculatePosition.
1008  * @tc.type: FUNC
1009  */
1010 HWTEST_F(FocusHubTestNg, FocusHubTestNg0078, TestSize.Level1)
1011 {
1012     /**
1013      * @tc.steps1: create focusHub and construct allNodes.
1014      */
1015     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1016         AceType::MakeRefPtr<ButtonPattern>());
1017     frameNode->GetOrCreateFocusHub();
1018     auto focusHub = frameNode->GetFocusHub();
1019     ASSERT_NE(focusHub, nullptr);
1020 
1021     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1022         AceType::MakeRefPtr<ButtonPattern>());
1023     frameNode1->GetOrCreateFocusHub();
1024     auto focusHub1 = frameNode1->GetFocusHub();
1025     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
1026     frameNode1->geometryNode_ = nullptr;
1027     auto res = focusHub->CalculatePosition();
1028     ASSERT_FALSE(res);
1029 }
1030 
1031 /**
1032  * @tc.name: FocusHubTestNg079
1033  * @tc.desc: Test the function TryRequestFocus.
1034  * @tc.type: FUNC obsolete
1035  */
1036 HWTEST_F(FocusHubTestNg, FocusHubTestNg0079, TestSize.Level1)
1037 {
1038     /**
1039      * @tc.steps1: create focusHub and construct allNodes.
1040      */
1041     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1042         AceType::MakeRefPtr<ButtonPattern>());
1043     frameNode->GetOrCreateFocusHub();
1044     auto focusHub = frameNode->GetFocusHub();
1045     ASSERT_NE(focusHub, nullptr);
1046 
1047     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1048         AceType::MakeRefPtr<ButtonPattern>());
1049     frameNode1->GetOrCreateFocusHub();
1050     auto focusHub1 = frameNode1->GetFocusHub();
1051     auto res = focusHub->TryRequestFocus(focusHub1, RectF(), FocusStep::LEFT);
1052     ASSERT_TRUE(res);
1053 }
1054 
1055 /**
1056  * @tc.name: FocusHubTestNg080
1057  * @tc.desc: Test the function GoToNextFocusLinear.
1058  * @tc.type: FUNC
1059  */
1060 HWTEST_F(FocusHubTestNg, FocusHubTestNg0080, TestSize.Level1)
1061 {
1062     /**
1063      * @tc.steps1: create focusHub and construct allNodes.
1064      */
1065     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1066         AceType::MakeRefPtr<ButtonPattern>());
1067     frameNode->GetOrCreateFocusHub();
1068     auto focusHub = frameNode->GetFocusHub();
1069     ASSERT_NE(focusHub, nullptr);
1070 
1071     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1072         AceType::MakeRefPtr<ButtonPattern>());
1073     frameNode1->GetOrCreateFocusHub();
1074     auto focusHub1 = frameNode1->GetFocusHub();
1075 
1076     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1077         AceType::MakeRefPtr<ButtonPattern>());
1078     frameNode2->GetOrCreateFocusHub();
1079     auto focusHub2 = frameNode2->GetFocusHub();
1080 
1081     auto frameNode3 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1082         AceType::MakeRefPtr<ButtonPattern>());
1083     frameNode3->GetOrCreateFocusHub();
1084     auto focusHub3 = frameNode3->GetFocusHub();
1085 
1086     auto frameNode4 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1087         AceType::MakeRefPtr<ButtonPattern>());
1088     frameNode4->GetOrCreateFocusHub();
1089     auto focusHub4 = frameNode4->GetFocusHub();
1090 
1091     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub4));
1092     frameNode->children_.push_back(frameNode1);
1093     frameNode->children_.push_back(frameNode2);
1094     frameNode->children_.push_back(frameNode3);
1095     frameNode->children_.push_back(frameNode4);
1096 
1097     focusHub3->focusable_ = false;
1098 
1099     auto res = focusHub->GoToNextFocusLinear(FocusStep::SHIFT_TAB, RectF());
1100     ASSERT_TRUE(res);
1101     focusHub2->focusable_ = false;
1102     res = focusHub->GoToNextFocusLinear(FocusStep::SHIFT_TAB, RectF());
1103     ASSERT_TRUE(res);
1104     focusHub1->focusable_ = false;
1105     res = focusHub->GoToNextFocusLinear(FocusStep::SHIFT_TAB, RectF());
1106     ASSERT_FALSE(res);
1107     focusHub->lastWeakFocusNode_ = AceType::WeakClaim<FocusHub>(nullptr);
1108     focusHub4->focusable_ = false;
1109     res = focusHub->GoToNextFocusLinear(FocusStep::TAB, RectF());
1110     ASSERT_FALSE(res);
1111 }
1112 
1113 /**
1114  * @tc.name: FocusHubTestNg081
1115  * @tc.desc: Test the function SwitchFocus.
1116  * @tc.type: FUNC
1117  */
1118 HWTEST_F(FocusHubTestNg, FocusHubTestNg0081, TestSize.Level1)
1119 {
1120     /**
1121      * @tc.steps1: create focusHub and construct allNodes.
1122      */
1123     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1124         AceType::MakeRefPtr<ButtonPattern>());
1125     frameNode->GetOrCreateFocusHub();
1126     auto focusHub = frameNode->GetFocusHub();
1127     ASSERT_NE(focusHub, nullptr);
1128 
1129     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1130         AceType::MakeRefPtr<ButtonPattern>());
1131     frameNode1->GetOrCreateFocusHub();
1132     auto focusHub1 = frameNode1->GetFocusHub();
1133 
1134     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1135         AceType::MakeRefPtr<ButtonPattern>());
1136     frameNode2->GetOrCreateFocusHub();
1137     auto focusHub2 = frameNode2->GetFocusHub();
1138 
1139     focusHub->currentFocus_ = true;
1140     focusHub->focusType_ = FocusType::SCOPE;
1141     frameNode->children_.push_back(frameNode1);
1142     frameNode->children_.push_back(frameNode2);
1143     focusHub->lastWeakFocusNode_ = AceType::WeakClaim<FocusHub>(nullptr);
1144     focusHub->SwitchFocus(focusHub2);
1145     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
1146     focusHub1->currentFocus_ = true;
1147     focusHub->SwitchFocus(focusHub2);
1148     ASSERT_FALSE(focusHub1->currentFocus_);
1149 }
1150 
1151 /**
1152  * @tc.name: FocusHubTestNg083
1153  * @tc.desc: Test the function FocusToHeadOrTailChild.
1154  * @tc.type: FUNC
1155  */
1156 HWTEST_F(FocusHubTestNg, FocusHubTestNg0083, TestSize.Level1)
1157 {
1158     /**
1159      * @tc.steps1: create focusHub and construct allNodes.
1160      */
1161     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1162         AceType::MakeRefPtr<ButtonPattern>());
1163     frameNode->GetOrCreateFocusHub();
1164     auto focusHub = frameNode->GetFocusHub();
1165     ASSERT_NE(focusHub, nullptr);
1166 
1167     auto res = focusHub->FocusToHeadOrTailChild(true);
1168     ASSERT_TRUE(res);
1169 }
1170 
1171 /**
1172  * @tc.name: FocusHubTestNg0084
1173  * @tc.desc: Test the function OnKeyEventScope.
1174  * @tc.type: FUNC
1175  */
1176 HWTEST_F(FocusHubTestNg, FocusHubTestNg0084, TestSize.Level1)
1177 {
1178     /**
1179      * @tc.steps: step1. Create frameNode.
1180      */
1181     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1182         AceType::MakeRefPtr<Pattern>());
1183     auto frameNode1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1184         AceType::MakeRefPtr<Pattern>());
1185     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1186     RefPtr<EventHub> eventHub1 = AceType::MakeRefPtr<EventHub>();
1187     eventHub->AttachHost(frameNode);
1188     eventHub1->AttachHost(frameNode1);
1189     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1190     auto focusHub1 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub1)));
1191     KeyEvent keyEvent;
1192     std::list<RefPtr<FocusHub>> focusNodes;
1193     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1194     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1195     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
1196     auto pipeline = PipelineContext::GetCurrentContext();
1197     focusHub->currentFocus_ = false;
1198     auto focusManager = pipeline->GetOrCreateFocusManager();
1199     ASSERT_NE(focusManager, nullptr);
1200     focusManager->isFocusActive_ = true;
1201     keyEvent.action = KeyAction::DOWN;
1202     keyEvent.code = KeyCode::KEY_TAB;
1203     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
1204     pipeline->eventManager_->isTabJustTriggerOnKeyEvent_ = true;
1205     focusHub->currentFocus_ = true;
1206     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_SHIFT_LEFT);
1207     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1208     keyEvent.code = KeyCode::TV_CONTROL_UP;
1209     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1210     keyEvent.code = KeyCode::TV_CONTROL_DOWN;
1211     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1212     keyEvent.code = KeyCode::TV_CONTROL_LEFT;
1213     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1214     keyEvent.code = KeyCode::TV_CONTROL_RIGHT;
1215     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1216     keyEvent.code = KeyCode::KEY_MOVE_HOME;
1217     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1218     keyEvent.code = KeyCode::KEY_MOVE_END;
1219     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1220     keyEvent.code = KeyCode::KEY_FOCUS;
1221     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1222 }
1223 
1224 /**
1225  * @tc.name: FocusHubTestNg0091
1226  * @tc.desc: Test the function FocusToHeadOrTailChild.
1227  * @tc.type: FUNC
1228  */
1229 HWTEST_F(FocusHubTestNg, FocusHubTestNg0091, TestSize.Level1)
1230 {
1231     /**
1232      * @tc.steps: step1. Create frameNode.
1233      */
1234     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1235         AceType::MakeRefPtr<ButtonPattern>());
1236     frameNode->GetOrCreateFocusHub();
1237     auto eventHub = AceType::MakeRefPtr<EventHub>();
1238     eventHub->AttachHost(frameNode);
1239     auto focusHub = frameNode->GetFocusHub();
1240     ASSERT_NE(focusHub, nullptr);
1241     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1242         AceType::MakeRefPtr<ButtonPattern>());
1243     frameNode1->GetOrCreateFocusHub();
1244     auto focusHub1 = frameNode1->GetFocusHub();
1245     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_REGION;
1246     focusHub->focusType_ = FocusType::SCOPE;
1247     frameNode1->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1248     frameNode->children_.push_back(frameNode1);
1249     ASSERT_TRUE(focusHub->IsFocusableNode());
1250     ASSERT_TRUE(focusHub->IsFocusableScope());
1251     focusHub->focusDepend_ = FocusDependence::AUTO;
1252     EXPECT_TRUE(focusHub->FocusToHeadOrTailChild(true));
1253     focusHub->focusDepend_ = FocusDependence::SELF;
1254     EXPECT_TRUE(focusHub->FocusToHeadOrTailChild(false));
1255     focusHub->focusDepend_ = FocusDependence::CHILD;
1256     EXPECT_TRUE(focusHub->FocusToHeadOrTailChild(false));
1257 }
1258 
1259 /**
1260  * @tc.name: FocusHubTestNg0093
1261  * @tc.desc: Test the function IsNeedPaintFocusState.
1262  * @tc.type: FUNC
1263  */
1264 HWTEST_F(FocusHubTestNg, FocusHubTestNg0093, TestSize.Level1)
1265 {
1266     /**
1267      * @tc.steps: step1. Create frameNode.
1268      */
1269     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1270         AceType::MakeRefPtr<ButtonPattern>());
1271     frameNode->GetOrCreateFocusHub();
1272     auto focusHub = frameNode->GetFocusHub();
1273     ASSERT_NE(focusHub, nullptr);
1274     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1275         AceType::MakeRefPtr<ButtonPattern>());
1276     frameNode1->GetOrCreateFocusHub();
1277     auto focusHub1 = frameNode1->GetFocusHub();
1278     focusHub->focusType_ = FocusType::SCOPE;
1279     frameNode1->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1280     frameNode->children_.push_back(frameNode1);
1281     ASSERT_TRUE(focusHub->IsFocusableNode());
1282     focusHub->currentFocus_ = true;
1283     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
1284     ASSERT_NE(focusHub->lastWeakFocusNode_.Upgrade(), nullptr);
1285     EXPECT_TRUE(focusHub->IsNeedPaintFocusState());
1286     focusHub->focusDepend_ = FocusDependence::SELF;
1287     EXPECT_TRUE(focusHub->IsNeedPaintFocusState());
1288     focusHub->focusType_ = FocusType::NODE;
1289     EXPECT_TRUE(focusHub->IsNeedPaintFocusState());
1290 }
1291 
1292 /**
1293  * @tc.name: FocusHubTestNg0094
1294  * @tc.desc: Test the function HandleFocusByTabIndex.
1295  * @tc.type: FUNC
1296  */
1297 HWTEST_F(FocusHubTestNg, FocusHubTestNg0094, TestSize.Level1)
1298 {
1299     /**
1300      * @tc.steps1: initialize parameters.
1301      */
1302     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1303         AceType::MakeRefPtr<ButtonPattern>());
1304     frameNode->GetOrCreateFocusHub();
1305     auto focusHub = frameNode->GetFocusHub();
1306     ASSERT_NE(focusHub, nullptr);
1307     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1308         AceType::MakeRefPtr<ButtonPattern>());
1309     frameNode1->GetOrCreateFocusHub();
1310     auto focusHub1 = frameNode1->GetFocusHub();
1311     frameNode->children_.push_back(frameNode1);
1312     focusHub->focusable_ = true;
1313     focusHub->parentFocusable_ = true;
1314     focusHub->focusType_ = FocusType::SCOPE;
1315     focusHub->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
1316     focusHub1->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
1317     focusHub1->focusable_ = true;
1318     focusHub1->parentFocusable_ = true;
1319     focusHub1->focusType_ = FocusType::NODE;
1320     focusHub1->focusCallbackEvents_->tabIndex_ = 1;
1321     focusHub1->currentFocus_ = true;
1322     KeyEvent keyEvent;
1323     TabIndexNodeList tabIndexNodes;
1324     keyEvent.action = KeyAction::DOWN;
1325     keyEvent.code = KeyCode::KEY_TAB;
1326     auto pipeline = PipelineContext::GetCurrentContext();
1327     pipeline->eventManager_->isTabJustTriggerOnKeyEvent_ = false;
1328     auto context = NG::PipelineContext::GetCurrentContextSafely();
1329     context->isFocusingByTab_ = false;
1330     EXPECT_TRUE(focusHub->HandleFocusByTabIndex(keyEvent));
1331 }
1332 
1333 /**
1334  * @tc.name: FocusHubTestNg0096
1335  * @tc.desc: Test the function OnFocusScope.
1336  * @tc.type: FUNC
1337  */
1338 HWTEST_F(FocusHubTestNg, FocusHubTestNg0096, TestSize.Level1)
1339 {
1340     /**
1341      * @tc.steps: step1. Create frameNode.
1342      */
1343     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1344         AceType::MakeRefPtr<Pattern>());
1345     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1346         AceType::MakeRefPtr<ButtonPattern>());
1347     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1348         AceType::MakeRefPtr<ButtonPattern>());
1349     child->GetOrCreateFocusHub();
1350     child2->GetOrCreateFocusHub();
1351     frameNode->AddChild(child);
1352     frameNode->AddChild(child2);
1353     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1354     auto eventHub2 = AceType::MakeRefPtr<EventHub>();
1355     eventHub->AttachHost(frameNode);
1356     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1357     focusHub->currentFocus_ = true;
1358     std::list<RefPtr<FocusHub>> focusNodes;
1359     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1360     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1361     focusHub->OnFocusScope(true);
1362     frameNode->Clean(false, false);
1363     focusNodes.clear();
1364     EXPECT_TRUE(focusNodes.empty());
1365     focusHub->focusDepend_ = FocusDependence::AUTO;
1366     focusHub->OnFocusScope(true);
1367     focusHub->focusDepend_ = FocusDependence::SELF;
1368     focusHub->OnFocusScope(true);
1369     EXPECT_TRUE(focusHub->currentFocus_);
1370 }
1371 
1372 /**
1373  * @tc.name: FocusHubTestNg0097
1374  * @tc.desc: Test the function RequestFocusImmediatelyById.
1375  * @tc.type: FUNC
1376  */
1377 HWTEST_F(FocusHubTestNg, FocusHubTestNg0097, TestSize.Level1)
1378 {
1379     /**
1380      * @tc.steps1: create focusHub and construct allNodes.
1381      */
1382     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1383         AceType::MakeRefPtr<ButtonPattern>());
1384     frameNode->GetOrCreateFocusHub();
1385     auto focusHub = frameNode->GetFocusHub();
1386     ASSERT_NE(focusHub, nullptr);
1387     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("123", 123,
1388         AceType::MakeRefPtr<ButtonPattern>());
1389     frameNode1->GetOrCreateFocusHub();
1390     auto focusHub1 = frameNode1->GetFocusHub();
1391     frameNode1->propInspectorId_ = "123";
1392     auto frameNode2 = FrameNodeOnTree::CreateFrameNode("frameNode", 102,
1393         AceType::MakeRefPtr<ButtonPattern>());
1394     frameNode2->GetOrCreateFocusHub();
1395     auto focusHub2 = frameNode2->GetFocusHub();
1396     frameNode->children_.push_back(frameNode2);
1397     frameNode->children_.push_back(frameNode1);
1398     focusHub->focusType_ = FocusType::SCOPE;
1399     focusHub1->parentFocusable_ = false;
1400     auto res = focusHub->RequestFocusImmediatelyById("123");
1401     ASSERT_FALSE(res);
1402 }
1403 
1404 /**
1405  * @tc.name: FocusHubTestNg0098
1406  * @tc.desc: Test functions OnBlurScope.
1407  * @tc.type: FUNC
1408  */
1409 HWTEST_F(FocusHubTestNg, FocusHubTestNg0098, TestSize.Level1)
1410 {
1411     /**
1412      * @tc.steps1: initialize parameters.
1413      */
1414     auto frameNode = FrameNodeOnTree::CreateFrameNode(V2::ROOT_ETS_TAG, 101,
1415         AceType::MakeRefPtr<ButtonPattern>());
1416     frameNode->GetOrCreateFocusHub();
1417     auto focusHub = frameNode->GetFocusHub();
1418     ASSERT_NE(focusHub, nullptr);
1419     auto frameNode1 = FrameNodeOnTree::CreateFrameNode(V2::ROOT_ETS_TAG, 101,
1420         AceType::MakeRefPtr<ButtonPattern>());
1421     frameNode1->GetOrCreateFocusHub();
1422     auto focusHub1 = frameNode1->GetFocusHub();
1423     focusHub->focusType_ = FocusType::SCOPE;
1424     frameNode1->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1425     frameNode->children_.push_back(frameNode1);
1426     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(focusHub1));
1427     focusHub->OnBlurScope();
1428     ASSERT_NE(focusHub->lastWeakFocusNode_.Upgrade(), nullptr);
1429 }
1430 
1431 /**
1432  * @tc.name: FocusHubTestNg0100
1433  * @tc.desc: Test the function IsImplicitFocusableScope.
1434  * @tc.type: FUNC
1435  */
1436 HWTEST_F(FocusHubTestNg, FocusHubTestNg0100, TestSize.Level1)
1437 {
1438     /**
1439      * @tc.steps1: initialize parameters.
1440      */
1441     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1442     eventHub->SetEnabled(true);
1443     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1444 
1445     /**
1446      * @tc.steps2: Set focusHub to scope type.
1447      * @tc.expected: The default value of focusable_ is false.
1448      */
1449     focusHub->focusType_ = FocusType::SCOPE;
1450     EXPECT_FALSE(focusHub->IsImplicitFocusableScope());
1451 
1452     /**
1453      * @tc.steps3: Set focusable_ to true implicitly.
1454      * @tc.expected: The value of focusable_ is true.
1455      */
1456     focusHub->SetFocusable(true, false);
1457     EXPECT_TRUE(focusHub->IsImplicitFocusableScope());
1458 }
1459 
1460 /**
1461  * @tc.name: LostFocusToViewRoot001
1462  * @tc.desc: Test the function LostFocusToViewRoot.
1463  * @tc.type: FUNC
1464  */
1465 HWTEST_F(FocusHubTestNg, LostFocusToViewRoot001, TestSize.Level1)
1466 {
1467     /**
1468      * @tc.steps1: create focusHub and construct allNodes.
1469      */
1470     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1471         AceType::MakeRefPtr<ButtonPattern>());
1472     frameNode->GetOrCreateFocusHub();
1473     auto focusHub = frameNode->GetFocusHub();
1474      /**
1475      * @tc.Calling LostFocusToViewRoot to increase coverage
1476      */
1477     focusHub->LostFocusToViewRoot();
1478     ASSERT_TRUE(focusHub->currentFocus_ == false);
1479 }
1480 
1481 /*
1482  * @tc.name: SetEnabled01
1483  * @tc.desc: Test the function SetEnabled.
1484  * @tc.type: FUNC
1485  */
1486 HWTEST_F(FocusHubTestNg, SetEnabled001, TestSize.Level1)
1487 {
1488     /**
1489      * @tc.steps1: create focusHub and construct allNodes.
1490      */
1491     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1492         AceType::MakeRefPtr<ButtonPattern>());
1493     frameNode->GetOrCreateFocusHub();
1494     auto focusHub = frameNode->GetFocusHub();
1495     ASSERT_NE(focusHub, nullptr);
1496 
1497     focusHub->currentFocus_ = true;
1498 
1499     focusHub->SetEnabled(false);
1500     ASSERT_FALSE(focusHub->currentFocus_);
1501 }
1502 
1503 /**
1504  * @tc.name: FocusHubTestNg0101
1505  * @tc.desc: Test the function IsSyncRequestFocusable.
1506  * @tc.type: FUNC
1507  */
1508 HWTEST_F(FocusHubTestNg, FocusHubTestNg0101, TestSize.Level1)
1509 {
1510     /**
1511      * @tc.steps1: initialize parameters.
1512      */
1513     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1514     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1515     eventHub->SetEnabled(false);
1516 
1517     /**
1518      * @tc.steps2: call the function IsSyncRequestFocusable with FocusType::NODE
1519      * @tc.expected: The return value of IsSyncRequestFocusable is false.
1520      */
1521     focusHub->SetFocusType(FocusType::NODE);
1522     EXPECT_FALSE(focusHub->IsSyncRequestFocusable());
1523 
1524     /**
1525      * @tc.steps3: call the function IsSyncRequestFocusable with FocusType::SCOPE
1526      * @tc.expected: The return value of IsSyncRequestFocusable is false.
1527      */
1528     focusHub->SetFocusType(FocusType::SCOPE);
1529     EXPECT_FALSE(focusHub->IsSyncRequestFocusable());
1530 
1531     /**
1532      * @tc.steps4: call the function IsSyncRequestFocusable with FocusType::DISABLE
1533      * @tc.expected: The return value of IsSyncRequestFocusable is false.
1534      */
1535     focusHub->SetFocusType(FocusType::DISABLE);
1536     EXPECT_FALSE(focusHub->IsSyncRequestFocusable());
1537 }
1538 
1539 /**
1540  * @tc.name: FocusHubTestNg0102
1541  * @tc.desc: Test the function ScrollByOffsetToParent.
1542  * @tc.type: FUNC
1543  */
1544 HWTEST_F(FocusHubTestNg, FocusHubTestNg0102, TestSize.Level1)
1545 {
1546     /**
1547      * @tc.steps1: create focusHub and construct allNodes.
1548      */
1549     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 102,
1550         AceType::MakeRefPtr<ButtonPattern>());
1551     frameNode->GetOrCreateFocusHub();
1552     auto focusHub = frameNode->GetFocusHub();
1553     ASSERT_NE(focusHub, nullptr);
1554 
1555     auto textFieldNode = FrameNodeOnTree::CreateFrameNode("frameNode", 103,
1556         AceType::MakeRefPtr<TextFieldPattern>());
1557     textFieldNode->GetOrCreateFocusHub();
1558     auto textFieldFocusHub = textFieldNode->GetFocusHub();
1559     ASSERT_NE(textFieldNode, nullptr);
1560     ASSERT_FALSE(focusHub->ScrollByOffsetToParent(textFieldNode));
1561 
1562     auto listNode = FrameNodeOnTree::CreateFrameNode("frameNode", 104,
1563         AceType::MakeRefPtr<ListPattern>());
1564     listNode->GetOrCreateFocusHub();
1565     auto listFocusHub = listNode->GetFocusHub();
1566     ASSERT_NE(listFocusHub, nullptr);
1567     ASSERT_FALSE(focusHub->ScrollByOffsetToParent(listNode));
1568 }
1569 
1570 
1571 /**
1572  * @tc.name: FocusHubTestNg0103
1573  * @tc.desc: Test the function AcceptFocusOfPriorityChild.
1574  * @tc.type: FUNC
1575  */
1576 HWTEST_F(FocusHubTestNg, FocusHubTestNg0103, TestSize.Level1)
1577 {
1578     /**
1579      * @tc.steps: step1. Create frameNode.
1580      */
1581     auto frameNode = FrameNodeOnTree::CreateFrameNode(V2::COLUMN_ETS_TAG, 105,
1582         AceType::MakeRefPtr<LinearLayoutPattern>(true));
1583     auto child = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0502() 1584         106, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1585     auto child2 = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0602() 1586         107, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1587     child->MountToParent(frameNode);
1588     child2->MountToParent(frameNode);
1589 
1590     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
1591     ASSERT_NE(parentFocusHub, nullptr);
1592     parentFocusHub->SetFocusScopeId("scope1", false);
1593 
1594     auto child2FocusHub = child2->GetOrCreateFocusHub();
1595     ASSERT_NE(child2FocusHub, nullptr);
1596     child2FocusHub->SetFocusScopePriority("scope1", 2000);
1597     EXPECT_TRUE(parentFocusHub->AcceptFocusOfPriorityChild());
1598     EXPECT_EQ(parentFocusHub->lastWeakFocusNode_.Upgrade(), child2FocusHub);
1599 }
1600 
1601 /**
1602  * @tc.name: FocusHubTestNg0104
1603  * @tc.desc: Test the function AcceptFocusOfPriorityChild.
1604  * @tc.type: FUNC
1605  */
1606 HWTEST_F(FocusHubTestNg, FocusHubTestNg0104, TestSize.Level1)
1607 {
1608     /**
1609      * @tc.steps: step1. Create frameNode.
1610      */
1611     auto frameNode = FrameNodeOnTree::CreateFrameNode(V2::COLUMN_ETS_TAG, 108,
1612         AceType::MakeRefPtr<LinearLayoutPattern>(true));
1613     auto child = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0702() 1614         109, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1615     auto child2 = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0802() 1616         110, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1617     child->MountToParent(frameNode);
1618     child2->MountToParent(frameNode);
1619 
1620     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
1621     ASSERT_NE(parentFocusHub, nullptr);
1622     parentFocusHub->SetFocusScopeId("scope2", true);
1623 
1624     auto child2FocusHub = child2->GetOrCreateFocusHub();
1625     ASSERT_NE(child2FocusHub, nullptr);
1626     child2FocusHub->SetFocusScopePriority("scope2", 2000);
1627     EXPECT_TRUE(parentFocusHub->AcceptFocusOfPriorityChild());
1628     EXPECT_EQ(parentFocusHub->lastWeakFocusNode_.Upgrade(), child2FocusHub);
1629 
1630     auto childFocusHub = child->GetOrCreateFocusHub();
1631     ASSERT_NE(childFocusHub, nullptr);
1632     childFocusHub->SetFocusScopePriority("scope2", 3000);
1633     EXPECT_TRUE(parentFocusHub->AcceptFocusOfPriorityChild());
1634     EXPECT_EQ(parentFocusHub->lastWeakFocusNode_.Upgrade(), childFocusHub);
1635 }
1636 
1637 /**
1638  * @tc.name: FocusHubTestNg0105
1639  * @tc.desc: Test the function RequestFocusByPriorityInScope.
1640  * @tc.type: FUNC
1641  */
1642 HWTEST_F(FocusHubTestNg, FocusHubTestNg0105, TestSize.Level1)
1643 {
1644     /**
1645      * @tc.steps: step1. Create frameNode.
1646      */
1647     auto frameNode = FrameNodeOnTree::CreateFrameNode(V2::COLUMN_ETS_TAG, 111,
1648         AceType::MakeRefPtr<LinearLayoutPattern>(true));
1649     auto child = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0902() 1650         112, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1651     auto child2 = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0a02() 1652         113, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1653     child->MountToParent(frameNode);
1654     child2->MountToParent(frameNode);
1655 
1656     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
1657     ASSERT_NE(parentFocusHub, nullptr);
1658     parentFocusHub->SetFocusScopeId("scope3", false);
1659 
1660     auto child2FocusHub = child2->GetOrCreateFocusHub();
1661     ASSERT_NE(child2FocusHub, nullptr);
1662     child2FocusHub->SetFocusScopePriority("scope3", 2000);
1663     EXPECT_TRUE(parentFocusHub->RequestFocusByPriorityInScope());
1664     EXPECT_TRUE(child2FocusHub->IsCurrentFocus());
1665 }
1666 
1667 /**
1668  * @tc.name: FocusHubTestNg0106
1669  * @tc.desc: Test the function RequestFocusByPriorityInScope.
1670  * @tc.type: FUNC
1671  */
1672 HWTEST_F(FocusHubTestNg, FocusHubTestNg0106, TestSize.Level1)
1673 {
1674     /**
1675      * @tc.steps: step1. Create frameNode.
1676      */
1677     auto frameNode = FrameNodeOnTree::CreateFrameNode(V2::COLUMN_ETS_TAG, 114,
1678         AceType::MakeRefPtr<LinearLayoutPattern>(true));
1679     auto child = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0b02() 1680         115, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1681     auto child2 = FrameNodeOnTree::GetOrCreateFrameNode(V2::BUTTON_ETS_TAG,
__anonf9fb217b0c02() 1682         116, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1683     child->MountToParent(frameNode);
1684     child2->MountToParent(frameNode);
1685 
1686     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
1687     ASSERT_NE(parentFocusHub, nullptr);
1688     parentFocusHub->SetFocusScopeId("scope4", true);
1689 
1690     auto child2FocusHub = child2->GetOrCreateFocusHub();
1691     ASSERT_NE(child2FocusHub, nullptr);
1692     child2FocusHub->SetFocusScopePriority("scope4", 2000);
1693     EXPECT_TRUE(parentFocusHub->RequestFocusByPriorityInScope());
1694     EXPECT_TRUE(child2FocusHub->IsCurrentFocus());
1695 
1696     auto childFocusHub = child->GetOrCreateFocusHub();
1697     ASSERT_NE(childFocusHub, nullptr);
1698     childFocusHub->SetFocusScopePriority("scope4", 3000);
1699     EXPECT_TRUE(parentFocusHub->RequestFocusByPriorityInScope());
1700     EXPECT_TRUE(childFocusHub->IsCurrentFocus());
1701 }
1702 
1703 /**
1704  * @tc.name: FocusHubTestNg0107
1705  * @tc.desc: Test the function IsInFocusGroup.
1706  * @tc.type: FUNC
1707  */
1708 HWTEST_F(FocusHubTestNg, FocusHubTestNg0107, TestSize.Level1)
1709 {
1710     /**
1711      * @tc.steps: step1. Create frameNode.
1712      */
1713     auto frameNode =
1714         FrameNodeOnTree::CreateFrameNode(V2::COLUMN_ETS_TAG, 117, AceType::MakeRefPtr<LinearLayoutPattern>(true));
1715     auto child = FrameNodeOnTree::GetOrCreateFrameNode(
__anonf9fb217b0d02() 1716         V2::BUTTON_ETS_TAG, 118, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1717     auto child2 = FrameNodeOnTree::GetOrCreateFrameNode(
__anonf9fb217b0e02() 1718         V2::BUTTON_ETS_TAG, 119, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
1719     child->MountToParent(frameNode);
1720     child2->MountToParent(frameNode);
1721 
1722     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
1723     ASSERT_NE(parentFocusHub, nullptr);
1724     parentFocusHub->SetFocusScopeId("scope5", true);
1725 
1726     auto child2FocusHub = child2->GetOrCreateFocusHub();
1727     ASSERT_NE(child2FocusHub, nullptr);
1728     child2FocusHub->SetFocusScopePriority("scope5", 2000);
1729     parentFocusHub->isFocusScope_ = true;
1730     EXPECT_TRUE(parentFocusHub->RequestFocusByPriorityInScope());
1731     parentFocusHub->isFocusScope_ = false;
1732     EXPECT_FALSE(parentFocusHub->RequestFocusByPriorityInScope());
1733     EXPECT_TRUE(child2FocusHub->IsCurrentFocus());
1734 
1735     auto pipeline = PipelineContext::GetCurrentContext();
1736     ASSERT_NE(pipeline, nullptr);
1737     auto focusManager = pipeline->GetOrCreateFocusManager();
1738     ASSERT_NE(focusManager, nullptr);
1739     focusManager->isFocusActive_ = true;
1740     pipeline->eventManager_->isTabJustTriggerOnKeyEvent_ = true;
1741     KeyEvent keyEvent;
1742     keyEvent.action = KeyAction::DOWN;
1743     keyEvent.code = KeyCode::KEY_TAB;
1744     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_TAB);
1745     EXPECT_FALSE(parentFocusHub->HandleEvent(keyEvent));
1746 }
1747 
1748 /**
1749  * @tc.name: FocusHubTestNg0108
1750  * @tc.desc: Test the function HasFocusedChild.
1751  * @tc.type: FUNC
1752  */
1753 HWTEST_F(FocusHubTestNg, FocusHubTestNg0108, TestSize.Level1)
1754 {
1755     /**
1756      * @tc.steps1: initialize parameters.
1757      */
1758     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1759     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1760     ASSERT_NE(focusHub, nullptr);
1761 
1762     /**
1763      * @tc.steps2: call the function HasFocusedChild with true and FocusType::SCOPE
1764      */
1765     focusHub->currentFocus_ = true;
1766     focusHub->focusType_ = FocusType::SCOPE;
1767     focusHub->HasFocusedChild();
1768 
1769 
1770     /**
1771      * @tc.steps3: call the function HasFocusedChild with true and FocusType::DISABLE
1772      * @tc.expected: The return value of HasFocusedChild is false.
1773      */
1774     focusHub->focusType_ = FocusType::DISABLE;
1775     ASSERT_FALSE(focusHub->HasFocusedChild());
1776 
1777     /**
1778      * @tc.steps4: call the function HasFocusedChild with false and FocusType::DISABLE
1779      * @tc.expected: The return value of HasFocusedChild is false.
1780      */
1781     focusHub->currentFocus_ = false;
1782     focusHub->focusType_ = FocusType::DISABLE;
1783     ASSERT_FALSE(focusHub->HasFocusedChild());
1784 
1785 
1786     /**
1787      * @tc.steps5: call the function HasFocusedChild with false and FocusType::SCOPE
1788      * @tc.expected: The return value of HasFocusedChild is false.
1789      */
1790     focusHub->focusType_ = FocusType::SCOPE;
1791     ASSERT_FALSE(focusHub->HasFocusedChild());
1792 }
1793 
1794 /**
1795  * @tc.name: FocusHubTestNg0121
1796  * @tc.desc: Test the function onKeyEventDispatch.
1797  * @tc.type: FUNC
1798  */
1799 HWTEST_F(FocusHubTestNg, FocusHubTestNg0121, TestSize.Level1)
1800 {
1801     /**
1802      * @tc.steps1: Create frameNode and add button as its children which focus type is enable.
1803      */
1804     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1805         AceType::MakeRefPtr<Pattern>());
1806     auto child1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1807         AceType::MakeRefPtr<ButtonPattern>());
1808 
1809     /**
1810      * @tc.steps: step2. Create FocusHub and set keyEvent.
1811      */
1812     child1->GetOrCreateFocusHub();
1813     frameNode->AddChild(child1);
1814     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1815     eventHub->AttachHost(frameNode);
1816     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1817     focusHub->SetFocusType(FocusType::SCOPE);
1818     focusHub->currentFocus_ = true;
1819 
1820     KeyEvent keyEvent;
1821     keyEvent.action = KeyAction::DOWN;
1822     keyEvent.code = KeyCode::KEY_SPACE;
1823 
1824     /**
1825      * @tc.expected: The return value of  is false.
1826      * @tc.steps3: Default returns false if onKeyEventDispatch is not bound.
1827      */
1828     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1829 }
1830 
1831 /**
1832  * @tc.name: FocusHubTestNg0122
1833  * @tc.desc: Test the function onKeyEventDispatch.
1834  * @tc.type: FUNC
1835  */
1836 HWTEST_F(FocusHubTestNg, FocusHubTestNg0122, TestSize.Level1)
1837 {
1838     /**
1839      * @tc.steps1: Create frameNode and add button as its children which focus type is enable.
1840      */
1841     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1842         AceType::MakeRefPtr<Pattern>());
1843     auto child1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1844         AceType::MakeRefPtr<ButtonPattern>());
1845 
1846     /**
1847      * @tc.steps: step2. Create FocusHub and set keyEvent.
1848      */
1849     child1->GetOrCreateFocusHub();
1850     frameNode->AddChild(child1);
1851     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1852     eventHub->AttachHost(frameNode);
1853     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1854     focusHub->SetFocusType(FocusType::SCOPE);
1855     focusHub->currentFocus_ = true;
1856 
1857     KeyEvent keyEvent;
1858     keyEvent.action = KeyAction::DOWN;
1859     keyEvent.code = KeyCode::KEY_SPACE;
1860 
1861     /**
1862      * @tc.expected: The return value of onKeyEventDispatch is true.
1863      * @tc.steps3: call the function onKeyEventDispatch with FocusType::SCOPE.
1864      */
__anonf9fb217b0f02(KeyEventInfo& info) 1865     auto onKeyEventDispatchCallback = [](KeyEventInfo& info) -> bool {
1866         return true;
1867     };
1868     focusHub->SetOnKeyEventDispatchCallback(std::move(onKeyEventDispatchCallback));
1869     EXPECT_TRUE(focusHub->HandleEvent(keyEvent));
1870 }
1871 
1872 /**
1873  * @tc.name: FocusHubTestNg0123
1874  * @tc.desc: Test the function onKeyEventDispatch.
1875  * @tc.type: FUNC
1876  */
1877 HWTEST_F(FocusHubTestNg, FocusHubTestNg0123, TestSize.Level1)
1878 {
1879     /**
1880      * @tc.steps1: Create frameNode and add button as its children which focus type is enable.
1881      */
1882     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1883         AceType::MakeRefPtr<Pattern>());
1884     auto child1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1885         AceType::MakeRefPtr<ButtonPattern>());
1886 
1887     /**
1888      * @tc.steps: step2. Create FocusHub and set keyEvent.
1889      */
1890     child1->GetOrCreateFocusHub();
1891     frameNode->AddChild(child1);
1892     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1893     eventHub->AttachHost(frameNode);
1894     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1895     focusHub->SetFocusType(FocusType::SCOPE);
1896     focusHub->currentFocus_ = true;
1897 
1898     KeyEvent keyEvent;
1899     keyEvent.action = KeyAction::DOWN;
1900     keyEvent.code = KeyCode::KEY_SPACE;
1901 
1902     /**
1903      * @tc.expected: The return value of onKeyEventDispatch is false.
1904      * @tc.steps3: call the function onKeyEventDispatch with FocusType::SCOPE.
1905      */
__anonf9fb217b1002(KeyEventInfo& info) 1906     auto onKeyEventDispatchCallback = [](KeyEventInfo& info) -> bool {
1907         return false;
1908     };
1909     focusHub->SetOnKeyEventDispatchCallback(std::move(onKeyEventDispatchCallback));
1910     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1911 }
1912 
1913 /**
1914  * @tc.name: FocusHubTestNg0124
1915  * @tc.desc: Test the function dispatchKeyEvent.
1916  * @tc.type: FUNC
1917  */
1918 HWTEST_F(FocusHubTestNg, FocusHubTestNg0124, TestSize.Level1)
1919 {
1920     /**
1921      * @tc.steps1: Create frameNode and add button as its children which focus type is enable.
1922      */
1923     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1924         AceType::MakeRefPtr<Pattern>());
1925     auto child1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1926         AceType::MakeRefPtr<ButtonPattern>());
1927     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1928         AceType::MakeRefPtr<ButtonPattern>());
1929 
1930     /**
1931      * @tc.steps: step2. Create FocusHub and set keyEvent.
1932      */
1933     child2->GetOrCreateFocusHub();
1934     frameNode->AddChild(child1);
1935     frameNode->AddChild(child2);
1936     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1937     eventHub->AttachHost(frameNode);
1938     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1939     focusHub->SetFocusType(FocusType::SCOPE);
1940     RefPtr<EventHub> childEventHub2 = AceType::MakeRefPtr<EventHub>();
1941     childEventHub2->AttachHost(child2);
1942     auto childFocusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(childEventHub2)));
1943     childFocusHub2->SetFocusType(FocusType::NODE);
1944     focusHub->currentFocus_ = true;
1945 
1946     KeyEvent keyEvent;
1947     keyEvent.action = KeyAction::DOWN;
1948     keyEvent.code = KeyCode::KEY_SPACE;
1949 
1950     /**
1951      * @tc.steps: step3. Binds onKeyEventDispatch callback, executes dipatchKeyEvent to dispatch keyevent to child2.
1952      */
__anonf9fb217b1102(KeyEventInfo& eventInfo) 1953     auto onKeyEventDispatchCallback = [&childFocusHub2, &keyEvent](KeyEventInfo& eventInfo) -> bool {
1954         childFocusHub2->currentFocus_ = true;
1955         return childFocusHub2->HandleEvent(keyEvent);
1956     };
1957     focusHub->SetOnKeyEventDispatchCallback(std::move(onKeyEventDispatchCallback));
1958 
1959     /**
1960      * @tc.expected: The return value of child2 onKeyEvent is true.
1961      * @tc.steps: step4. call the function onKeyEventDispatch and dipatchKeyEvent.
1962      */
__anonf9fb217b1202(KeyEventInfo& eventInfo) 1963     auto onKeyEventCallback = [](KeyEventInfo& eventInfo) -> bool { return true; };
1964     childFocusHub2->SetOnKeyCallback(std::move(onKeyEventCallback));
1965     EXPECT_TRUE(focusHub->HandleEvent(keyEvent));
1966 }
1967 
1968 /**
1969  * @tc.name: FocusHubTestNg0125
1970  * @tc.desc: Test the function dispatchKeyEvent.
1971  * @tc.type: FUNC
1972  */
1973 HWTEST_F(FocusHubTestNg, FocusHubTestNg0125, TestSize.Level1)
1974 {
1975     /**
1976      * @tc.steps1: Create frameNode and add button as its children which focus type is enable.
1977      */
1978     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1979         AceType::MakeRefPtr<Pattern>());
1980     auto child1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1981         AceType::MakeRefPtr<ButtonPattern>());
1982     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1983         AceType::MakeRefPtr<ButtonPattern>());
1984 
1985     /**
1986      * @tc.steps: step2. Create FocusHub and set keyEvent.
1987      */
1988     child2->GetOrCreateFocusHub();
1989     frameNode->AddChild(child1);
1990     frameNode->AddChild(child2);
1991     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1992     eventHub->AttachHost(frameNode);
1993     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1994     focusHub->SetFocusType(FocusType::SCOPE);
1995     RefPtr<EventHub> childEventHub2 = AceType::MakeRefPtr<EventHub>();
1996     childEventHub2->AttachHost(child2);
1997     auto childFocusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(childEventHub2)));
1998     childFocusHub2->SetFocusType(FocusType::NODE);
1999     focusHub->currentFocus_ = true;
2000 
2001     KeyEvent keyEvent;
2002     keyEvent.action = KeyAction::DOWN;
2003     keyEvent.code = KeyCode::KEY_SPACE;
2004     /**
2005      * @tc.steps: step3. Binds onKeyEventDispatch callback, executes dipatchKeyEvent to dispatch keyevent to child2.
2006      */
__anonf9fb217b1302(KeyEventInfo& eventInfo) 2007     auto onKeyEventDispatchCallback = [&childFocusHub2, &keyEvent](KeyEventInfo& eventInfo) -> bool {
2008         childFocusHub2->currentFocus_ = true;
2009         return childFocusHub2->HandleEvent(keyEvent);
2010     };
2011     focusHub->SetOnKeyEventDispatchCallback(std::move(onKeyEventDispatchCallback));
2012 
2013     /**
2014      * @tc.expected: The return value of child2 onKeyEvent is false.
2015      * @tc.steps: step4. call the function onKeyEventDispatch and dipatchKeyEvent.
2016      */
__anonf9fb217b1402(KeyEventInfo& eventInfo) 2017     auto onKeyEventCallback = [](KeyEventInfo& eventInfo) -> bool { return false; };
2018     childFocusHub2->SetOnKeyCallback(std::move(onKeyEventCallback));
2019     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
2020 }
2021 
2022 /**
2023  * @tc.name: FocusHubTestNg0126
2024  * @tc.desc: Test the function dispatchKeyEvent.
2025  * @tc.type: FUNC
2026  */
2027 HWTEST_F(FocusHubTestNg, FocusHubTestNg0126, TestSize.Level1)
2028 {
2029     /**
2030      * @tc.steps1: Create frameNode and add button as its children which focus type is enable.
2031      */
2032     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2033         AceType::MakeRefPtr<Pattern>());
2034     auto child1 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
2035         AceType::MakeRefPtr<ButtonPattern>());
2036     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
2037         AceType::MakeRefPtr<ButtonPattern>());
2038 
2039     /**
2040      * @tc.steps: step2. Create FocusHub and set keyEvent.
2041      */
2042     child2->GetOrCreateFocusHub();
2043     frameNode->AddChild(child1);
2044     frameNode->AddChild(child2);
2045     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2046     eventHub->AttachHost(frameNode);
2047     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2048     focusHub->SetFocusType(FocusType::SCOPE);
2049     RefPtr<EventHub> childEventHub2 = AceType::MakeRefPtr<EventHub>();
2050     childEventHub2->AttachHost(child2);
2051     auto childFocusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(childEventHub2)));
2052     childFocusHub2->SetFocusType(FocusType::NODE);
2053     focusHub->currentFocus_ = true;
2054 
2055     KeyEvent keyEvent;
2056     keyEvent.action = KeyAction::DOWN;
2057     keyEvent.code = KeyCode::KEY_SPACE;
2058 
2059     /**
2060      * @tc.steps: step3. Binds onKeyEventDispatch callback, executes dipatchKeyEvent to dispatch keyevent to child2.
2061      */
__anonf9fb217b1502(KeyEventInfo& eventInfo) 2062     auto onKeyEventDispatchCallback = [&childFocusHub2, &keyEvent](KeyEventInfo& eventInfo) -> bool {
2063         childFocusHub2->currentFocus_ = true;
2064         return childFocusHub2->HandleEvent(keyEvent);
2065     };
2066     focusHub->SetOnKeyEventDispatchCallback(std::move(onKeyEventDispatchCallback));
2067 
2068     /**
2069      * @tc.expected: The return value of child2 onKeyEvent SetStopPropagation true.
2070      * @tc.steps: step6. call the function onKeyEventDispatch and dipatchKeyEvent.
2071      */
__anonf9fb217b1602(KeyEventInfo& eventInfo) 2072     auto onKeyEventCallback = [](KeyEventInfo& eventInfo) -> bool {
2073         eventInfo.SetStopPropagation(true);
2074         return false;
2075     };
2076     childFocusHub2->SetOnKeyCallback(std::move(onKeyEventCallback));
2077     EXPECT_TRUE(focusHub->HandleEvent(keyEvent));
2078 }
2079 
2080 #ifdef SUPPORT_DIGITAL_CROWN
2081 /**
2082  * @tc.name: FocusHubTestNg0999
2083  * @tc.desc: Test the function OnFocusEventNode.
2084  * @tc.type: FUNC
2085  */
2086 HWTEST_F(FocusHubTestNg, FocusHubTestNg0999, TestSize.Level1)
2087 {
2088     /**
2089      * @tc.steps1: Create frameNode.
2090      */
2091     auto frameNode = FrameNode::CreateFrameNode("frameNode", 120, AceType::MakeRefPtr<ButtonPattern>());
2092     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
2093     ASSERT_NE(parentFocusHub, nullptr);
2094 
2095     /**
2096      * @tc.steps2: initialize parameters.
2097      */
2098     auto eventHub = AceType::MakeRefPtr<EventHub>();
2099     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2100     ASSERT_NE(focusHub, nullptr);
2101     ASSERT_NE(focusHub->GetRootFocusHub(), nullptr);
2102     NonPointerEvent nonPointerEvent;
2103     nonPointerEvent.sourceType = SourceType::CROWN;
2104     FocusEvent focusEvent(nonPointerEvent);
2105     EXPECT_FALSE(focusHub->OnFocusEventNode(focusEvent));
2106 
2107     focusHub->currentFocus_ = true;
2108     auto focus = focusHub->IsCurrentFocus();
2109     EXPECT_EQ(focus, true);
2110 }
2111 
2112 /**
2113  * @tc.name: FocusHubTestNg01000
2114  * @tc.desc: Test the function HandleCrownEvent.
2115  * @tc.type: FUNC
2116  */
2117 HWTEST_F(FocusHubTestNg, FocusHubTestNg01000, TestSize.Level1)
2118 {
2119     /**
2120      * @tc.steps1: Create frameNode.
2121      */
2122     auto frameNode = FrameNode::CreateFrameNode("frameNode", 120, AceType::MakeRefPtr<ButtonPattern>());
2123     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
2124     ASSERT_NE(parentFocusHub, nullptr);
2125 
2126     /**
2127      * @tc.steps2: initialize parameters.
2128      */
2129     auto eventHub = AceType::MakeRefPtr<EventHub>();
2130     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2131     ASSERT_NE(focusHub, nullptr);
2132     ASSERT_NE(focusHub->GetRootFocusHub(), nullptr);
2133 
2134     CrownEvent event;
2135     EXPECT_FALSE(focusHub->HandleCrownEvent(event));
2136 
__anonf9fb217b1702(CrownEventInfo& info) 2137     OnCrownCallbackFunc onCrownEventCallback = [](CrownEventInfo& info) {};
2138     focusHub->SetOnCrownCallback(std::move(onCrownEventCallback));
2139 
2140     EXPECT_FALSE(focusHub->HandleCrownEvent(event));
2141 
2142     focusHub->currentFocus_ = true;
2143     auto focus = focusHub->IsCurrentFocus();
2144     EXPECT_EQ(focus, true);
2145 }
2146 
2147 /**
2148  * @tc.name: FocusHubTestNg01001
2149  * @tc.desc: Test the function ProcessOnCrownEventInternal.
2150  * @tc.type: FUNC
2151  */
2152 HWTEST_F(FocusHubTestNg, FocusHubTestNg01001, TestSize.Level1)
2153 {
2154     /**
2155      * @tc.steps1: Create frameNode.
2156      */
2157     auto frameNode = FrameNode::CreateFrameNode("frameNode", 120, AceType::MakeRefPtr<ButtonPattern>());
2158     auto parentFocusHub = frameNode->GetOrCreateFocusHub();
2159     ASSERT_NE(parentFocusHub, nullptr);
2160 
2161     /**
2162      * @tc.steps2: initialize parameters.
2163      */
2164     auto eventHub = AceType::MakeRefPtr<EventHub>();
2165     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2166     ASSERT_NE(focusHub, nullptr);
2167     ASSERT_NE(focusHub->GetRootFocusHub(), nullptr);
2168 
2169     CrownEvent event;
2170     EXPECT_FALSE(focusHub->ProcessOnCrownEventInternal(event));
2171 
2172     focusHub->currentFocus_ = true;
2173     auto focus = focusHub->IsCurrentFocus();
2174     EXPECT_EQ(focus, true);
2175 
__anonf9fb217b1802(const CrownEvent& info) 2176     OnCrownEventFunc onCrownEventsInternal = [](const CrownEvent& info) -> bool { return true;};
2177     focusHub->SetOnCrownEventInternal(std::move(onCrownEventsInternal));
2178     EXPECT_TRUE(focusHub->ProcessOnCrownEventInternal(event));
2179 }
2180 #endif
2181 
2182 /**
2183  * @tc.name: GetRootFocusHub001
2184  * @tc.desc: Test the function GetRootFocusHub.
2185  * @tc.type: FUNC
2186  */
2187 HWTEST_F(FocusHubTestNg, GetRootFocusHub001, TestSize.Level1)
2188 {
2189     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2190     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2191     ASSERT_NE(focusHub, nullptr);
2192     ASSERT_NE(focusHub->GetRootFocusHub(), nullptr);
2193 }
2194 
2195 /**
2196  * @tc.name: SetFocusable001
2197  * @tc.desc: Test the function SetFocusable.
2198  * @tc.type: FUNC
2199  */
2200 HWTEST_F(FocusHubTestNg, SetFocusable001, TestSize.Level1)
2201 {
2202     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2203     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2204     ASSERT_NE(focusHub, nullptr);
2205     focusHub->focusType_ = FocusType::SCOPE;
2206     focusHub->focusable_ = true;
2207     focusHub->implicitFocusable_ = true;
2208     focusHub->focusDepend_ = FocusDependence::AUTO;
2209     focusHub->SetFocusable(true, true);
2210     focusHub->focusDepend_ = FocusDependence::CHILD;
2211     focusHub->SetFocusable(true, true);
2212     ASSERT_NE(focusHub->focusDepend_, FocusDependence::CHILD);
2213 }
2214 
2215 /**
2216  * @tc.name: DumpFocusScopeTree001
2217  * @tc.desc:
2218  * @tc.type: FUNC
2219  */
2220 HWTEST_F(FocusHubTestNg, DumpFocusScopeTree001, TestSize.Level1)
2221 {
2222     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2223         AceType::MakeRefPtr<Pattern>());
2224     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2225     eventHub->AttachHost(frameNode);
2226     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2227     int32_t depth = 1;
2228     focusHub->focusType_ = FocusType::SCOPE;
2229     auto ss = std::make_unique<std::ostringstream>();
2230     DumpLog::GetInstance().SetDumpFile(std::move(ss));
2231     DumpLog::GetInstance().description_.push_back("test");
2232     focusHub->currentFocus_ = false;
2233     focusHub->SetTabStop(true);
2234     focusHub->focusable_ = false;
2235     focusHub->DumpFocusTree(depth);
2236     EXPECT_TRUE(DumpLog::GetInstance().description_.empty());
2237 }
2238 
2239 /**
2240 * @tc.name: DumpFocusNodeTree001
2241 * @tc.desc:
2242 * @tc.type: FUNC
2243 */
2244 HWTEST_F(FocusHubTestNg, DumpFocusNodeTree001, TestSize.Level1)
2245 {
2246     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2247         AceType::MakeRefPtr<Pattern>());
2248     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2249     eventHub->AttachHost(frameNode);
2250     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2251     int32_t depth = 1;
2252     focusHub->focusType_ = FocusType::NODE;
2253     auto ss = std::make_unique<std::ostringstream>();
2254     DumpLog::GetInstance().SetDumpFile(std::move(ss));
2255     DumpLog::GetInstance().description_.push_back("test");
2256     focusHub->currentFocus_ = false;
2257     focusHub->SetTabStop(true);
2258     focusHub->focusable_ = false;
2259     focusHub->DumpFocusTree(depth);
2260     EXPECT_TRUE(DumpLog::GetInstance().description_.empty());
2261 }
2262 
2263 /**
2264 * @tc.name: HandleFocusNavigation001
2265 * @tc.desc:
2266 * @tc.type: FUNC
2267 */
2268 HWTEST_F(FocusHubTestNg, HandleFocusNavigation001, TestSize.Level1)
2269 {
2270     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2271     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2272     eventHub->AttachHost(frameNode);
2273     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2274     KeyEvent keyEvent;
2275     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
2276     FocusEvent focusEvent(keyEvent);
2277     auto ret = focusHub->HandleFocusNavigation(focusEvent);
2278     EXPECT_EQ(ret, false);
2279 }
2280 
2281 /**
2282 * @tc.name: HandleFocusTravel001
2283 * @tc.desc:
2284 * @tc.type: FUNC
2285 */
2286 HWTEST_F(FocusHubTestNg, HandleFocusTravel001, TestSize.Level1)
2287 {
2288     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2289     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2290     eventHub->AttachHost(frameNode);
2291     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2292     KeyEvent keyEvent;
2293     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
2294     FocusEvent focusEvent(keyEvent);
2295     focusEvent.intension = FocusIntension::LEFT;
2296     auto ret = focusHub->HandleFocusTravel(focusEvent);
2297     EXPECT_EQ(ret, false);
2298 }
2299 
2300 /**
2301 * @tc.name: DumpFocusTree003
2302 * @tc.desc:
2303 * @tc.type: FUNC
2304 */
2305 HWTEST_F(FocusHubTestNg, DumpFocusTree003, TestSize.Level1)
2306 {
2307     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2308     int32_t depth = 1;
2309     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2310     eventHub->AttachHost(frameNode);
2311     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2312 
2313     focusHub->focusType_ = FocusType::SCOPE;
2314     auto stream = std::make_unique<std::ostringstream>();
2315     DumpLog::GetInstance().SetDumpFile(std::move(stream));
2316 
2317     DumpLog::GetInstance().description_.push_back("test");
2318     focusHub->currentFocus_ = false;
2319     focusHub->SetTabStop(true);
2320     focusHub->focusable_ = false;
2321     focusHub->DumpFocusTree(depth, true);
2322     EXPECT_NE(DumpLog::GetInstance().description_.empty(), true);
2323 
2324     focusHub->focusType_ = FocusType::NODE;
2325     DumpLog::GetInstance().description_.push_back("test");
2326     focusHub->currentFocus_ = false;
2327     focusHub->SetTabStop(true);
2328     focusHub->focusable_ = false;
2329     focusHub->DumpFocusTree(depth, true);
2330     EXPECT_NE(DumpLog::GetInstance().description_.empty(), true);
2331 }
2332 
2333 /**
2334 * @tc.name: LostFocusToTabStop001
2335 * @tc.desc:
2336 * @tc.type: FUNC
2337 */
2338 HWTEST_F(FocusHubTestNg, LostFocusToTabStop001, TestSize.Level1)
2339 {
2340     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2341     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2342     eventHub->AttachHost(frameNode);
2343     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2344     auto focusNode = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2345     focusNode->SetCurrentFocus(true);
2346     focusHub->LostFocusToTabStop(focusNode);
2347     EXPECT_EQ(focusNode->IsCurrentFocus(), true);
2348 }
2349 
2350 /**
2351 * @tc.name: LostFocusToTabStop001
2352 * @tc.desc:
2353 * @tc.type: FUNC
2354 */
2355 HWTEST_F(FocusHubTestNg, LostFocusToTabStop002, TestSize.Level1)
2356 {
2357     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2358     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2359     eventHub->AttachHost(frameNode);
2360     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2361     auto focusNode = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2362     focusNode->SetCurrentFocus(false);
2363     focusHub->LostFocusToTabStop(focusNode);
2364     EXPECT_EQ(focusNode->IsCurrentFocus(), false);
2365 }
2366 
2367 /**
2368 * @tc.name: RequestNextFocusByKey001
2369 * @tc.desc:
2370 * @tc.type: FUNC
2371 */
2372 HWTEST_F(FocusHubTestNg, RequestNextFocusByKey001, TestSize.Level1)
2373 {
2374     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2375     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2376     eventHub->AttachHost(frameNode);
2377     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2378     focusHub->SetNextFocus(FocusIntension::SHIFT_TAB, std::string("SHIFT_TAB"));
2379     KeyEvent keyEvent;
2380     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
2381     FocusEvent focusEvent1(keyEvent);
2382     focusEvent1.intension = FocusIntension::SHIFT_TAB;
2383     auto ret = focusHub->RequestNextFocusByKey(focusEvent1);
2384     EXPECT_EQ(ret, false);
2385 
2386     focusHub->ResetNextFocus();
2387     focusHub->SetNextFocus(FocusIntension::UP, std::string("UP"));
2388     FocusEvent focusEvent2(keyEvent);
2389     focusEvent2.intension = FocusIntension::UP;
2390     ret = focusHub->RequestNextFocusByKey(focusEvent2);
2391     EXPECT_EQ(ret, false);
2392 
2393     focusHub->ResetNextFocus();
2394     focusHub->SetNextFocus(FocusIntension::DOWN, std::string("DOWN"));
2395     FocusEvent focusEvent3(keyEvent);
2396     focusEvent3.intension = FocusIntension::DOWN;
2397     ret = focusHub->RequestNextFocusByKey(focusEvent3);
2398     EXPECT_EQ(ret, false);
2399 
2400     focusHub->ResetNextFocus();
2401     focusHub->SetNextFocus(FocusIntension::LEFT, std::string("LEFT"));
2402     FocusEvent focusEvent4(keyEvent);
2403     focusEvent4.intension = FocusIntension::LEFT;
2404     ret = focusHub->RequestNextFocusByKey(focusEvent4);
2405     EXPECT_EQ(ret, false);
2406 }
2407 
2408 /**
2409 * @tc.name: RequestNextFocusByKey002
2410 * @tc.desc:
2411 * @tc.type: FUNC
2412 */
2413 HWTEST_F(FocusHubTestNg, RequestNextFocusByKey002, TestSize.Level1)
2414 {
2415     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2416     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2417     eventHub->AttachHost(frameNode);
2418     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2419     focusHub->SetNextFocus(FocusIntension::SHIFT_TAB, std::string("SHIFT_TAB"));
2420     KeyEvent keyEvent;
2421     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
2422 
2423     focusHub->ResetNextFocus();
2424     focusHub->SetNextFocus(FocusIntension::RIGHT, std::string("RIGHT"));
2425     FocusEvent focusEvent1(keyEvent);
2426     focusEvent1.intension = FocusIntension::RIGHT;
2427     auto ret = focusHub->RequestNextFocusByKey(focusEvent1);
2428     EXPECT_EQ(ret, false);
2429 
2430     focusHub->ResetNextFocus();
2431     focusHub->SetNextFocus(FocusIntension::SELECT, std::string("SELECT"));
2432     FocusEvent focusEvent2(keyEvent);
2433     focusEvent2.intension = FocusIntension::SELECT;
2434     ret = focusHub->RequestNextFocusByKey(focusEvent2);
2435     EXPECT_EQ(ret, false);
2436 
2437     focusHub->ResetNextFocus();
2438     focusHub->SetNextFocus(FocusIntension::ESC, std::string("ESC"));
2439     FocusEvent focusEvent3(keyEvent);
2440     focusEvent3.intension = FocusIntension::ESC;
2441     ret = focusHub->RequestNextFocusByKey(focusEvent3);
2442     EXPECT_EQ(ret, false);
2443 
2444     focusHub->ResetNextFocus();
2445     focusHub->SetNextFocus(FocusIntension::HOME, std::string("HOME"));
2446     FocusEvent focusEvent4(keyEvent);
2447     focusEvent4.intension = FocusIntension::HOME;
2448     ret = focusHub->RequestNextFocusByKey(focusEvent4);
2449     EXPECT_EQ(ret, false);
2450 
2451     focusHub->ResetNextFocus();
2452     focusHub->SetNextFocus(FocusIntension::END, std::string("END"));
2453     FocusEvent focusEvent5(keyEvent);
2454     focusEvent5.intension = FocusIntension::END;
2455     ret = focusHub->RequestNextFocusByKey(focusEvent5);
2456     EXPECT_EQ(ret, false);
2457 }
2458 
2459 /**
2460 * @tc.name: GetNextFocusByStep001
2461 * @tc.desc:
2462 * @tc.type: FUNC
2463 */
2464 HWTEST_F(FocusHubTestNg, GetNextFocusByStep001, TestSize.Level1)
2465 {
2466     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2467     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2468     eventHub->AttachHost(frameNode);
2469     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2470     KeyEvent keyEvent;
2471     auto ret = focusHub->GetNextFocusByStep(keyEvent);
2472     EXPECT_EQ(ret, false);
2473 }
2474 
2475 /**
2476 * @tc.name: RequestUserNextFocus001
2477 * @tc.desc:
2478 * @tc.type: FUNC
2479 */
2480 HWTEST_F(FocusHubTestNg, RequestUserNextFocus001, TestSize.Level1)
2481 {
2482     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2483     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2484     eventHub->AttachHost(frameNode);
2485     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2486     KeyEvent keyEvent;
2487     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
2488     FocusEvent focusEvent(keyEvent);
2489     auto ret = focusHub->RequestUserNextFocus(focusEvent);
2490     EXPECT_EQ(ret, false);
2491 
2492     focusHub->ResetNextFocus();
2493     focusHub->SetNextFocus(FocusIntension::END, std::string("END"));
2494     ret = focusHub->RequestUserNextFocus(focusEvent);
2495     EXPECT_EQ(ret, false);
2496 
2497     focusHub->ResetNextFocus();
2498     focusHub->SetNextFocus(FocusIntension::END, std::string("END"));
2499     focusEvent.intension = FocusIntension::END;
2500     ret = focusHub->RequestUserNextFocus(focusEvent);
2501     EXPECT_EQ(ret, false);
2502 }
2503 
2504 /**
2505 * @tc.name: RequestNextFocusOfKeyTab001
2506 * @tc.desc:
2507 * @tc.type: FUNC
2508 */
2509 HWTEST_F(FocusHubTestNg, RequestNextFocusOfKeyTab001, TestSize.Level1)
2510 {
2511     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2512     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2513     eventHub->AttachHost(frameNode);
2514     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2515     KeyEvent keyEvent;
2516     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_HOME);
2517     FocusEvent focusEvent(keyEvent);
2518     focusHub->isGroup_ = true;
2519     EXPECT_EQ(focusHub->IsInFocusGroup(), true);
2520     auto ret = focusHub->RequestNextFocusOfKeyTab(focusEvent);
2521     EXPECT_EQ(ret, false);
2522 
2523     focusHub->isGroup_ = false;
2524     EXPECT_EQ(focusHub->IsInFocusGroup(), false);
2525     focusEvent.intension = FocusIntension::TAB;
2526     ret = focusHub->RequestNextFocusOfKeyTab(focusEvent);
2527     EXPECT_EQ(ret, false);
2528 
2529     focusHub->isGroup_ = false;
2530     EXPECT_EQ(focusHub->IsInFocusGroup(), false);
2531     focusEvent.intension = FocusIntension::SHIFT_TAB;
2532     ret = focusHub->RequestNextFocusOfKeyTab(focusEvent);
2533     EXPECT_EQ(ret, false);
2534 }
2535 
2536 /**
2537 * @tc.name: RequestNextFocusByDefaultAlgorithm001
2538 * @tc.desc:
2539 * @tc.type: FUNC
2540 */
2541 HWTEST_F(FocusHubTestNg, RequestNextFocusByDefaultAlgorithm001, TestSize.Level1)
2542 {
2543     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2544     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2545     eventHub->AttachHost(frameNode);
2546     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2547 
2548     FocusStep moveStep = FocusStep::LEFT;
2549     auto frameOffset = frameNode->GetTransformRelativeOffset();
2550     auto geometryNode = frameNode->GetGeometryNode();
2551     RectF frameRect = RectF(frameOffset, geometryNode->GetFrameRect().GetSize());
2552 
2553     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2554     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::VERTICAL;
2555     focusHub->focusAlgorithm_.isVertical = true;
2556     auto ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2557     EXPECT_EQ(ret, false);
2558 
2559     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2560     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::UNIVERSAL;
2561     ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2562     EXPECT_EQ(ret, false);
2563 
2564     std::list<RefPtr<FocusHub>> focusNodes;
2565     focusHub->FlushChildrenFocusHub(focusNodes);
2566     focusHub->focusAlgorithm_.scopeType = ScopeType::PROJECT_AREA;
2567     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(*(focusNodes.begin())));
2568     moveStep = FocusStep::SHIFT_TAB;
2569     ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2570     EXPECT_EQ(ret, false);
2571 }
2572 
2573 /**
2574 * @tc.name: RequestNextFocusByDefaultAlgorithm002
2575 * @tc.desc:
2576 * @tc.type: FUNC
2577 */
2578 HWTEST_F(FocusHubTestNg, RequestNextFocusByDefaultAlgorithm002, TestSize.Level1)
2579 {
2580     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2581     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2582     eventHub->AttachHost(frameNode);
2583     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2584 
2585     FocusStep moveStep = FocusStep::LEFT;
2586     auto frameOffset = frameNode->GetTransformRelativeOffset();
2587     auto geometryNode = frameNode->GetGeometryNode();
2588     RectF frameRect = RectF(frameOffset, geometryNode->GetFrameRect().GetSize());
2589 
2590     std::list<RefPtr<FocusHub>> focusNodes;
2591     focusHub->FlushChildrenFocusHub(focusNodes);
2592     auto node = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2593     focusNodes.push_front(node);
2594     focusHub->focusAlgorithm_.scopeType = ScopeType::PROJECT_AREA;
2595     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(*(focusNodes.begin())));
2596     EXPECT_NE(focusHub->lastWeakFocusNode_.Upgrade(), nullptr);
2597 
2598     auto ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2599     EXPECT_EQ(ret, false);
2600 
2601     moveStep = FocusStep::SHIFT_TAB;
2602     ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2603     EXPECT_EQ(ret, false);
2604 }
2605 
2606 /**
2607 * @tc.name: RequestNextFocusByDefaultAlgorithm003
2608 * @tc.desc:
2609 * @tc.type: FUNC
2610 */
2611 HWTEST_F(FocusHubTestNg, RequestNextFocusByDefaultAlgorithm003, TestSize.Level1)
2612 {
2613     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2614     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2615     eventHub->AttachHost(frameNode);
2616     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2617 
2618     FocusStep moveStep = FocusStep::LEFT;
2619     auto frameOffset = frameNode->GetTransformRelativeOffset();
2620     auto geometryNode = frameNode->GetGeometryNode();
2621     RectF frameRect = RectF(frameOffset, geometryNode->GetFrameRect().GetSize());
2622 
2623     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2624     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::UNIVERSAL;
2625     focusHub->focusAlgorithm_.isVertical = true;
2626     auto ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2627     EXPECT_EQ(ret, false);
2628 
2629     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2630     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::UNIVERSAL;
2631     focusHub->focusAlgorithm_.isVertical = false;
2632     ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2633     EXPECT_EQ(ret, false);
2634 
2635     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2636     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::VERTICAL;
2637     focusHub->focusAlgorithm_.isVertical = false;
2638     ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2639     EXPECT_EQ(ret, false);
2640 }
2641 
2642 /**
2643 * @tc.name: RequestNextFocusByDefaultAlgorithm004
2644 * @tc.desc:
2645 * @tc.type: FUNC
2646 */
2647 HWTEST_F(FocusHubTestNg, RequestNextFocusByDefaultAlgorithm004, TestSize.Level1)
2648 {
2649     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2650     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2651     eventHub->AttachHost(frameNode);
2652     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2653 
2654     FocusStep moveStep = FocusStep::LEFT;
2655     auto frameOffset = frameNode->GetTransformRelativeOffset();
2656     auto geometryNode = frameNode->GetGeometryNode();
2657     RectF frameRect = RectF(frameOffset, geometryNode->GetFrameRect().GetSize());
2658 
2659     moveStep = FocusStep::SHIFT_TAB;
2660     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2661     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::VERTICAL;
2662     focusHub->focusAlgorithm_.isVertical = true;
2663     auto ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2664     EXPECT_EQ(ret, false);
2665 
2666     moveStep = FocusStep::SHIFT_TAB;
2667     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2668     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::UNIVERSAL;
2669     focusHub->focusAlgorithm_.isVertical = true;
2670     ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2671     EXPECT_EQ(ret, false);
2672 
2673     moveStep = FocusStep::SHIFT_TAB;
2674     focusHub->focusAlgorithm_.scopeType = ScopeType::OTHERS;
2675     focusHub->focusAlgorithm_.direction = ScopeFocusDirection::VERTICAL;
2676     focusHub->focusAlgorithm_.isVertical =false;
2677     ret = focusHub->RequestNextFocusByDefaultAlgorithm(moveStep, frameRect);
2678     EXPECT_EQ(ret, false);
2679 }
2680 
2681 /**
2682 * @tc.name: LostChildFocusToSelf001
2683 * @tc.desc:
2684 * @tc.type: FUNC
2685 */
2686 HWTEST_F(FocusHubTestNg, LostChildFocusToSelf001, TestSize.Level1)
2687 {
2688     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2689     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2690     eventHub->AttachHost(frameNode);
2691     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2692     focusHub->SetCurrentFocus(false);
2693     focusHub->LostChildFocusToSelf();
2694     EXPECT_NE(focusHub->IsCurrentFocus(), true);
2695 }
2696 
2697 /**
2698 * @tc.name: RequestNextFocusByCustomAlgorithm001
2699 * @tc.desc:
2700 * @tc.type: FUNC
2701 */
2702 HWTEST_F(FocusHubTestNg, RequestNextFocusByCustomAlgorithm001, TestSize.Level1)
2703 {
2704     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2705     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2706     eventHub->AttachHost(frameNode);
2707     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2708 
2709     FocusStep moveStep = FocusStep::LEFT;
2710     auto frameOffset = frameNode->GetTransformRelativeOffset();
2711     auto geometryNode = frameNode->GetGeometryNode();
2712     RectF frameRect = RectF(frameOffset, geometryNode->GetFrameRect().GetSize());
2713 
2714     std::list<RefPtr<FocusHub>> focusNodes;
2715     focusHub->FlushChildrenFocusHub(focusNodes);
2716     auto ret = focusHub->RequestNextFocusByCustomAlgorithm(moveStep, frameRect);
2717     EXPECT_EQ(ret, false);
2718 }
2719 
2720 /**
2721 * @tc.name: IsArrowKeyStepOut001
2722 * @tc.desc:
2723 * @tc.type: FUNC
2724 */
2725 HWTEST_F(FocusHubTestNg, IsArrowKeyStepOut001, TestSize.Level1)
2726 {
2727     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2728     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2729     eventHub->AttachHost(frameNode);
2730     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2731 
2732     FocusStep moveStep = FocusStep::LEFT;
2733     focusHub->isGroup_ = true;
2734     focusHub->arrowKeyStepOut_ = false;
2735     auto ret = focusHub->IsArrowKeyStepOut(moveStep);
2736     EXPECT_EQ(ret, true);
2737 
2738     focusHub->isGroup_ = false;
2739     ret = focusHub->IsArrowKeyStepOut(moveStep);
2740     EXPECT_EQ(ret, false);
2741 
2742     focusHub->arrowKeyStepOut_ = true;
2743     ret = focusHub->IsArrowKeyStepOut(moveStep);
2744     EXPECT_EQ(ret, false);
2745 
2746     focusHub->isGroup_ = true;
2747     ret = focusHub->IsArrowKeyStepOut(moveStep);
2748     EXPECT_EQ(ret, false);
2749 }
2750 
2751 /**
2752 * @tc.name: IsArrowKeyStepOut002
2753 * @tc.desc:
2754 * @tc.type: FUNC
2755 */
2756 HWTEST_F(FocusHubTestNg, IsArrowKeyStepOut002, TestSize.Level1)
2757 {
2758     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2759     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2760     eventHub->AttachHost(frameNode);
2761     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2762 
2763     FocusStep moveStep = FocusStep::SHIFT_TAB;
2764     focusHub->isGroup_ = true;
2765     focusHub->arrowKeyStepOut_ = false;
2766     auto ret = focusHub->IsArrowKeyStepOut(moveStep);
2767     EXPECT_EQ(ret, false);
2768 
2769     focusHub->isGroup_ = false;
2770     ret = focusHub->IsArrowKeyStepOut(moveStep);
2771     EXPECT_EQ(ret, false);
2772 
2773     focusHub->arrowKeyStepOut_ = true;
2774     ret = focusHub->IsArrowKeyStepOut(moveStep);
2775     EXPECT_EQ(ret, false);
2776 
2777     focusHub->isGroup_ = true;
2778     ret = focusHub->IsArrowKeyStepOut(moveStep);
2779     EXPECT_EQ(ret, false);
2780 }
2781 
2782 /**
2783  * @tc.name: IsChildOf001
2784  * @tc.desc:
2785  * @tc.type: FUNC
2786  */
2787 HWTEST_F(FocusHubTestNg, IsChildOf001, TestSize.Level1)
2788 {
2789     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2790         AceType::MakeRefPtr<Pattern>());
2791     auto nodeParent = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BLANK_ETS_TAG, -1,
2792         AceType::MakeRefPtr<FlexLayoutPattern>());
2793     frameNode->GetOrCreateFocusHub();
2794     nodeParent->GetOrCreateFocusHub();
2795     frameNode->SetParent(nodeParent);
2796 
2797     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2798     auto focusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2799     auto parentFocusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2800     auto ret = focusHub2->IsChildOf(parentFocusHub2);
2801     EXPECT_EQ(ret, false);
2802 
2803     eventHub->AttachHost(frameNode);
2804     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2805     focusHub->HandleLastFocusNodeInFocusWindow();
2806     auto parentFocusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2807     ret = focusHub->IsChildOf(parentFocusHub);
2808     EXPECT_EQ(ret, false);
2809 }
2810 
2811 /**
2812  * @tc.name: RequestNextFocus001
2813  * @tc.desc:
2814  * @tc.type: FUNC
2815  */
2816 HWTEST_F(FocusHubTestNg, RequestNextFocus001, TestSize.Level1)
2817 {
2818     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2819         AceType::MakeRefPtr<Pattern>());
2820     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
2821         AceType::MakeRefPtr<ButtonPattern>());
2822     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
2823         AceType::MakeRefPtr<ButtonPattern>());
2824     child->GetOrCreateFocusHub();
2825     child2->GetOrCreateFocusHub();
2826     frameNode->AddChild(child);
2827     frameNode->AddChild(child2);
2828     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2829     eventHub->AttachHost(frameNode);
2830     auto focusNode = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2831     std::list<RefPtr<FocusHub>> focusNodes;
2832     focusNode->SetCurrentFocus(true);
2833     focusNodes.push_front(focusNode);
2834     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2835     focusHub->FlushChildrenFocusHub(focusNodes);
2836     focusHub->focusAlgorithm_.scopeType = ScopeType::PROJECT_AREA;
2837     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(*(focusNodes.begin())));
2838     FocusStep moveStep = FocusStep::SHIFT_TAB;
2839     auto ret = focusHub->RequestNextFocus(moveStep);
2840     EXPECT_EQ(ret, false);
2841     focusHub->ClearLastFocusNode();
2842 }
2843 
2844 /**
2845  * @tc.name: FocusToHeadOrTailChild001
2846  * @tc.desc:
2847  * @tc.type: FUNC
2848  */
2849 HWTEST_F(FocusHubTestNg, FocusToHeadOrTailChild001, TestSize.Level1)
2850 {
2851     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
2852         AceType::MakeRefPtr<ButtonPattern>());
2853     frameNode->GetOrCreateFocusHub();
2854     auto focusHub = frameNode->GetFocusHub();
2855     ASSERT_NE(focusHub, nullptr);
2856     focusHub->SetAllowedLoop(false);
2857     focusHub->SetCurrentFocus(true);
2858     auto res = focusHub->FocusToHeadOrTailChild(true);
2859     EXPECT_FALSE(res);
2860 
2861     focusHub->SetAllowedLoop(false);
2862     focusHub->SetCurrentFocus(false);
2863     focusHub->isGroup_ = false;
2864     focusHub->tabStop_ = true;
2865     res = focusHub->FocusToHeadOrTailChild(true);
2866     EXPECT_TRUE(res);
2867 }
2868 
2869 /**
2870  * @tc.name: FocusToHeadOrTailChild002
2871  * @tc.desc:
2872  * @tc.type: FUNC
2873  */
2874 HWTEST_F(FocusHubTestNg, FocusToHeadOrTailChild002, TestSize.Level1)
2875 {
2876     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
2877         AceType::MakeRefPtr<ButtonPattern>());
2878     frameNode->GetOrCreateFocusHub();
2879     auto eventHub = AceType::MakeRefPtr<EventHub>();
2880     eventHub->AttachHost(frameNode);
2881     auto focusHub = frameNode->GetFocusHub();
2882     ASSERT_NE(focusHub, nullptr);
2883     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
2884         AceType::MakeRefPtr<ButtonPattern>());
2885     frameNode1->GetOrCreateFocusHub();
2886     auto focusHub1 = frameNode1->GetFocusHub();
2887     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_REGION;
2888     focusHub->focusType_ = FocusType::SCOPE;
2889     frameNode1->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
2890     frameNode->children_.push_back(frameNode1);
2891     ASSERT_TRUE(focusHub->IsFocusableNode());
2892     ASSERT_TRUE(focusHub->IsFocusableScope());
2893     focusHub->tabStop_ = true;
2894     focusHub->focusDepend_ = FocusDependence::AUTO;
2895     EXPECT_TRUE(focusHub->FocusToHeadOrTailChild(true));
2896 }
2897 
2898 /**
2899  * @tc.name: FocusToHeadOrTailChild003
2900  * @tc.desc: Test the function FocusToHeadOrTailChild.
2901  * @tc.type: FUNC
2902  */
2903 HWTEST_F(FocusHubTestNg, FocusToHeadOrTailChild003, TestSize.Level1)
2904 {
2905     /**
2906      * @tc.steps1: create focusHub and construct allNodes.
2907      */
2908     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
2909         AceType::MakeRefPtr<ButtonPattern>());
2910     frameNode->GetOrCreateFocusHub();
2911     auto focusHub = frameNode->GetFocusHub();
2912     ASSERT_NE(focusHub, nullptr);
2913 
2914     /**
2915      * @tc.steps2: check isFocusingByTab_ is false.
2916      */
2917     auto context = NG::PipelineContext::GetCurrentContextSafely();
2918     ASSERT_NE(context, nullptr);
2919     ASSERT_FALSE(context->isFocusingByTab_);
2920     auto res = focusHub->FocusToHeadOrTailChild(true);
2921     ASSERT_TRUE(res);
2922 
2923     /**
2924      * @tc.steps3: set tabIndex_ to 0.
2925      */
2926     context->isFocusingByTab_ = true;
2927     focusHub->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
2928     focusHub->focusCallbackEvents_->tabIndex_ = 0;
2929     auto isFocusableByTab = focusHub->IsFocusableByTab();
2930     ASSERT_TRUE(isFocusableByTab);
2931     res = focusHub->FocusToHeadOrTailChild(true);
2932     ASSERT_TRUE(res);
2933 
2934     /**
2935      * @tc.steps4: set tabIndex_ to -1.
2936      */
2937     focusHub->focusCallbackEvents_->tabIndex_ = -1;
2938     isFocusableByTab = focusHub->IsFocusableByTab();
2939     ASSERT_FALSE(isFocusableByTab);
2940     res = focusHub->FocusToHeadOrTailChild(true);
2941     ASSERT_FALSE(res);
2942 }
2943 
2944 /**
2945  * @tc.name: GetUnfocusableParentFocusNode001
2946  * @tc.desc:
2947  * @tc.type: FUNC
2948  */
2949 HWTEST_F(FocusHubTestNg, GetUnfocusableParentFocusNode001, TestSize.Level1)
2950 {
2951     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
2952         AceType::MakeRefPtr<ButtonPattern>());
2953     frameNode->GetOrCreateFocusHub();
2954     auto eventHub = AceType::MakeRefPtr<EventHub>();
2955     eventHub->AttachHost(frameNode);
2956     auto focusHub = frameNode->GetFocusHub();
2957     ASSERT_NE(focusHub, nullptr);
2958     auto frameNode1 = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
2959         AceType::MakeRefPtr<ButtonPattern>());
2960     frameNode1->GetOrCreateFocusHub();
2961     auto focusHub1 = frameNode1->GetFocusHub();
2962     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_REGION;
2963     focusHub->focusType_ = FocusType::SCOPE;
2964     frameNode1->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
2965     frameNode->children_.push_back(frameNode1);
2966     auto res = focusHub->GetUnfocusableParentFocusNode();
2967     WeakPtr<FocusHub> FocusHub2 = nullptr;
2968     EXPECT_EQ(res, FocusHub2);
2969 }
2970 
2971 /**
2972  * @tc.name: CalculatePosition001
2973  * @tc.desc:
2974  * @tc.type: FUNC
2975  */
2976 HWTEST_F(FocusHubTestNg, CalculatePosition001, TestSize.Level1)
2977 {
2978     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2979     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2980     eventHub->AttachHost(frameNode);
2981     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2982 
2983     auto frameOffset = frameNode->GetTransformRelativeOffset();
2984     auto geometryNode = frameNode->GetGeometryNode();
2985     RectF frameRect = RectF(frameOffset, geometryNode->GetFrameRect().GetSize());
2986 
2987     auto focusNode = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2988     std::list<RefPtr<FocusHub>> focusNodes;
2989     focusNode->SetCurrentFocus(true);
2990     focusNodes.push_front(focusNode);
2991     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(*(focusNodes.begin())));
2992     auto ret = focusHub->CalculatePosition();
2993     EXPECT_EQ(ret, true);
2994 }
2995 } // namespace OHOS::Ace::NG