• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "test/unittest/core/event/focus_hub_test_ng.h"
16 #include "core/event/focus_axis_event.h"
17 
18 using namespace testing;
19 using namespace testing::ext;
20 
21 namespace OHOS::Ace::NG {
SetUpTestSuite()22 void FocusHubTestNg::SetUpTestSuite()
23 {
24     MockPipelineContext::SetUp();
25     GTEST_LOG_(INFO) << "FocusHubTestNg SetUpTestCase";
26 }
27 
TearDownTestSuite()28 void FocusHubTestNg::TearDownTestSuite()
29 {
30     MockPipelineContext::TearDown();
31     GTEST_LOG_(INFO) << "FocusHubTestNg TearDownTestCase";
32 }
33 
SetUp()34 void FocusHubTestNg::SetUp() {}
35 
TearDown()36 void FocusHubTestNg::TearDown() {}
37 
38 /**
39  * @tc.name: FocusHubCreateTest001
40  * @tc.desc: Create FocusHub.
41  * @tc.type: FUNC
42  */
43 HWTEST_F(FocusHubTestNg, FocusHubCreateTest001, TestSize.Level1)
44 {
45     /**
46      * @tc.steps: step1. Create FocusHub with passing is null as parameter.
47      * @tc.expected: eventHub_ cannot be updated.
48      */
49     auto focusHub1 = AceType::MakeRefPtr<FocusHub>(WeakPtr<EventHub>(nullptr));
50     EXPECT_TRUE(focusHub1->GetFrameNode() == nullptr);
51     EXPECT_TRUE(focusHub1->IsEnabled());
52     EXPECT_TRUE(!focusHub1->IsFocusableNode());
53 
54     /**
55      * @tc.steps: step2. Create FocusHub with the WeakPtr eventHub_ which does not own frameNode.
56      * @tc.expected: eventHub can be updated, but cannot get frameNode and its related properties.
57      */
58     RefPtr<EventHub> eventHub2 = AceType::MakeRefPtr<EventHub>();
59     auto focusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub2)));
60     EXPECT_TRUE(focusHub2 != nullptr);
61     EXPECT_TRUE(focusHub2->GetFrameNode() == nullptr);
62     EXPECT_TRUE(focusHub2->GetGeometryNode() == nullptr);
63     EXPECT_EQ(focusHub2->GetFrameName(), "NULL");
64     EXPECT_EQ(focusHub2->GetInspectorKey(), std::nullopt);
65 
66     /**
67      * @tc.steps: step3. Invoke GetParentFocusHub without parameter.
68      * @tc.expected: FocusHub will return frameNode' parent focusHub which is also nullptr.
69      */
70     EXPECT_TRUE(focusHub2->GetParentFocusHub() == nullptr);
71 
72     /**
73      * @tc.steps: step4. Invoke GetParentFocusHub passing node as parameter which does not have parent.
74      * @tc.expected: FocusHub will return node' parent focusHub which does not exist.
75      */
76     auto node = FrameNodeOnTree(V2::TEXT_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
77     EXPECT_TRUE(focusHub2->GetParentFocusHub() == nullptr);
78 }
79 
80 /**
81  * @tc.name: FocusHubCreateTest002
82  * @tc.desc: Create FocusHub.
83  * @tc.type: FUNC
84  */
85 HWTEST_F(FocusHubTestNg, FocusHubCreateTest002, TestSize.Level1)
86 {
87     /**
88      * @tc.steps: step1. Create FocusHub with the WeakPtr eventHub_ owning frameNode.
89      * @tc.expected: eventHub can be updated and can get frameNode and its related properties.
90      */
91     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
92     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::TEXT_ETS_TAG, -1,
93         AceType::MakeRefPtr<Pattern>());
94     eventHub->AttachHost(frameNode);
95     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
96     EXPECT_TRUE(focusHub->GetFrameNode() != nullptr);
97     EXPECT_TRUE(focusHub->GetGeometryNode() != nullptr);
98     EXPECT_EQ(focusHub->GetFrameName(), V2::TEXT_ETS_TAG);
99     EXPECT_EQ(focusHub->GetInspectorKey(), std::nullopt);
100 
101     /**
102      * @tc.steps: step2. Invoke GetParentFocusHub without passing parameter.
103      * @tc.expected: FocusHub will return frameNode' parent focusHub which is also nullptr.
104      */
105     EXPECT_TRUE(focusHub->GetParentFocusHub() == nullptr);
106 
107     /**
108      * @tc.steps: step3. Create focusHub and its frameNode has parent node.
109      * @tc.expected: FocusHub will return frameNode' parent focusHub.
110      */
111     auto nodeParent = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BLANK_ETS_TAG, -1,
112         AceType::MakeRefPtr<FlexLayoutPattern>());
113     nodeParent->GetOrCreateFocusHub();
114     frameNode->SetParent(nodeParent);
115     eventHub->AttachHost(frameNode);
116     auto focusHub2 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
117     EXPECT_TRUE(focusHub2->GetParentFocusHub() != nullptr);
118 }
119 
120 /**
121  * @tc.name: FocusHubFlushChildrenFocusHubTest003
122  * @tc.desc: Create FocusHub and invoke FlushChildrenFocusHub.
123  * @tc.type: FUNC
124  */
125 HWTEST_F(FocusHubTestNg, FocusHubFlushChildrenFocusHubTest003, TestSize.Level1)
126 {
127     /**
128      * @tc.steps: step1. Create frameNode and add button as its children which focus type is enable.
129      */
130     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
131         AceType::MakeRefPtr<Pattern>());
132     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
133         AceType::MakeRefPtr<ButtonPattern>());
134     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
135         AceType::MakeRefPtr<ButtonPattern>());
136     child->GetOrCreateFocusHub();
137     child2->GetOrCreateFocusHub();
138     frameNode->AddChild(child);
139     frameNode->AddChild(child2);
140 
141     /**
142      * @tc.steps: step2. Create FocusHub.
143      */
144     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
145     eventHub->AttachHost(frameNode);
146     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
147 
148     /**
149      * @tc.steps: step3. Invoke FlushChildrenFocusHub to get the focusable children.
150      * @tc.expected: Button is the focusable child which will be emplace_back in focusNodes_.
151      */
152     std::list<RefPtr<FocusHub>> focusNodes;
153     focusHub->FlushChildrenFocusHub(focusNodes);
154     EXPECT_EQ(focusNodes.size(), FOCUS_NODE_SIZE);
155     EXPECT_EQ(focusHub->lastWeakFocusNode_.Upgrade(), nullptr);
156 
157     /**
158      * @tc.steps: step4. lastWeakFocusNode_ is not nullptr.
159      * @tc.expected: itLastFocusNode_ will be assigned the iter corresponding lastWeakFocusNode_ found in focusNodes_.
160      */
161     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(*(focusNodes.begin())));
162     EXPECT_EQ(focusHub->lastWeakFocusNode_.Upgrade(), *(focusNodes.begin()));
163 }
164 
165 /**
166  * @tc.name: FocusHubRemoveSelfTest004
167  * @tc.desc: Create FocusHub and invoke RemoveSelf.
168  * @tc.type: FUNC
169  */
170 HWTEST_F(FocusHubTestNg, FocusHubRemoveSelfTest004, TestSize.Level1)
171 {
172     /**
173      * @tc.steps: step1. Create frameNode and add its parent.
174      */
175     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::TEXT_ETS_TAG, -1,
176         AceType::MakeRefPtr<Pattern>());
177     auto nodeParent = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BLANK_ETS_TAG, -1,
178         AceType::MakeRefPtr<FlexLayoutPattern>());
179     nodeParent->GetOrCreateFocusHub();
180     frameNode->SetParent(nodeParent);
181 
182     /**
183      * @tc.steps: step2. Create FocusHub.
184      */
185     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
186     eventHub->AttachHost(frameNode);
187     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
188 
189     /**
190      * @tc.steps: step3. Remove self.
191      * @tc.expected: The nodeParent children size is 0.
192      */
193     focusHub->focusScopeId_="1";
194     focusHub->RemoveSelf();
195     EXPECT_EQ(nodeParent->GetChildren().size(), NODE_SIZE);
196 }
197 
198 /**
199  * @tc.name: FocusHubLostFocusTest005
200  * @tc.desc: Create FocusHub and invoke LostFocus.
201  * @tc.type: FUNC
202  */
203 HWTEST_F(FocusHubTestNg, FocusHubLostFocusTest005, TestSize.Level1)
204 {
205     /**
206      * @tc.steps: step1. Create frameNode and add button as its children which focus type is enable.
207      */
208     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
209         AceType::MakeRefPtr<Pattern>());
210 
211     /**
212      * @tc.steps: step2. Create FocusHub.
213      */
214     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
215     eventHub->AttachHost(frameNode);
216     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
217 
218     /**
219      * @tc.steps: step3. Invoke LostFocus, when FocusType is DISABLE and  the blur reason is FOCUS_SWITCH.
220      * @tc.expected: currentFocus_ is false.
221      */
222     focusHub->currentFocus_ = true;
223     focusHub->LostFocus(BLUR_REASON_FOCUS_SWITCH);
224     EXPECT_EQ(focusHub->blurReason_, BLUR_REASON_FOCUS_SWITCH);
225     EXPECT_FALSE(focusHub->currentFocus_);
226 
227     /**
228      * @tc.steps: step4. Invoke LostFocus, when FocusType is NODE and  the blur reason is WINDOW_BLUR.
229      * @tc.expected: currentFocus_ is false.
230      */
231     focusHub->currentFocus_ = true;
232     focusHub->focusType_ = FocusType::NODE;
233     focusHub->LostFocus(BLUR_REASON_WINDOW_BLUR);
234     EXPECT_EQ(focusHub->blurReason_, BLUR_REASON_WINDOW_BLUR);
235     EXPECT_FALSE(focusHub->currentFocus_);
236 
237     /**
238      * @tc.steps: step5. Invoke LostFocus, when FocusType is SCOPE and  the blur reason is WINDOW_BLUR.
239      * @tc.expected: currentFocus_ is false.
240      */
241     focusHub->currentFocus_ = true;
242     focusHub->focusType_ = FocusType::SCOPE;
243     focusHub->LostFocus(BLUR_REASON_WINDOW_BLUR);
244     EXPECT_FALSE(focusHub->currentFocus_);
245 }
246 
247 /**
248  * @tc.name: FocusHubHandleKeyEventTest006
249  * @tc.desc: Create FocusHub and invoke HandleKeyEvent.
250  * @tc.type: FUNC
251  */
252 HWTEST_F(FocusHubTestNg, FocusHubHandleKeyEventTest006, TestSize.Level1)
253 {
254     /**
255      * @tc.steps: step1. Create frameNode.
256      */
257     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
258         AceType::MakeRefPtr<Pattern>());
259     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
260         AceType::MakeRefPtr<ButtonPattern>());
261     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
262         AceType::MakeRefPtr<ButtonPattern>());
263     child->GetOrCreateFocusHub();
264     child2->GetOrCreateFocusHub();
265     frameNode->AddChild(child);
266     frameNode->AddChild(child2);
267 
268     /**
269      * @tc.steps: step2. Create FocusHub.
270      */
271     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
272     eventHub->AttachHost(frameNode);
273     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
274 
275     /**
276      * @tc.steps: step3. Focus hub does not currently focused and FocusType is DISABLE.
277      * @tc.expected: Do not handle key event.
278      */
279     KeyEvent keyEvent;
280     keyEvent.code = KeyCode::TV_CONTROL_UP;
281     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
282 
283     /**
284      * @tc.steps: step4. Focus hub is currently focused, FocusType is DISABLE and key code is TV_CONTROL_UP.
285      * @tc.expected: OnKeyEventScope -> RequestNextFocus.
286      */
287     focusHub->focusType_ = FocusType::SCOPE;
288     focusHub->currentFocus_ = true;
289     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
290 }
291 
292 /**
293  * @tc.name: FocusHubTestNg007
294  * @tc.desc: Test the function IsFocusableScope.
295  * @tc.type: FUNC
296  */
297 HWTEST_F(FocusHubTestNg, FocusHubTestNg007, TestSize.Level1)
298 {
299     /**
300      * @tc.steps1: initialize parameters.
301      */
302     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
303     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
304     focusHub->focusable_ = true;
305     focusHub->parentFocusable_ = true;
306 
307     /**
308      * @tc.steps2: call the function SetEnabled with false
309      * @tc.expected: The return value of IsFocusableScope is false.
310      */
311     eventHub->SetEnabled(false);
312     EXPECT_FALSE(focusHub->IsFocusableScope());
313 
314     /**
315      * @tc.steps3: call the function SetEnabled with true.
316      * @tc.expected: The return value of IsFocusableScope is false.
317      */
318     eventHub->SetEnabled(true);
319     EXPECT_FALSE(focusHub->IsFocusableScope());
320 }
321 
322 /**
323  * @tc.name: FocusHubTestNg008
324  * @tc.desc: Test the function SetFocusable.
325  * @tc.type: FUNC
326  */
327 HWTEST_F(FocusHubTestNg, FocusHubTestNg008, TestSize.Level1)
328 {
329     /**
330      * @tc.steps1: initialize parameters.
331      * @tc.expected: The default value of focusable_ is false.
332      */
333     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
334     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
335     EXPECT_FALSE(focusHub->focusable_);
336 
337     /**
338      * @tc.steps2: Set focusable_ to true implicitly.
339      * @tc.expected: The value of focusable_ is true.
340      */
341     focusHub->SetFocusable(true, false);
342     EXPECT_TRUE(focusHub->focusable_);
343 
344     /**
345      * @tc.steps3:Set focusable_ to false explicitly.
346      * @tc.expected: The value of focusable_ is false.
347      */
348     focusHub->SetFocusable(false);
349 
350     /**
351      * @tc.steps4:Set focusable_ to true implicitly.
352      * @tc.expected: The value of focusable_ is false.
353      */
354     focusHub->SetFocusable(true, false);
355     EXPECT_FALSE(focusHub->focusable_);
356 
357     /**
358      * @tc.steps5:Set focusable_ to true explicitly.
359      * @tc.expected: The value of focusable_ is true.
360      */
361     focusHub->SetFocusable(true);
362     EXPECT_TRUE(focusHub->focusable_);
363 }
364 
365 /**
366  * @tc.name: FocusHubTestNg009
367  * @tc.desc: Test the function IsFocusable.
368  * @tc.type: FUNC
369  */
370 HWTEST_F(FocusHubTestNg, FocusHubTestNg009, TestSize.Level1)
371 {
372     /**
373      * @tc.steps1: initialize parameters.
374      */
375     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
376     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
377     eventHub->SetEnabled(false);
378 
379     /**
380      * @tc.steps2: call the function IsFocusable with FocusType::NODE
381      * @tc.expected: The return value of IsFocusable is false.
382      */
383     focusHub->SetFocusType(FocusType::NODE);
384     EXPECT_FALSE(focusHub->IsFocusable());
385 
386     /**
387      * @tc.steps3: call the function IsFocusable with FocusType::SCOPE
388      * @tc.expected: The return value of IsFocusable is false.
389      */
390     focusHub->SetFocusType(FocusType::SCOPE);
391     EXPECT_FALSE(focusHub->IsFocusable());
392 
393     /**
394      * @tc.steps4: call the function IsFocusable with FocusType::DISABLE
395      * @tc.expected: The return value of IsFocusable is false.
396      */
397     focusHub->SetFocusType(FocusType::DISABLE);
398     EXPECT_FALSE(focusHub->IsFocusable());
399 }
400 
401 /**
402  * @tc.name: FocusHubTestNg010
403  * @tc.desc: Test the function RequestFocusImmediately.
404  * @tc.type: FUNC
405  */
406 HWTEST_F(FocusHubTestNg, FocusHubTestNg0010, TestSize.Level1)
407 {
408     /**
409      * @tc.steps1: initialize parameters.
410      */
411     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
412     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
413     auto context = PipelineContext::GetCurrentContext();
414     ASSERT_NE(context, nullptr);
415 
416     /**
417      * @tc.steps2: call the function SetFocusType with currentFocus_ = false.
418      * @tc.expected: The return value of RequestFocusImmediately is false.
419      */
420     context->SetIsFocusingByTab(true);
421     focusHub->SetFocusType(FocusType::DISABLE);
422     EXPECT_FALSE(focusHub->RequestFocusImmediately());
423 
424     /**
425      * @tc.steps3: call the function SetFocusType with currentFocus_ = true
426      * @tc.expected: The return value of RequestFocusImmediately is true.
427      */
428     context->SetIsFocusingByTab(false);
429     focusHub->SetFocusType(FocusType::DISABLE);
430     focusHub->currentFocus_ = true;
431     EXPECT_TRUE(focusHub->RequestFocusImmediately());
432 }
433 
434 /**
435  * @tc.name: FocusHubTestNg011
436  * @tc.desc: Test the function LostFocus.
437  * @tc.type: FUNC
438  */
439 HWTEST_F(FocusHubTestNg, FocusHubTestNg0011, TestSize.Level1)
440 {
441     /**
442      * @tc.steps1: initialize parameters.
443      */
444     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
445     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
446 
447     /**
448      * @tc.steps2: call the function LostFocus with currentFocus_ = false.
449      * @tc.expected: The value of blurReason_ is changed to BlurReason::WINDOW_BLUR.
450      */
451     focusHub->blurReason_ = BlurReason::WINDOW_BLUR;
452     focusHub->currentFocus_ = false;
453     focusHub->LostFocus(BlurReason::FOCUS_SWITCH);
454     EXPECT_EQ(focusHub->blurReason_, BlurReason::WINDOW_BLUR);
455 
456     /**
457      * @tc.steps3: call the function LostFocus with currentFocus_ = true.
458      * @tc.expected: The value of blurReason_ is changed to BlurReason::FOCUS_SWITCH.
459      */
460     focusHub->currentFocus_ = true;
461     focusHub->LostFocus(BlurReason::FOCUS_SWITCH);
462     EXPECT_EQ(focusHub->blurReason_, BlurReason::FOCUS_SWITCH);
463 }
464 
465 /**
466  * @tc.name: FocusHubTestNg012
467  * @tc.desc: Test the function LostSelfFocus.
468  * @tc.type: FUNC
469  */
470 HWTEST_F(FocusHubTestNg, FocusHubTestNg0012, TestSize.Level1)
471 {
472     /**
473      * @tc.steps1: initialize parameters.
474      */
475     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
476     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
477 
478     /**
479      * @tc.steps2: call the function LostSelfFocus with currentFocus_ = false.
480      * @tc.expected: The value of focusable_ is changed to false.
481      */
482     focusHub->currentFocus_ = false;
483     focusHub->SetFocusable(false);
484     focusHub->LostSelfFocus();
485     EXPECT_FALSE(focusHub->focusable_);
486 
487     /**
488      * @tc.steps3: call the function LostSelfFocus with currentFocus_ = true.
489      * @tc.expected: The value of focusable_ is changed to true.
490      */
491     focusHub->currentFocus_ = true;
492     focusHub->LostSelfFocus();
493     EXPECT_TRUE(focusHub->focusable_);
494 }
495 
496 /**
497  * @tc.name: FocusHubTestNg013
498  * @tc.desc: Test the function SetShow, SetEnabled, SetEnabledNode and SetEnabledScope.
499  * @tc.type: FUNC
500  */
501 HWTEST_F(FocusHubTestNg, FocusHubTestNg0013, TestSize.Level1)
502 {
503     /**
504      * @tc.steps1: initialize parameters.
505      */
506     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
507         AceType::MakeRefPtr<Pattern>());
508     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
509     eventHub->AttachHost(frameNode);
510     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
511     auto context = PipelineContext::GetCurrentContext();
512     ASSERT_NE(context, nullptr);
513 
514     /**
515      * @tc.steps2: call the function SetShow with FocusType::NODE.
516      * @tc.expected: The value of show_ is changed to true.
517      */
518     focusHub->SetFocusType(FocusType::NODE);
519     focusHub->SetShow(true);
520     focusHub->SetEnabled(true);
521     EXPECT_TRUE(focusHub->IsShow());
522 
523     /**
524      * @tc.steps3: call the function SetShow with FocusType::SCOPE.
525      * @tc.expected: The value of show_ is changed to false.
526      */
527     focusHub->SetFocusType(FocusType::SCOPE);
528     focusHub->SetShow(false);
529     focusHub->SetEnabled(false);
530     frameNode->layoutProperty_->propVisibility_ = VisibleType::INVISIBLE;
531     EXPECT_FALSE(focusHub->IsShow());
532 
533     /**
534      * @tc.steps4: call the function SetShow with FocusType::DISABLE.
535      * @tc.expected: The value of show_ is changed to false.
536      */
537     focusHub->SetFocusType(FocusType::DISABLE);
538     focusHub->SetShow(true);
539     focusHub->SetEnabled(true);
540     EXPECT_FALSE(focusHub->IsShow());
541 }
542 
543 /**
544  * @tc.name: FocusHubTestNg014
545  * @tc.desc: Test functions OnFocus, OnFocusNode and OnFocusScope.
546  * @tc.type: FUNC
547  */
548 HWTEST_F(FocusHubTestNg, FocusHubTestNg0014, TestSize.Level1)
549 {
550     /**
551      * @tc.steps1: initialize parameters.
552      */
553     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
554         AceType::MakeRefPtr<Pattern>());
555     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
556     eventHub->AttachHost(frameNode);
557     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
558 
559     /**
560      * @tc.steps2: call the function OnFocus with FocusType::SCOPE.
561      * @tc.expected: The focusNodes_ is empty.
562      */
563     focusHub->SetFocusType(FocusType::SCOPE);
564     focusHub->OnFocus();
565     std::list<RefPtr<FocusHub>> focusNodes;
566     focusHub->FlushChildrenFocusHub(focusNodes);
567     EXPECT_TRUE(focusNodes.empty());
568 
569     /**
570      * @tc.steps3: call the function OnFocus with FocusType::NODE.
571      * @tc.expected: The flagCbk1 and flagCbk2 are changed to true.
572      */
573     focusHub->SetFocusType(FocusType::NODE);
574     focusHub->OnFocus();
575     focusHub->currentFocus_ = true;
576     bool flagCbk1 = false;
577     bool flagCbk2 = false;
__anon5533bfb00102() 578     focusHub->onFocusInternal_ = [&flagCbk1]() { flagCbk1 = !flagCbk1; };
579     focusHub->focusCallbackEvents_ = AceType::MakeRefPtr<FocusCallbackEvents>();
__anon5533bfb00202() 580     focusHub->SetOnFocusCallback([&flagCbk2]() { flagCbk2 = !flagCbk2; });
581     focusHub->OnFocus();
582     EXPECT_TRUE(flagCbk1);
583     EXPECT_TRUE(flagCbk2);
584 }
585 
586 /**
587  * @tc.name: FocusHubTestNg015
588  * @tc.desc: Test functions OnBlur, OnBlurNode and OnBlurScope.
589  * @tc.type: FUNC
590  */
591 HWTEST_F(FocusHubTestNg, FocusHubTestNg0015, TestSize.Level1)
592 {
593     /**
594      * @tc.steps1: initialize parameters.
595      */
596     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
597         AceType::MakeRefPtr<ButtonPattern>());
598     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
599     eventHub->host_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
600     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
601 
602     /**
603      * @tc.steps2: call the function OnBlur with FocusType::NODE.
604      * @tc.expected: The flagCbk1 and flagCbk2 are changed to true.
605      */
606     focusHub->SetFocusType(FocusType::NODE);
607     focusHub->OnBlur();
608     bool flagCbk1 = false;
609     bool flagCbk2 = false;
610     BlurReason flagReason = BlurReason::WINDOW_BLUR;
__anon5533bfb00302() 611     focusHub->onBlurInternal_ = [&flagCbk1]() { flagCbk1 = !flagCbk1; };
__anon5533bfb00402(BlurReason reason) 612     focusHub->onBlurReasonInternal_ = [&flagReason](BlurReason reason) { flagReason = reason; };
__anon5533bfb00502() 613     focusHub->SetOnBlurCallback([&flagCbk2]() { flagCbk2 = !flagCbk2; });
614     focusHub->OnBlur();
615     EXPECT_TRUE(flagCbk1);
616     EXPECT_TRUE(flagCbk2);
617     EXPECT_EQ(flagReason, BlurReason::FOCUS_SWITCH);
618 
619     /**
620      * @tc.steps3: call the function OnBlur with FocusType::SCOPE.
621      * @tc.expected: The flagCbk1 and flagCbk2 are changed to true.
622      */
623     focusHub->SetFocusType(FocusType::SCOPE);
624     focusHub->OnFocus();
625     flagCbk1 = false;
626     flagCbk2 = false;
627     flagReason = BlurReason::WINDOW_BLUR;
__anon5533bfb00602() 628     focusHub->onBlurInternal_ = [&flagCbk1]() { flagCbk1 = !flagCbk1; };
__anon5533bfb00702(BlurReason reason) 629     focusHub->onBlurReasonInternal_ = [&flagReason](BlurReason reason) { flagReason = reason; };
__anon5533bfb00802() 630     focusHub->SetOnBlurCallback([&flagCbk2]() { flagCbk2 = !flagCbk2; });
631     focusHub->OnBlur();
632     EXPECT_TRUE(flagCbk1);
633     EXPECT_TRUE(flagCbk2);
634     EXPECT_EQ(flagReason, BlurReason::FOCUS_SWITCH);
635 }
636 
637 /**
638  * @tc.name: FocusHubTestNg016
639  * @tc.desc: Test the function OnKeyEvent, OnKeyEventScope and OnKeyEventNode.
640  * @tc.type: FUNC
641  */
642 HWTEST_F(FocusHubTestNg, FocusHubTestNg0016, TestSize.Level1)
643 {
644     /**
645      * @tc.steps1: initialize parameters.
646      */
647     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
648     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
649     auto context = PipelineContext::GetCurrentContext();
650     ASSERT_NE(context, nullptr);
651     KeyEvent keyEvent;
652     keyEvent.action = KeyAction::DOWN;
653     keyEvent.code = KeyCode::KEY_SPACE;
654     keyEvent.isRedispatch = true;
655     keyEvent.isPreIme = true;
656 
657     /**
658      * @tc.steps2: call the function OnKeyEvent with FocusType::NODE.
659      * @tc.expected: The return value of OnKeyEvent is false.
660      */
661     focusHub->SetFocusType(FocusType::NODE);
662     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
663 
664     /**
665      * @tc.steps3: call the function OnKeyEvent with FocusType::SCOPE.
666      * @tc.expected: The return value of OnKeyEvent is false.
667      */
668     focusHub->SetFocusType(FocusType::SCOPE);
669     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
670 
671     /**
672      * @tc.steps4: call the function OnKeyEvent with FocusType::DISABLE.
673      * @tc.expected: The return value of OnKeyEvent is false.
674      */
675     focusHub->SetFocusType(FocusType::DISABLE);
676     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
677 }
678 
679 /**
680  * @tc.name: FocusHubTestNg017
681  * @tc.desc: Test the function HandleFocusByTabIndex.
682  * @tc.type: FUNC
683  */
684 HWTEST_F(FocusHubTestNg, FocusHubTestNg0017, TestSize.Level1)
685 {
686     /**
687      * @tc.steps1: initialize parameters.
688      */
689     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
690     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
691     KeyEvent keyEvent;
692 
693     /**
694      * @tc.steps2: call the function HandleFocusByTabIndex with code != KeyCode::KEY_TAB and action != KeyAction::DOWN.
695      * @tc.expected: The return value of HandleFocusByTabIndex is false.
696      */
697     keyEvent.action = KeyAction::UNKNOWN;
698     keyEvent.code = KeyCode::KEY_UNKNOWN;
699     EXPECT_FALSE(focusHub->HandleFocusByTabIndex(keyEvent));
700 
701     /**
702      * @tc.steps3: call the function HandleFocusByTabIndex with code != KeyCode::KEY_TAB and action == KeyAction::DOWN.
703      * @tc.expected: The return value of HandleFocusByTabIndex is false.
704      */
705     keyEvent.action = KeyAction::DOWN;
706     keyEvent.code = KeyCode::KEY_UNKNOWN;
707     EXPECT_FALSE(focusHub->HandleFocusByTabIndex(keyEvent));
708 
709     /**
710      * @tc.steps4: call the function HandleFocusByTabIndex with code == KeyCode::KEY_TAB and action != KeyAction::DOWN.
711      * @tc.expected: The return value of HandleFocusByTabIndex is false.
712      */
713     keyEvent.action = KeyAction::UNKNOWN;
714     keyEvent.code = KeyCode::KEY_TAB;
715     EXPECT_FALSE(focusHub->HandleFocusByTabIndex(keyEvent));
716 
717     /**
718      * @tc.steps5: call the function HandleFocusByTabIndex with code == KeyCode::KEY_TAB and action == KeyAction::DOWN
719      *             and curPage == null.
720      * @tc.expected: The return value of HandleFocusByTabIndex is false.
721      */
722     keyEvent.action = KeyAction::DOWN;
723     keyEvent.code = KeyCode::KEY_TAB;
724     EXPECT_FALSE(focusHub->HandleFocusByTabIndex(keyEvent));
725 
726     /**
727      * @tc.steps6: call the function HandleFocusByTabIndex with code == KeyCode::KEY_TAB and action == KeyAction::DOWN
728      *             and curPage == focusHub.
729      * @tc.expected: The return value of HandleFocusByTabIndex is false.
730      */
731     keyEvent.action = KeyAction::DOWN;
732     keyEvent.code = KeyCode::KEY_TAB;
733     EXPECT_FALSE(focusHub->HandleFocusByTabIndex(keyEvent));
734 }
735 
736 /**
737  * @tc.name: FocusHubTestNg018
738  * @tc.desc: Test the function HandleFocusByTabIndex.
739  * @tc.type: FUNC
740  */
741 HWTEST_F(FocusHubTestNg, FocusHubTestNg0018, TestSize.Level1)
742 {
743     /**
744      * @tc.steps1: initialize parameters.
745      */
746     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
747     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
748     KeyEvent keyEvent;
749 
750     /**
751      * @tc.steps2: call the function GetFocusingTabNodeIdx with the empty TabIndexNodeList.
752      * @tc.expected: The return value of the function is NONE_TAB_FOCUSED_INDEX.
753      */
754     TabIndexNodeList tabIndexNodes;
755     EXPECT_EQ(focusHub->GetFocusingTabNodeIdx(tabIndexNodes), DEFAULT_TAB_FOCUSED_INDEX);
756 
757     /**
758      * @tc.steps3: call the function GetFocusingTabNodeIdx with the unempty TabIndexNodeList.
759      * @tc.expected: The return value of the function is DEFAULT_TAB_FOCUSED_INDEX.
760      */
761     int32_t nodeId = 1;
762     focusHub->lastTabIndexNodeId_ = nodeId;
763     tabIndexNodes.emplace_back(focusHub->GetTabIndex(), focusHub);
764     EXPECT_EQ(focusHub->GetFocusingTabNodeIdx(tabIndexNodes), DEFAULT_TAB_FOCUSED_INDEX);
765 
766     /**
767      * @tc.steps4: call the function GetFocusingTabNodeIdx with the unempty TabIndexNodeList.
768      * @tc.expected: The return value of the function is 0.
769      */
770     nodeId = -1;
771     focusHub->lastTabIndexNodeId_ = nodeId;
772     focusHub->currentFocus_ = true;
773     EXPECT_EQ(focusHub->GetFocusingTabNodeIdx(tabIndexNodes), 0);
774 
775     /**
776      * @tc.steps5: call the function GetFocusingTabNodeIdx with the unempty TabIndexNodeList.
777      * @tc.expected: The return value of the function is NONE_TAB_FOCUSED_INDEX.
778      */
779     focusHub->currentFocus_ = false;
780     EXPECT_EQ(focusHub->GetFocusingTabNodeIdx(tabIndexNodes), DEFAULT_TAB_FOCUSED_INDEX);
781 }
782 
783 /**
784  * @tc.name: FocusHubTestNg019
785  * @tc.desc: Test the function RequestFocusImmediatelyById and GetChildFocusNodeById.
786  * @tc.type: FUNC
787  */
788 HWTEST_F(FocusHubTestNg, FocusHubTestNg0019, TestSize.Level1)
789 {
790     /**
791      * @tc.steps1: initialize parameters.
792      */
793     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
794     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::TEXT_ETS_TAG, -1,
795         AceType::MakeRefPtr<Pattern>());
796     eventHub->AttachHost(frameNode);
797     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
798 
799     /**
800      * @tc.steps2: call the function RequestFocusImmediatelyById with the empty id.
801      * @tc.expected: The return value of the function is false.
802      */
803     const std::string nullStr("");
804     EXPECT_FALSE(focusHub->RequestFocusImmediatelyById(nullStr));
805 
806     /**
807      * @tc.steps3: call the function RequestFocusImmediatelyById with the idStr.
808      * @tc.expected: The return value of the function is false.
809      */
810     const std::string idStr(V2::TEXT_ETS_TAG);
811     EXPECT_FALSE(focusHub->RequestFocusImmediatelyById(idStr));
812 
813     /**
814      * @tc.steps4: call the function RequestFocusImmediatelyById with the idStr and FocusType::NODE.
815      * @tc.expected: The return value of the function is false.
816      */
817     focusHub->SetFocusType(FocusType::NODE);
818     EXPECT_FALSE(focusHub->RequestFocusImmediatelyById(idStr));
819 
820     /**
821      * @tc.steps5: call the function RequestFocusImmediatelyById with the idStr and FocusType::SCOPE.
822      * @tc.expected: The return value of the function is false.
823      */
824     focusHub->SetFocusType(FocusType::SCOPE);
825     EXPECT_FALSE(focusHub->RequestFocusImmediatelyById(idStr));
826 }
827 
828 /**
829  * @tc.name: FocusHubTestNg020
830  * @tc.desc: Test the function GetChildFocusNodeByType.
831  * @tc.type: FUNC
832  */
833 HWTEST_F(FocusHubTestNg, FocusHubTestNg0020, TestSize.Level1)
834 {
835     /**
836      * @tc.steps1: initialize parameters.
837      */
838     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
839     eventHub->SetEnabled(true);
840     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
841 
842     /**
843      * @tc.steps2: call the function GetChildFocusNodeByType with FocusNodeType::DEFAULT.
844      * @tc.expected: The return value of the function is focusHub.
845      */
846     focusHub->SetFocusType(FocusType::NODE);
847     focusHub->SetShow(true);
848     focusHub->focusable_ = true;
849     focusHub->parentFocusable_ = true;
850     focusHub->SetIsDefaultFocus(true);
851     EXPECT_EQ(focusHub->GetChildFocusNodeByType(FocusNodeType::DEFAULT), focusHub);
852 
853     /**
854      * @tc.steps3: call the function GetChildFocusNodeByType with FocusNodeType::DEFAULT and show_ = false.
855      * @tc.expected: The return value of the function is nullptr.
856      */
857     focusHub->focusable_ = false;
858     focusHub->SetShow(false);
859     EXPECT_EQ(focusHub->GetChildFocusNodeByType(FocusNodeType::DEFAULT), nullptr);
860 
861     /**
862      * @tc.steps4: call the function GetChildFocusNodeByType with FocusNodeType::DEFAULT and IsDefaultFocus = false.
863      * @tc.expected: The return value of the function is nullptr.
864      */
865     focusHub->SetIsDefaultFocus(false);
866     EXPECT_EQ(focusHub->GetChildFocusNodeByType(FocusNodeType::DEFAULT), nullptr);
867 
868     /**
869      * @tc.steps5: call the function GetChildFocusNodeByType with FocusNodeType::DEFAULT and show_ = true.
870      * @tc.expected: The return value of the function is focusHub.
871      */
872     focusHub->SetShow(true);
873     focusHub->focusable_ = true;
874     focusHub->SetIsDefaultGroupFocus(true);
875     EXPECT_EQ(focusHub->GetChildFocusNodeByType(FocusNodeType::GROUP_DEFAULT), focusHub);
876 
877     /**
878      * @tc.steps6: call the function GetChildFocusNodeByType with FocusNodeType::DEFAULT and show_ = false.
879      * @tc.expected: The return value of the function is nullptr.
880      */
881     focusHub->focusable_ = false;
882     focusHub->SetShow(false);
883     EXPECT_EQ(focusHub->GetChildFocusNodeByType(FocusNodeType::GROUP_DEFAULT), nullptr);
884 
885     /**
886      * @tc.steps7: call the function GetChildFocusNodeByType with FocusNodeType::DEFAULT and show_ = true and
887      *             IsDefaultGroupFocus = false.
888      * @tc.expected: The return value of the function is nullptr.
889      */
890     focusHub->SetShow(true);
891     focusHub->SetIsDefaultGroupFocus(false);
892     EXPECT_EQ(focusHub->GetChildFocusNodeByType(FocusNodeType::GROUP_DEFAULT), nullptr);
893 
894     /**
895      * @tc.steps8: call the function GetChildFocusNodeByType with FocusType::SCOPE.
896      * @tc.expected: The return value of the function is nullptr.
897      */
898     focusHub->SetFocusType(FocusType::SCOPE);
899     EXPECT_EQ(focusHub->GetChildFocusNodeByType(FocusNodeType::GROUP_DEFAULT), nullptr);
900 }
901 
902 /**
903  * @tc.name: FocusHubTestNg021
904  * @tc.desc: Test the function GoToFocusByTabNodeIdx.
905  * @tc.type: FUNC
906  */
907 HWTEST_F(FocusHubTestNg, FocusHubTestNg0021, TestSize.Level1)
908 {
909     /**
910      * @tc.steps1: initialize parameters.
911      */
912     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
913     eventHub->SetEnabled(true);
914     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
915 
916     /**
917      * @tc.steps2: call the function GoToFocusByTabNodeIdx with the empty TabIndexNodeList.
918      * @tc.expected: The return value of the function is false.
919      */
920     TabIndexNodeList tabIndexNodes;
921     EXPECT_FALSE(focusHub->GoToFocusByTabNodeIdx(tabIndexNodes, 0));
922 
923     /**
924      * @tc.steps3: call the function GoToFocusByTabNodeIdx with the unempty TabIndexNodeList.
925      * @tc.expected: The return value of the function is false.
926      */
927     tabIndexNodes.emplace_back(focusHub->GetTabIndex(), nullptr);
928     EXPECT_FALSE(focusHub->GoToFocusByTabNodeIdx(tabIndexNodes, 0));
929 
930     /**
931      * @tc.steps4: call the function GoToFocusByTabNodeIdx with the unempty TabIndexNodeList.
932      * @tc.expected: The return value of the function is false.
933      */
934     tabIndexNodes.emplace_back(focusHub->GetTabIndex(), focusHub);
935     EXPECT_FALSE(focusHub->GoToFocusByTabNodeIdx(tabIndexNodes, 1));
936 
937     /**
938      * @tc.steps5: call the function GoToFocusByTabNodeIdx with the unempty TabIndexNodeList.
939      * @tc.expected: The return value of the function is false.
940      */
941     focusHub->SetIsDefaultGroupHasFocused(false);
942     focusHub->SetFocusType(FocusType::SCOPE);
943     EXPECT_FALSE(focusHub->GoToFocusByTabNodeIdx(tabIndexNodes, 1));
944 
945     /**
946      * @tc.steps6: call the function GoToFocusByTabNodeIdx with the unempty TabIndexNodeList.
947      * @tc.expected: The return value of the function is false.
948      */
949     focusHub->SetIsDefaultGroupHasFocused(true);
950     focusHub->SetFocusType(FocusType::NODE);
951     EXPECT_FALSE(focusHub->GoToFocusByTabNodeIdx(tabIndexNodes, 1));
952 
953     /**
954      * @tc.steps7: call the function GoToFocusByTabNodeIdx with the unempty TabIndexNodeList.
955      * @tc.expected: The return value of the function is true.
956      */
957     focusHub->SetShow(true);
958     focusHub->focusable_ = true;
959     focusHub->parentFocusable_ = true;
960     EXPECT_TRUE(focusHub->GoToFocusByTabNodeIdx(tabIndexNodes, 1));
961 }
962 
963 /**
964  * @tc.name: FocusHubTestNg022
965  * @tc.desc: Test the function IsFocusableByTab, IsFocusableNodeByTab and IsFocusableScopeByTab.
966  * @tc.type: FUNC
967  */
968 HWTEST_F(FocusHubTestNg, FocusHubTestNg0022, TestSize.Level1)
969 {
970     /**
971      * @tc.steps1: initialize parameters.
972      */
973     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
974     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
975 
976     /**
977      * @tc.steps2: call the function IsFocusableByTab with FocusType::NODE.
978      * @tc.expected: The return value of the function is true.
979      */
980     focusHub->SetFocusType(FocusType::NODE);
981     EXPECT_TRUE(focusHub->IsFocusableByTab());
982 
983     /**
984      * @tc.steps3: call the function IsFocusableByTab with FocusType::SCOPE.
985      * @tc.expected: The return value of the function is true.
986      */
987     focusHub->SetFocusType(FocusType::SCOPE);
988     EXPECT_TRUE(focusHub->IsFocusableByTab());
989 
990     /**
991      * @tc.steps4: call the function IsFocusableByTab with FocusType::DISABLE.
992      * @tc.expected: The return value of the function is false.
993      */
994     focusHub->SetFocusType(FocusType::DISABLE);
995     EXPECT_FALSE(focusHub->IsFocusableByTab());
996 }
997 
998 /**
999  * @tc.name: FocusHubHandleDumpFocusTreeTest023
1000  * @tc.desc: Test the function DumpFocusTree.
1001  * @tc.type: FUNC
1002  */
1003 HWTEST_F(FocusHubTestNg, FocusHubHandleDumpFocusTreeTest023, TestSize.Level1)
1004 {
1005     /**
1006      * @tc.steps: step1. Create frameNode.
1007      */
1008     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1009         AceType::MakeRefPtr<Pattern>());
1010 
1011     /**
1012      * @tc.steps: step2. Create FocusHub.
1013      */
1014     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1015     eventHub->AttachHost(frameNode);
1016     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1017 
1018     /**
1019      * @tc.steps: step3. test function DumpFocusNodeTree.
1020      * @tc.expected: After DumpFocusTree, the DumpLog.description_ is empty.
1021      */
1022     int32_t depth = 1;
1023     focusHub->focusType_ = FocusType::NODE;
1024     auto ss = std::make_unique<std::ostringstream>();
1025     DumpLog::GetInstance().SetDumpFile(std::move(ss));
1026     focusHub->currentFocus_ = true;
1027     focusHub->DumpFocusTree(depth);
1028     EXPECT_TRUE(DumpLog::GetInstance().description_.empty());
1029 
1030     DumpLog::GetInstance().description_.push_back("test");
1031     focusHub->currentFocus_ = false;
1032     focusHub->focusable_ = false;
1033     focusHub->DumpFocusTree(depth);
1034     EXPECT_TRUE(DumpLog::GetInstance().description_.empty());
1035 
1036     /**
1037      * @tc.steps: step4. test function DumpFocusScopeTree.
1038      * @tc.expected: After DumpFocusTree, the DumpLog.description_ is empty.
1039      */
1040     DumpLog::GetInstance().description_.push_back("test");
1041     focusHub->focusType_ = FocusType::SCOPE;
1042     focusHub->currentFocus_ = true;
1043     focusHub->DumpFocusTree(depth);
1044     EXPECT_TRUE(DumpLog::GetInstance().description_.empty());
1045 
1046     DumpLog::GetInstance().description_.push_back("test");
1047     focusHub->currentFocus_ = false;
1048     focusHub->focusable_ = false;
1049     focusHub->DumpFocusTree(depth);
1050     EXPECT_TRUE(DumpLog::GetInstance().description_.empty());
1051 }
1052 
1053 /**
1054  * @tc.name: FocusHubRemoveChildTest001
1055  * @tc.desc: Test the function RemoveChild.
1056  * @tc.type: FUNC
1057  */
1058 HWTEST_F(FocusHubTestNg, FocusHubRemoveChildTest001, TestSize.Level1)
1059 {
1060     /**
1061      * @tc.steps: step1. Create frameNode.
1062      */
1063     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1064         AceType::MakeRefPtr<Pattern>());
1065     auto frameNode2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1066         AceType::MakeRefPtr<Pattern>());
1067     auto nodeParent = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BLANK_ETS_TAG, -1,
1068         AceType::MakeRefPtr<FlexLayoutPattern>());
1069     frameNode->GetOrCreateFocusHub();
1070     frameNode2->GetOrCreateFocusHub();
1071     nodeParent->GetOrCreateFocusHub();
1072     frameNode->SetParent(nodeParent);
1073     frameNode2->SetParent(nodeParent);
1074 
1075     /**
1076      * @tc.steps: step2. Create FocusHub.
1077      */
1078     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1079     eventHub->AttachHost(frameNode);
1080     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1081 
1082     /**
1083      * @tc.steps: step3. Get parentFocusHub.
1084      */
1085     focusHub->currentFocus_ = true;
1086     auto parent = focusHub->GetParentFocusHub();
1087 
1088     /**
1089      * @tc.steps: step4. Test RemoveChild and parentFocusHub RemoveSelf.
1090      * @tc.expected: focusHub and parentFocusHub both lostFocus.
1091      */
1092     parent->currentFocus_ = true;
1093     parent->RemoveChild(focusHub);
1094     EXPECT_EQ(parent->blurReason_, BlurReason::FRAME_DESTROY);
1095     EXPECT_EQ(focusHub->blurReason_, BlurReason::FRAME_DESTROY);
1096 }
1097 
1098 /**
1099  * @tc.name: FocusHubSetIsFocusOnTouch001
1100  * @tc.desc: Test the function SetIsFocusOnTouch.
1101  * @tc.type: FUNC
1102  */
1103 HWTEST_F(FocusHubTestNg, FocusHubSetIsFocusOnTouch001, TestSize.Level1)
1104 {
1105     /**
1106      * @tc.steps1: create frameNode.
1107      */
1108     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1109         AceType::MakeRefPtr<Pattern>());
1110 
1111     /**
1112      * @tc.steps2: create eventHub and focusHub.
1113      */
1114     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1115     eventHub->AttachHost(frameNode);
1116     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1117 
1118     /**
1119      * @tc.steps3: test SetIsFocusOnTouch.
1120      * @tc.expected: create touchEvents and set FocusOnTouch success.
1121      */
1122     focusHub->SetIsFocusOnTouch(true);
1123     auto gesture = frameNode->GetOrCreateGestureEventHub();
1124     EXPECT_FALSE(gesture->touchEventActuator_->touchEvents_.empty());
1125 
1126     /**
1127      * @tc.steps4: test SetIsFocusOnTouch.
1128      * @tc.expected: when touchEvents has been set, return.
1129      */
1130     focusHub->SetIsFocusOnTouch(true);
1131     EXPECT_TRUE(focusHub->IsFocusOnTouch().value());
1132 
1133     /**
1134      * @tc.steps4: test SetIsFocusOnTouch.
1135      * @tc.expected: set touchEvents false.
1136      */
1137     focusHub->SetIsFocusOnTouch(false);
1138     EXPECT_TRUE(gesture->touchEventActuator_->touchEvents_.empty());
1139 
1140     /**
1141      * @tc.steps5: test SetIsFocusOnTouch.
1142      * @tc.expected: set focusOnTouchListener_ success.
1143      */
1144     focusHub->SetIsFocusOnTouch(false);
1145     focusHub->focusOnTouchListener_ = nullptr;
1146     focusHub->SetIsFocusOnTouch(true);
1147     EXPECT_TRUE(focusHub->focusOnTouchListener_);
1148     auto touchCallback = focusHub->focusOnTouchListener_;
1149     TouchEventInfo touchEventInfo("onTouchUp");
1150     (*touchCallback)(touchEventInfo);
1151     TouchLocationInfo touchLocationInfo(1);
1152     touchLocationInfo.SetTouchType(TouchType::UP);
1153     touchEventInfo.AddTouchLocationInfo(std::move(touchLocationInfo));
1154     focusHub->SetFocusType(FocusType::NODE);
1155     focusHub->focusable_ = true;
1156     (*touchCallback)(touchEventInfo);
1157     EXPECT_TRUE(focusHub->currentFocus_);
1158 }
1159 
1160 /**
1161  * @tc.name: FocusHubOnKeyEvent002
1162  * @tc.desc: Test the function OnKeyEvent.
1163  * @tc.type: FUNC
1164  */
1165 HWTEST_F(FocusHubTestNg, FocusHubOnKeyEvent002, TestSize.Level1)
1166 {
1167     /**
1168      * @tc.steps1: create frameNode.
1169      */
1170     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1171         AceType::MakeRefPtr<Pattern>());
1172 
1173     /**
1174      * @tc.steps2: create eventHub and focusHub.
1175      */
1176     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1177     eventHub->AttachHost(frameNode);
1178     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1179     KeyEvent keyEvent;
1180     keyEvent.action = KeyAction::UP;
1181     keyEvent.code = KeyCode::KEY_SPACE;
1182 
1183     /**
1184      * @tc.steps3: call the function OnKeyEvent with FocusType::NODE.
1185      * @tc.expected: The return value of OnKeyEvent is true.
1186      */
1187     focusHub->SetFocusType(FocusType::NODE);
1188     focusHub->currentFocus_ = true;
__anon5533bfb00902(KeyEventInfo& eventInfo) 1189     auto onKeyEventCallback = [](KeyEventInfo& eventInfo) -> bool {
1190         eventInfo.SetStopPropagation(true);
1191         return false;
1192     };
__anon5533bfb00a02(const KeyEvent& event) 1193     auto onKeyEvent = [](const KeyEvent& event) -> bool { return true; };
1194     focusHub->SetOnKeyEventInternal(std::move(onKeyEvent));
1195     focusHub->SetOnKeyCallback(std::move(onKeyEventCallback));
1196     EXPECT_TRUE(focusHub->HandleEvent(keyEvent));
1197 }
1198 
1199 /**
1200  * @tc.name: FocusHubOnKeyEvent003
1201  * @tc.desc: Test the function OnKeyEvent.
1202  * @tc.type: FUNC obsolete
1203  */
1204 HWTEST_F(FocusHubTestNg, FocusHubOnKeyEvent003, TestSize.Level1)
1205 {
1206     /**
1207      * @tc.steps1: create frameNode.
1208      */
1209     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
1210     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1211         AceType::MakeRefPtr<ButtonPattern>());
1212     child->GetOrCreateFocusHub();
1213     frameNode->AddChild(child);
1214 
1215     /**
1216      * @tc.steps2: create eventHub and focusHub.
1217      */
1218     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1219     eventHub->AttachHost(frameNode);
1220     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1221 
1222     /**
1223      * @tc.steps3: create lastWeakFocusNode_.
1224      */
1225     std::list<RefPtr<FocusHub>> focusNodes;
1226     focusHub->FlushChildrenFocusHub(focusNodes);
1227     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(*(focusNodes.begin())));
1228 
1229     /**
1230      * @tc.steps4: create keyEvent.
1231      */
1232     KeyEvent keyEvent;
1233     keyEvent.action = KeyAction::UP;
1234     keyEvent.code = KeyCode::KEY_SPACE;
1235 
1236     /**
1237      * @tc.steps5: create lastFocusNode.
1238      */
1239     focusHub->currentFocus_ = true;
1240     focusHub->SetFocusType(FocusType::SCOPE);
__anon5533bfb00b02(const KeyEvent& event) 1241     auto onKeyEvent = [](const KeyEvent& event) -> bool { return true; };
1242 
1243     /**
1244      * @tc.steps6: call the function OnKeyEvent with FocusType::SCOPE.
1245      * @tc.expected: The return value of OnKeyEvent is false.
1246      */
1247     auto lastFocusNode = focusHub->lastWeakFocusNode_.Upgrade();
1248     lastFocusNode->currentFocus_ = true;
1249     lastFocusNode->SetOnKeyEventInternal(onKeyEvent);
1250     EXPECT_TRUE(focusHub->HandleEvent(keyEvent));
1251 
1252     /**
1253      * @tc.steps7: call the function OnKeyEvent with FocusType::SCOPE.
1254      * @tc.expected: The return value of OnKeyEvent is true.
1255      */
1256     lastFocusNode->currentFocus_ = false;
1257     focusHub->SetOnKeyEventInternal(onKeyEvent);
1258     EXPECT_TRUE(focusHub->HandleEvent(keyEvent));
1259 }
1260 
1261 /**
1262  * @tc.name: FocusHubOnKeyEvent004
1263  * @tc.desc: Test the function OnKeyEvent.
1264  * @tc.type: FUNC
1265  */
1266 HWTEST_F(FocusHubTestNg, FocusHubOnKeyEvent004, TestSize.Level1)
1267 {
1268     /**
1269      * @tc.steps1: create frameNode.
1270      */
1271     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1272         AceType::MakeRefPtr<Pattern>());
1273     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1274         AceType::MakeRefPtr<ButtonPattern>());
1275     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1276         AceType::MakeRefPtr<ButtonPattern>());
1277     child->GetOrCreateFocusHub();
1278     child2->GetOrCreateFocusHub();
1279     frameNode->AddChild(child);
1280     frameNode->AddChild(child2);
1281 
1282     /**
1283      * @tc.steps2: create eventHub and focusHub.
1284      */
1285     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1286     eventHub->AttachHost(frameNode);
1287     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1288     auto childEventHub = AceType::MakeRefPtr<EventHub>();
1289     childEventHub->AttachHost(child);
1290 
1291     /**
1292      * @tc.steps3: create lastWeakFocusNode_.
1293      */
1294     std::list<RefPtr<FocusHub>> focusNodes;
1295     focusHub->FlushChildrenFocusHub(focusNodes);
1296     auto childFocusHub = *focusNodes.begin();
1297     childFocusHub->eventHub_ = childEventHub;
1298     focusHub->lastWeakFocusNode_ = AceType::WeakClaim(AceType::RawPtr(childFocusHub));
1299 
1300     KeyEvent keyEvent;
1301     keyEvent.action = KeyAction::UP;
1302     auto pipeline = PipelineContext::GetCurrentContext();
1303     pipeline->isFocusActive_ = true;
1304 
1305     /**
1306      * @tc.steps5: test keyEvent with keyEvent.code == KeyCode::TV_CONTROL_UP.
1307      * @tc.expected: The return value of OnKeyEvent is false.
1308      */
1309     keyEvent.code = KeyCode::TV_CONTROL_UP;
1310     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1311 
1312     keyEvent.code = KeyCode::TV_CONTROL_DOWN;
1313     focusHub->SetScopeFocusAlgorithm();
1314     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1315 
1316     keyEvent.code = KeyCode::TV_CONTROL_LEFT;
1317     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1318 
1319     keyEvent.code = KeyCode::TV_CONTROL_RIGHT;
1320     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1321 
1322     keyEvent.code = KeyCode::KEY_TAB;
1323     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1324 
1325     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_SHIFT_LEFT);
1326     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1327 
1328     keyEvent.pressedCodes.emplace_back(KeyCode::KEY_TAB);
1329     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1330 
1331     keyEvent.code = KeyCode::KEY_MOVE_HOME;
1332     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1333 
1334     keyEvent.code = KeyCode::KEY_MOVE_END;
1335     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1336 
1337     keyEvent.code = KeyCode::KEY_SPACE;
1338     EXPECT_FALSE(focusHub->HandleEvent(keyEvent));
1339 }
1340 
1341 /**
1342  * @tc.name: FocusHubGoToNextFocusLinear001
1343  * @tc.desc: Test the function GoToNextFocusLinear.
1344  * @tc.type: FUNC
1345  */
1346 HWTEST_F(FocusHubTestNg, FocusHubGoToNextFocusLinear001, TestSize.Level1)
1347 {
1348     /**
1349      * @tc.steps: step1. Create frameNode.
1350      */
1351     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1352         AceType::MakeRefPtr<Pattern>());
1353     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1354         AceType::MakeRefPtr<ButtonPattern>());
1355     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1356         AceType::MakeRefPtr<ButtonPattern>());
1357     child->GetOrCreateFocusHub();
1358     child2->GetOrCreateFocusHub();
1359     frameNode->AddChild(child);
1360     frameNode->AddChild(child2);
1361 
1362     /**
1363      * @tc.steps: step2. Create FocusHub.
1364      */
1365     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1366     eventHub->AttachHost(frameNode);
1367     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1368 
1369     focusHub->currentFocus_ = true;
1370 
1371     std::list<RefPtr<FocusHub>> focusNodes;
1372     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1373 
1374     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1375     EXPECT_TRUE(focusHub->GoToNextFocusLinear(FocusStep::TAB));
1376 }
1377 
1378 /**
1379  * @tc.name: FocusHubPaintFocusState001
1380  * @tc.desc: Test the function PaintFocusState.
1381  * @tc.type: FUNC
1382  */
1383 HWTEST_F(FocusHubTestNg, PaintFocusState001, TestSize.Level1)
1384 {
1385     /**
1386      * @tc.steps1: create frameNode.
1387      */
1388     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1389         AceType::MakeRefPtr<Pattern>());
1390     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1391         AceType::MakeRefPtr<ButtonPattern>());
1392     child->GetOrCreateFocusHub();
1393     frameNode->AddChild(child);
1394 
1395     /**
1396      * @tc.steps2: create eventHub and focusHub.
1397      */
1398     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1399     ASSERT_NE(eventHub, nullptr);
1400     eventHub->AttachHost(frameNode);
1401     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1402     ASSERT_NE(focusHub, nullptr);
1403     auto context = PipelineContext::GetCurrentContext();
1404     ASSERT_NE(context, nullptr);
1405     auto renderContext = frameNode->GetRenderContext();
1406     ASSERT_NE(renderContext, nullptr);
1407 
1408     /**
1409      * @tc.steps3: create KeyEvent.
1410      */
1411     KeyEvent keyEvent;
1412     keyEvent.action = KeyAction::DOWN;
1413     keyEvent.code = KeyCode::KEY_SPACE;
1414 
1415     focusHub->SetFocusType(FocusType::SCOPE);
1416     EXPECT_EQ(focusHub->focusStyleType_, FocusStyleType::NONE);
1417 }
1418 
1419 /**
1420  * @tc.name: FocusHubSetIsDefaultFocus001
1421  * @tc.desc: Test the function SetIsDefaultFocus.
1422  * @tc.type: FUNC
1423  */
1424 HWTEST_F(FocusHubTestNg, SetIsDefaultFocus001, TestSize.Level1)
1425 {
1426     /**
1427      * @tc.steps1: create frameNode.
1428      */
1429     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1430         AceType::MakeRefPtr<Pattern>());
1431 
1432     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1433     ASSERT_NE(eventHub, nullptr);
1434     eventHub->AttachHost(frameNode);
1435     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1436     ASSERT_NE(focusHub, nullptr);
1437 
1438     auto pipeline = PipelineContext::GetCurrentContext();
1439     ASSERT_NE(pipeline, nullptr);
1440     auto manager = pipeline->GetOverlayManager();
1441     ASSERT_NE(manager, nullptr);
1442     auto rootNode = pipeline->GetRootElement();
1443     EXPECT_NE(rootNode, nullptr);
1444 
1445     focusHub->focusCallbackEvents_ = nullptr;
1446     focusHub->SetIsDefaultGroupFocus(false);
1447     EXPECT_NE(focusHub->focusCallbackEvents_, nullptr);
1448 }
1449 
1450 /**
1451  * @tc.name: FocusHubTestDisableFocus001
1452  * @tc.desc: Test disable functions Onfocus.
1453  * @tc.type: FUNC
1454  */
1455 HWTEST_F(FocusHubTestNg, FocusHubTestDisableFocus001, TestSize.Level1)
1456 {
1457     /**
1458      * @tc.steps1: initialize parameters.
1459      */
1460     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1461         AceType::MakeRefPtr<ButtonPattern>());
1462     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1463     eventHub->host_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1464     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1465 
1466     /**
1467      * @tc.steps2: call the function OnFocus with FocusType::NODE.
1468      * @tc.expected: The result is right.
1469      */
1470     focusHub->SetFocusType(FocusType::NODE);
1471     std::string result;
__anon5533bfb00c02() 1472     auto onFocus = [&result]() { result = RESULT_SUCCESS_ONE; };
1473     focusHub->SetOnFocusCallback(onFocus);
1474     focusHub->currentFocus_ = true;
1475     EXPECT_NE(focusHub->GetOnFocusCallback(), nullptr);
1476 
1477     focusHub->OnFocus();
1478     EXPECT_EQ(result, RESULT_SUCCESS_ONE);
1479 
1480     /**
1481      * @tc.steps3: clear the function.
1482      * @tc.expected: The result is nullptr.
1483      */
1484     focusHub->ClearOnFocusCallback();
1485     EXPECT_EQ(focusHub->GetOnFocusCallback(), nullptr);
1486 
1487     /**
1488      * @tc.steps3: set the function again.
1489      * @tc.expected: The result is right.
1490      */
__anon5533bfb00d02() 1491     auto onFocus2 = [&result]() { result = RESULT_SUCCESS_TWO; };
1492     focusHub->SetOnFocusCallback(onFocus2);
1493     focusHub->currentFocus_ = true;
1494     EXPECT_NE(focusHub->GetOnFocusCallback(), nullptr);
1495 
1496     focusHub->OnFocus();
1497     EXPECT_EQ(result, RESULT_SUCCESS_TWO);
1498 }
1499 
1500 /**
1501  * @tc.name: FocusHubTestDisableBlur001
1502  * @tc.desc: Test disable functions OnBlur.
1503  * @tc.type: FUNC
1504  */
1505 HWTEST_F(FocusHubTestNg, FocusHubTestDisableBlur001, TestSize.Level1)
1506 {
1507     /**
1508      * @tc.steps1: initialize parameters.
1509      */
1510     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1511         AceType::MakeRefPtr<ButtonPattern>());
1512     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1513     eventHub->host_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1514     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1515 
1516     /**
1517      * @tc.steps2: call the function OnBlur with FocusType::NODE.
1518      * @tc.expected: The result is right.
1519      */
1520     focusHub->SetFocusType(FocusType::NODE);
1521     std::string result;
__anon5533bfb00e02() 1522     auto onBlur = [&result]() { result = RESULT_SUCCESS_ONE; };
1523     focusHub->SetOnBlurCallback(onBlur);
1524     EXPECT_NE(focusHub->GetOnBlurCallback(), nullptr);
1525 
1526     focusHub->OnBlur();
1527     EXPECT_EQ(result, RESULT_SUCCESS_ONE);
1528 
1529     /**
1530      * @tc.steps3: clear the function OnBlur.
1531      * @tc.expected: The result is nullptr.
1532      */
1533     focusHub->ClearOnBlurCallback();
1534     EXPECT_EQ(focusHub->GetOnBlurCallback(), nullptr);
1535 
1536     /**
1537      * @tc.steps3: set the function OnBlur again.
1538      * @tc.expected: The result is right.
1539      */
__anon5533bfb00f02() 1540     auto onBlur2 = [&result]() { result = RESULT_SUCCESS_TWO; };
1541     focusHub->SetOnBlurCallback(onBlur2);
1542     EXPECT_NE(focusHub->GetOnBlurCallback(), nullptr);
1543 
1544     focusHub->OnBlur();
1545     EXPECT_EQ(result, RESULT_SUCCESS_TWO);
1546 }
1547 
1548 /**
1549  * @tc.name: FocusHubTestDisableKey001
1550  * @tc.desc: Test disable functions OnKey.
1551  * @tc.type: FUNC
1552  */
1553 HWTEST_F(FocusHubTestNg, FocusHubTestDisableKey001, TestSize.Level1)
1554 {
1555     /**
1556      * @tc.steps1: initialize parameters.
1557      */
1558     auto frameNode = FrameNodeOnTree::CreateFrameNode("frameNode", 101,
1559         AceType::MakeRefPtr<ButtonPattern>());
1560     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1561     eventHub->host_ = AceType::WeakClaim(AceType::RawPtr(frameNode));
1562     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1563     focusHub->currentFocus_ = true;
1564 
1565     /**
1566      * @tc.steps2: call the function OnKey with FocusType::NODE.
1567      * @tc.expected: The result is right.
1568      */
1569     focusHub->SetFocusType(FocusType::NODE);
1570     std::string result;
__anon5533bfb01002(KeyEventInfo& info) 1571     auto onKey = [&result](KeyEventInfo& info) -> bool {
1572         result = RESULT_SUCCESS_ONE;
1573         return false;
1574     };
1575     focusHub->SetOnKeyCallback(onKey);
1576     EXPECT_NE(focusHub->GetOnKeyCallback(), nullptr);
1577     KeyEvent keyEvent;
1578     keyEvent.action = KeyAction::UP;
1579     focusHub->HandleEvent(keyEvent);
1580     EXPECT_EQ(result, RESULT_SUCCESS_ONE);
1581 
1582     /**
1583      * @tc.steps3: clear the function OnKey.
1584      * @tc.expected: The result is nullptr.
1585      */
1586     focusHub->ClearOnKeyCallback();
1587     EXPECT_EQ(focusHub->GetOnKeyCallback(), nullptr);
1588 
1589     /**
1590      * @tc.steps4: set the function OnKey again.
1591      * @tc.expected: The result is right.
1592      */
__anon5533bfb01102(KeyEventInfo& info) 1593     auto onKey2 = [&result](KeyEventInfo& info) -> bool {
1594         result = RESULT_SUCCESS_TWO;
1595         return false;
1596     };
1597     focusHub->SetOnKeyCallback(onKey2);
1598     EXPECT_NE(focusHub->GetOnKeyCallback(), nullptr);
1599 
1600     focusHub->HandleEvent(keyEvent);
1601     EXPECT_EQ(result, RESULT_SUCCESS_TWO);
1602 }
1603 
1604 /**
1605  * @tc.name: FocusHubTestNg0030
1606  * @tc.desc: Test the function GoToNextFocusLinear.
1607  * @tc.type: FUNC
1608  */
1609 HWTEST_F(FocusHubTestNg, FocusHubTestNg0030, TestSize.Level1)
1610 {
1611     /**
1612      * @tc.steps: step1. Create frameNode.
1613      */
1614     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1615         AceType::MakeRefPtr<Pattern>());
1616     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1617         AceType::MakeRefPtr<ButtonPattern>());
1618     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1619         AceType::MakeRefPtr<ButtonPattern>());
1620     child->GetOrCreateFocusHub();
1621     child2->GetOrCreateFocusHub();
1622     frameNode->AddChild(child);
1623     frameNode->AddChild(child2);
1624     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1625     eventHub->AttachHost(frameNode);
1626     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1627     focusHub->currentFocus_ = true;
1628     std::list<RefPtr<FocusHub>> focusNodes;
1629     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1630     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1631     EXPECT_FALSE(focusHub->GoToNextFocusLinear(FocusStep::NONE));
1632 }
1633 
1634 /**
1635  * @tc.name: FocusHubTestNg0031
1636  * @tc.desc: Test the function IsNeedPaintFocusState.
1637  * @tc.type: FUNC
1638  */
1639 HWTEST_F(FocusHubTestNg, FocusHubTestNg0031, TestSize.Level1)
1640 {
1641     /**
1642      * @tc.steps: step1. Create frameNode.
1643      */
1644     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1645         AceType::MakeRefPtr<Pattern>());
1646     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1647         AceType::MakeRefPtr<ButtonPattern>());
1648     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1649         AceType::MakeRefPtr<ButtonPattern>());
1650     child->GetOrCreateFocusHub();
1651     child2->GetOrCreateFocusHub();
1652     frameNode->AddChild(child);
1653     frameNode->AddChild(child2);
1654     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1655     eventHub->AttachHost(frameNode);
1656     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1657     std::list<RefPtr<FocusHub>> focusNodes;
1658     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1659     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1660     focusHub->IsNeedPaintFocusState();
1661     focusHub->focusType_ = FocusType::NODE;
1662     focusHub->focusStyleType_ = FocusStyleType::OUTER_BORDER;
1663     focusHub->IsNeedPaintFocusState();
1664     focusHub->focusType_ = FocusType::NODE;
1665     EXPECT_TRUE(focusHub->IsNeedPaintFocusState());
1666 }
1667 
1668 /**
1669  * @tc.name: FocusHubTestNg0032
1670  * @tc.desc: Test the function PaintFocusState.
1671  * @tc.type: FUNC
1672  */
1673 HWTEST_F(FocusHubTestNg, FocusHubTestNg0032, TestSize.Level1)
1674 {
1675     /**
1676      * @tc.steps: step1. Create frameNode.
1677      */
1678     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1679         AceType::MakeRefPtr<Pattern>());
1680     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1681         AceType::MakeRefPtr<ButtonPattern>());
1682     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1683         AceType::MakeRefPtr<ButtonPattern>());
1684     child->GetOrCreateFocusHub();
1685     child2->GetOrCreateFocusHub();
1686     frameNode->AddChild(child);
1687     frameNode->AddChild(child2);
1688     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1689     eventHub->AttachHost(frameNode);
1690     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1691     auto context = PipelineContext::GetCurrentContext();
1692     ASSERT_NE(context, nullptr);
1693     context->isFocusActive_ = true;
1694     focusHub->focusType_ = FocusType::NODE;
1695     focusHub->focusStyleType_ = FocusStyleType::OUTER_BORDER;
1696     std::list<RefPtr<FocusHub>> focusNodes;
1697     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1698     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1699     EXPECT_FALSE(focusHub->PaintFocusState(true));
1700     EXPECT_FALSE(focusHub->PaintFocusState(false));
1701 }
1702 
1703 /**
1704  * @tc.name: FocusHubTestNg0033
1705  * @tc.desc: Test the function AcceptFocusOfSpecifyChild.
1706  * @tc.type: FUNC
1707  */
1708 HWTEST_F(FocusHubTestNg, FocusHubTestNg0033, TestSize.Level1)
1709 {
1710     /**
1711      * @tc.steps: step1. Create frameNode.
1712      */
1713     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1714         AceType::MakeRefPtr<Pattern>());
1715     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1716         AceType::MakeRefPtr<ButtonPattern>());
1717     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1718         AceType::MakeRefPtr<ButtonPattern>());
1719     child->GetOrCreateFocusHub();
1720     child2->GetOrCreateFocusHub();
1721     frameNode->AddChild(child);
1722     frameNode->AddChild(child2);
1723     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1724     eventHub->AttachHost(frameNode);
1725     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1726     focusHub->focusType_ = FocusType::DISABLE;
1727     std::list<RefPtr<FocusHub>> focusNodes;
1728     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1729     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1730     focusHub->AcceptFocusOfSpecifyChild(FocusStep::TAB);
1731     focusHub->focusType_ = FocusType::SCOPE;
1732     EXPECT_FALSE(focusHub->AcceptFocusOfSpecifyChild(FocusStep::SHIFT_TAB));
1733     EXPECT_FALSE(focusHub->AcceptFocusOfSpecifyChild(FocusStep::TAB));
1734 }
1735 
1736 /**
1737  * @tc.name: FocusHubTestNg0034
1738  * @tc.desc: Test the function ClearFocusState.
1739  * @tc.type: FUNC
1740  */
1741 HWTEST_F(FocusHubTestNg, FocusHubTestNg0034, TestSize.Level1)
1742 {
1743     /**
1744      * @tc.steps: step1. Create frameNode.
1745      */
1746     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1747         AceType::MakeRefPtr<Pattern>());
1748     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1749     eventHub->AttachHost(frameNode);
1750     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1751     focusHub->focusStyleType_ = FocusStyleType::CUSTOM_REGION;
1752     std::list<RefPtr<FocusHub>> focusNodes;
1753     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1754     EXPECT_EQ(itNewFocusNode, focusNodes.end());
__anon5533bfb01202() 1755     focusHub->onClearFocusStateCallback_ = []() {};
1756     focusHub->ClearFocusState(true);
1757     focusHub->ClearFocusState(false);
1758     EXPECT_NE(focusHub->focusStyleType_, FocusStyleType::NONE);
1759 }
1760 
1761 /**
1762  * @tc.name: FocusHubTestNg0035
1763  * @tc.desc: Test the function RequestFocusImmediately.
1764  * @tc.type: FUNC
1765  */
1766 HWTEST_F(FocusHubTestNg, FocusHubTestNg0035, TestSize.Level1)
1767 {
1768     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1769     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1770     auto context = PipelineContext::GetCurrentContext();
1771     ASSERT_NE(context, nullptr);
1772 
1773     context->SetIsFocusingByTab(true);
1774     focusHub->SetFocusType(FocusType::DISABLE);
1775     focusHub->focusType_ = FocusType::NODE;
1776     focusHub->currentFocus_ = false;
__anon5533bfb01302() 1777     focusHub->onPreFocusCallback_ = []() {};
1778     EXPECT_FALSE(focusHub->RequestFocusImmediately());
1779     EXPECT_FALSE(focusHub->RequestFocusImmediately());
1780     context->SetIsFocusingByTab(false);
1781     focusHub->SetFocusType(FocusType::DISABLE);
1782     focusHub->currentFocus_ = true;
1783     EXPECT_TRUE(focusHub->RequestFocusImmediately());
1784 }
1785 
1786 /**
1787  * @tc.name: FocusHubTestNg0036
1788  * @tc.desc: Test the function OnFocusScope.
1789  * @tc.type: FUNC
1790  */
1791 HWTEST_F(FocusHubTestNg, FocusHubTestNg0036, TestSize.Level1)
1792 {
1793     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1794         AceType::MakeRefPtr<Pattern>());
1795     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1796         AceType::MakeRefPtr<ButtonPattern>());
1797     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1798         AceType::MakeRefPtr<ButtonPattern>());
1799     child->GetOrCreateFocusHub();
1800     child2->GetOrCreateFocusHub();
1801     frameNode->AddChild(child);
1802     frameNode->AddChild(child2);
1803     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1804     eventHub->AttachHost(frameNode);
1805     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1806     focusHub->currentFocus_ = true;
1807     std::list<RefPtr<FocusHub>> focusNodes;
1808     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1809     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1810     focusHub->OnFocusScope();
1811     EXPECT_TRUE(focusHub->currentFocus_);
1812 }
1813 
1814 /**
1815  * @tc.name: FocusHubTestNg0037
1816  * @tc.desc: Test the function IsFocusableScopeByTab.
1817  * @tc.type: FUNC
1818  */
1819 HWTEST_F(FocusHubTestNg, FocusHubTestNg0037, TestSize.Level1)
1820 {
1821     /**
1822      * @tc.steps: step1. Create frameNode.
1823      */
1824     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1825         AceType::MakeRefPtr<Pattern>());
1826     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1827         AceType::MakeRefPtr<ButtonPattern>());
1828     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
1829         AceType::MakeRefPtr<ButtonPattern>());
1830     child->GetOrCreateFocusHub();
1831     child2->GetOrCreateFocusHub();
1832     frameNode->AddChild(child);
1833     frameNode->AddChild(child2);
1834     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1835     eventHub->AttachHost(frameNode);
1836     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1837     focusHub->currentFocus_ = true;
1838     std::list<RefPtr<FocusHub>> focusNodes;
1839     auto itNewFocusNode = focusHub->FlushChildrenFocusHub(focusNodes);
1840     EXPECT_EQ(itNewFocusNode, focusNodes.end());
1841     EXPECT_TRUE(focusHub->IsFocusableScopeByTab());
1842 }
1843 
1844 /**
1845  * @tc.name: FocusHubTestNg0038
1846  * @tc.desc: Test the function IsCurrentFocusWholePath.
1847  * @tc.type: FUNC
1848  */
1849 HWTEST_F(FocusHubTestNg, FocusHubTestNg0038, TestSize.Level1)
1850 {
1851     /**
1852      * @tc.steps: step1. Create frameNode.
1853      */
1854     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1855         AceType::MakeRefPtr<Pattern>());
1856     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1857     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1858     ASSERT_NE(focusHub, nullptr);
1859     EXPECT_FALSE(focusHub->IsCurrentFocusWholePath());
1860     focusHub->currentFocus_ = true;
1861     EXPECT_FALSE(focusHub->IsCurrentFocusWholePath());
1862     focusHub->focusType_ = FocusType::NODE;
1863     EXPECT_TRUE(focusHub->IsCurrentFocusWholePath());
1864     focusHub->focusType_ = FocusType::SCOPE;
1865     EXPECT_FALSE(focusHub->IsCurrentFocusWholePath());
1866 }
1867 
1868 /**
1869  * @tc.name: FocusHubTestNg0039
1870  * @tc.desc: Test the function DumpFocusTree.
1871  * @tc.type: FUNC
1872  */
1873 HWTEST_F(FocusHubTestNg, FocusHubTestNg0039, TestSize.Level1)
1874 {
1875     /**
1876      * @tc.steps: step1. Create frameNode.
1877      */
1878     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1879         AceType::MakeRefPtr<Pattern>());
1880     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1881     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1882     ASSERT_NE(focusHub, nullptr);
1883     int32_t depth = 1;
1884     focusHub->focusType_ = FocusType::DISABLE;
1885     focusHub->DumpFocusTree(depth);
1886 }
1887 
1888 /**
1889  * @tc.name: FocusHubTestNg0040
1890  * @tc.desc: Test the function AcceptFocusOfLastFocus and AcceptFocusByRectOfLastFocus.
1891  * @tc.type: FUNC
1892  */
1893 HWTEST_F(FocusHubTestNg, FocusHubTestNg0040, TestSize.Level1)
1894 {
1895     /**
1896      * @tc.steps: step1. Create frameNode.
1897      */
1898     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1899         AceType::MakeRefPtr<Pattern>());
1900     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1901     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1902     ASSERT_NE(focusHub, nullptr);
1903     RectF childRect;
1904     focusHub->focusType_ = FocusType::SCOPE;
1905     EXPECT_FALSE(focusHub->AcceptFocusOfLastFocus());
1906     EXPECT_FALSE(focusHub->AcceptFocusByRectOfLastFocus(childRect));
1907     focusHub->focusType_ = FocusType::NODE;
1908     EXPECT_FALSE(focusHub->AcceptFocusOfLastFocus());
1909     EXPECT_FALSE(focusHub->AcceptFocusByRectOfLastFocus(childRect));
1910     focusHub->focusType_ = FocusType::DISABLE;
1911     EXPECT_FALSE(focusHub->AcceptFocusOfLastFocus());
1912     EXPECT_FALSE(focusHub->AcceptFocusByRectOfLastFocus(childRect));
1913 }
1914 
1915 /**
1916  * @tc.name: FocusHubTestNg0041
1917  * @tc.desc: Test the function SetShow, SetEnabled, SetEnabledNode and SetEnabledScope.
1918  * @tc.type: FUNC
1919  */
1920 HWTEST_F(FocusHubTestNg, FocusHubTestNg0041, TestSize.Level1)
1921 {
1922     /**
1923      * @tc.steps: step1. Create frameNode.
1924      */
1925     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1926         AceType::MakeRefPtr<Pattern>());
1927     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1928     eventHub->AttachHost(frameNode);
1929     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1930     ASSERT_NE(focusHub, nullptr);
1931     auto frameNode_test = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_COMPONENT_TAG, -1,
1932         AceType::MakeRefPtr<Pattern>());
1933     frameNode->parent_ = AceType::WeakClaim(AceType::RawPtr(frameNode_test));
1934     AceType::DynamicCast<FrameNodeOnTree>(frameNode->GetParent())
1935         ->GetLayoutProperty()
1936         ->UpdateVisibility(VisibleType::INVISIBLE);
1937     focusHub->IsShow();
1938 }
1939 
1940 /**
1941  * @tc.name: FocusHubTestNg0042
1942  * @tc.desc: Test the function OnClick.
1943  * @tc.type: FUNC
1944  */
1945 HWTEST_F(FocusHubTestNg, FocusHubTestNg0042, TestSize.Level1)
1946 {
1947     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
1948         AceType::MakeRefPtr<Pattern>());
1949     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1950     eventHub->AttachHost(frameNode);
1951     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1952     ASSERT_NE(focusHub, nullptr);
1953     KeyEvent keyEvent;
__anon5533bfb01402(GestureEvent&) 1954     focusHub->SetOnClickCallback([](GestureEvent&) { return; });
1955     focusHub->OnClick(keyEvent);
1956 }
1957 
1958 /**
1959  * @tc.name: HasBackwardFocusMovementInChildren001
1960  * @tc.desc: Test the function HasBackwardFocusMovementInChildren.
1961  * @tc.type: FUNC
1962  */
1963 HWTEST_F(FocusHubTestNg, HasBackwardFocusMovementInChildren001, TestSize.Level1)
1964 {
1965     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
1966     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1967     eventHub->AttachHost(frameNode);
1968     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1969     ASSERT_NE(focusHub, nullptr);
1970     KeyEvent keyEvent;
1971     ASSERT_FALSE(focusHub->HasBackwardFocusMovementInChildren());
1972 }
1973 
1974 /**
1975  * @tc.name: HasForwardFocusMovementInChildren001
1976  * @tc.desc: Test the function HasForwardFocusMovementInChildren.
1977  * @tc.type: FUNC
1978  */
1979 HWTEST_F(FocusHubTestNg, HasForwardFocusMovementInChildren001, TestSize.Level1)
1980 {
1981     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
1982     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1983     eventHub->AttachHost(frameNode);
1984     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
1985     ASSERT_NE(focusHub, nullptr);
1986     KeyEvent keyEvent;
1987     ASSERT_FALSE(focusHub->HasForwardFocusMovementInChildren());
1988 }
1989 
1990 /**
1991  * @tc.name: ClearFocusMovementFlagsInChildren001
1992  * @tc.desc: Test the function ClearFocusMovementFlagsInChildren.
1993  * @tc.type: FUNC
1994  */
1995 HWTEST_F(FocusHubTestNg, ClearFocusMovementFlagsInChildren001, TestSize.Level1)
1996 {
1997     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
1998     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
1999     eventHub->AttachHost(frameNode);
2000     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2001     ASSERT_NE(focusHub, nullptr);
2002     KeyEvent keyEvent;
2003     ASSERT_FALSE(focusHub->HasBackwardFocusMovement());
2004 }
2005 
2006 /**
2007  * @tc.name: SetLastWeakFocusToPreviousInFocusView001
2008  * @tc.desc: Test the function SetLastWeakFocusToPreviousInFocusView.
2009  * @tc.type: FUNC
2010  */
2011 HWTEST_F(FocusHubTestNg, SetLastWeakFocusToPreviousInFocusView001, TestSize.Level1)
2012 {
2013     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1, AceType::MakeRefPtr<Pattern>());
2014     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2015     eventHub->AttachHost(frameNode);
2016     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2017     ASSERT_NE(focusHub, nullptr);
2018     KeyEvent keyEvent;
2019     focusHub->SetLastWeakFocusToPreviousInFocusView();
2020     ASSERT_FALSE(focusHub->lastWeakFocusNode_.Upgrade());
2021 }
2022 
2023 /**
2024  * @tc.name: FocusHubFlushChildrenFocusHubTest001
2025  * @tc.desc: Test the function SetTabStop and IsTabStop
2026  * @tc.type: FUNC
2027  */
2028 HWTEST_F(FocusHubTestNg, FocusHubSetTabStopTest001, TestSize.Level1)
2029 {
2030     /**
2031      * @tc.steps: step1. Create frameNode
2032      */
2033     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2034         AceType::MakeRefPtr<Pattern>());
2035     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2036     eventHub->AttachHost(frameNode);
2037     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2038     EXPECT_EQ(focusHub->IsTabStop(), false);
2039     focusHub->SetTabStop(true);
2040     EXPECT_EQ(focusHub->IsTabStop(), true);
2041     focusHub->SetTabStop(false);
2042     EXPECT_EQ(focusHub->IsTabStop(), false);
2043 }
2044 
2045 /**
2046  * @tc.name: FocusHubRequestNextFocusOfKeyEnterTest001
2047  * @tc.desc: Test the function RequestNextFocusOfKeyEnter
2048  * @tc.type: FUNC
2049  */
2050 HWTEST_F(FocusHubTestNg, FocusHubRequestNextFocusOfKeyEnterTest001, TestSize.Level1)
2051 {
2052     /**
2053      * @tc.steps: step1. Create frameNode
2054      */
2055     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2056         AceType::MakeRefPtr<Pattern>());
2057     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2058     eventHub->AttachHost(frameNode);
2059     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2060     EXPECT_EQ(focusHub->RequestNextFocusOfKeyEnter(), false);
2061     focusHub->SetTabStop(true);
2062     focusHub->focusType_ = FocusType::NODE;
2063     EXPECT_EQ(focusHub->RequestNextFocusOfKeyEnter(), false);
2064     focusHub->SetTabStop(true);
2065     focusHub->focusType_ = FocusType::SCOPE;
2066     EXPECT_EQ(focusHub->RequestNextFocusOfKeyEnter(), true);
2067 }
2068 
2069 /**
2070  * @tc.name: FocusHubRequestNextFocusOfKeyEscTest001
2071  * @tc.desc: Test the function RequestNextFocusOfKeyEsc
2072  * @tc.type: FUNC
2073  */
2074 HWTEST_F(FocusHubTestNg, FocusHubRequestNextFocusOfKeyEscTest001, TestSize.Level1)
2075 {
2076     /**
2077      * @tc.steps: step1. Create frameNode
2078      */
2079     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2080         AceType::MakeRefPtr<Pattern>());
2081     auto child = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
2082         AceType::MakeRefPtr<ButtonPattern>());
2083     auto child2 = AceType::MakeRefPtr<FrameNodeOnTree>(V2::BUTTON_ETS_TAG, -1,
2084         AceType::MakeRefPtr<ButtonPattern>());
2085     child->GetOrCreateFocusHub();
2086     child2->GetOrCreateFocusHub();
2087     frameNode->AddChild(child);
2088     frameNode->AddChild(child2);
2089 
2090     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2091     eventHub->AttachHost(frameNode);
2092     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2093     EXPECT_EQ(focusHub->RequestNextFocusOfKeyEsc(), false);
2094 
2095     focusHub->SetTabStop(true);
2096     EXPECT_EQ(focusHub->RequestNextFocusOfKeyEsc(), false);
2097 
2098     focusHub->SetTabStop(false);
2099     RefPtr<EventHub> eventHub1 = AceType::MakeRefPtr<EventHub>();
2100     eventHub1->AttachHost(child);
2101     auto focusHub1 = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub1)));
2102     focusHub1->SetTabStop(true);
2103     EXPECT_EQ(focusHub1->RequestNextFocusOfKeyEsc(), false);
2104 }
2105 
2106 /**
2107  * @tc.name: FocusHubOnFocusAxisEvent001
2108  * @tc.desc: Test the function OnFocusKeyEvent.
2109  * @tc.type: FUNC
2110  */
2111 HWTEST_F(FocusHubTestNg, FocusHubOnFocusAxisEvent001, TestSize.Level1)
2112 {
2113     /**
2114      * @tc.steps1: create frameNode.
2115      */
2116     auto frameNode = AceType::MakeRefPtr<FrameNodeOnTree>(V2::ROW_ETS_TAG, -1,
2117         AceType::MakeRefPtr<Pattern>());
2118 
2119     /**
2120      * @tc.steps2: create eventHub and focusHub.
2121      */
2122     RefPtr<EventHub> eventHub = AceType::MakeRefPtr<EventHub>();
2123     eventHub->AttachHost(frameNode);
2124     auto focusHub = AceType::MakeRefPtr<FocusHub>(AceType::WeakClaim(AceType::RawPtr(eventHub)));
2125     FocusAxisEvent focusAxisEvent;
2126     focusAxisEvent.absXValue = 0.5;
2127     focusAxisEvent.absYValue = 0.5;
2128     focusAxisEvent.absZValue = 0.5;
2129     focusAxisEvent.absRzValue = 0.5;
2130     focusAxisEvent.absHat0XValue = 1;
2131     focusAxisEvent.absHat0YValue = 1;
2132     focusAxisEvent.absBrakeValue = 0.5;
2133     focusAxisEvent.absGasValue = 0.5;
2134     focusAxisEvent.sourceType = SourceType::MOUSE;
2135     focusAxisEvent.sourceTool = SourceTool::JOYSTICK;
2136     focusAxisEvent.deviceId = 10;
2137     std::chrono::microseconds microseconds(GetSysTimestamp());
2138     TimeStamp time(microseconds);
2139     focusAxisEvent.time = time;
2140     focusAxisEvent.pressedCodes.emplace_back(KeyCode::KEY_CTRL_LEFT);
2141 
2142     /**
2143      * @tc.steps3: call the function OnKeyEvent with FocusType::NODE.
2144      * @tc.expected: The return value of OnKeyEvent is true.
2145      */
2146     focusHub->SetFocusType(FocusType::NODE);
2147     focusHub->currentFocus_ = true;
2148     FocusAxisEventInfo axisEventInfo({});
__anon5533bfb01502(FocusAxisEventInfo& eventInfo) 2149     auto onFocusAxisEventCallback = [&axisEventInfo](FocusAxisEventInfo& eventInfo) {
2150         eventInfo.SetStopPropagation(true);
2151         axisEventInfo = eventInfo;
2152     };
2153     focusHub->SetOnFocusAxisCallback(std::move(onFocusAxisEventCallback));
2154     EXPECT_TRUE(focusHub->HandleEvent(focusAxisEvent));
2155     EXPECT_EQ(axisEventInfo.GetAbsXValue(), 0.5);
2156     EXPECT_EQ(axisEventInfo.GetAbsYValue(), 0.5);
2157     EXPECT_EQ(axisEventInfo.GetAbsZValue(), 0.5);
2158     EXPECT_EQ(axisEventInfo.GetAbsRzValue(), 0.5);
2159     EXPECT_EQ(axisEventInfo.GetAbsHat0XValue(), 1);
2160     EXPECT_EQ(axisEventInfo.GetAbsHat0YValue(), 1);
2161     EXPECT_EQ(axisEventInfo.GetAbsBrakeValue(), 0.5);
2162     EXPECT_EQ(axisEventInfo.GetAbsGasValue(), 0.5);
2163     EXPECT_EQ(axisEventInfo.GetSourceDevice(), SourceType::MOUSE);
2164     EXPECT_EQ(axisEventInfo.GetSourceTool(), SourceTool::JOYSTICK);
2165     EXPECT_EQ(axisEventInfo.GetDeviceId(), 10);
2166     EXPECT_EQ(axisEventInfo.GetTimeStamp().time_since_epoch().count(), time.time_since_epoch().count());
2167     EXPECT_EQ(axisEventInfo.GetPressedKeyCodes().size(), 1);
2168     EXPECT_EQ(axisEventInfo.IsStopPropagation(), true);
2169 }
2170 
2171 } // namespace OHOS::Ace::NG
2172