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