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