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 "gtest/gtest.h" 16 #include "test/unittest/core/event/event_manager_test_ng.h" 17 #include "test/mock/core/pipeline/mock_pipeline_context.h" 18 #include "test/mock/core/render/mock_render_context.h" 19 #include "test/mock/core/common/mock_window.h" 20 #include "test/mock/core/common/mock_frontend.h" 21 22 using namespace testing; 23 using namespace testing::ext; 24 namespace OHOS::Ace::NG { 25 26 class MouseEventTargetTest : public MouseEventTarget { 27 DECLARE_ACE_TYPE(MouseEventTargetTest, MouseEventTarget); 28 29 public: MouseEventTargetTest(const std::string & nodeName,int32_t nodeId,bool setStopPropagation=false,int32_t expectedResult=0)30 MouseEventTargetTest( 31 const std::string& nodeName, int32_t nodeId, bool setStopPropagation = false, int32_t expectedResult = 0) 32 : MouseEventTarget(nodeName, nodeId), expectedResult_(expectedResult) 33 { 34 SetCallback([setStopPropagation, this](MouseInfo& info) { 35 info.SetStopPropagation(setStopPropagation); 36 callbackInvokeCount_++; 37 }); 38 } 39 GetCallbackInvokeCount() const40 int32_t GetCallbackInvokeCount() const 41 { 42 return callbackInvokeCount_; 43 } 44 ResetCallbackInvokeCount()45 void ResetCallbackInvokeCount() 46 { 47 callbackInvokeCount_ = 0; 48 } 49 GetExpectedResult() const50 int32_t GetExpectedResult() const 51 { 52 return expectedResult_; 53 } 54 55 private: 56 int32_t callbackInvokeCount_ = 0; 57 int32_t expectedResult_ = 0; 58 }; 59 60 class EventManagerDispatchMouseEventNGTest : public EventManagerTestNg { 61 public: SetUpTestSuite()62 static void SetUpTestSuite() 63 { 64 EventManagerTestNg::SetUpTestSuite(); 65 } TearDownTestSuite()66 static void TearDownTestSuite() 67 { 68 EventManagerTestNg::TearDownTestSuite(); 69 } 70 }; 71 72 class APIVersionGuard final { 73 public: APIVersionGuard(int32_t apiVersion)74 explicit APIVersionGuard(int32_t apiVersion) 75 { 76 backupApiVersion_ = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 77 AceApplicationInfo::GetInstance().SetApiTargetVersion(apiVersion); 78 } 79 ~APIVersionGuard()80 ~APIVersionGuard() 81 { 82 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion_); 83 } 84 85 private: 86 int32_t backupApiVersion_ = 0; 87 }; 88 /** 89 * @tc.name: MouseEventTest001 90 * @tc.desc: Test DispatchMouseEventNG 91 * @tc.type: FUNC 92 */ 93 HWTEST_F(EventManagerTestNg, MouseEventTest001, TestSize.Level1) 94 { 95 /** 96 * @tc.steps: step1. Create EventManager. 97 * @tc.expected: eventManager is not null. 98 */ 99 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 100 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 101 auto eventManager = AceType::MakeRefPtr<EventManager>(); 102 ASSERT_NE(eventManager, nullptr); 103 104 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 105 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget); 106 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 107 __anond804352b0202(MouseInfo& info) 108 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); }; 109 mouseEventTarget->SetCallback(onMouse); 110 111 /** 112 * @tc.steps: step2. Call DispatchMouseEventNG. 113 * @tc.expected: retFlag is FALSE. 114 */ 115 MouseEvent event; 116 event.action = MouseAction::PRESS; 117 bool retFlag = eventManager->DispatchMouseEventNG(event); 118 EXPECT_FALSE(retFlag); 119 120 event.action = MouseAction::RELEASE; 121 retFlag = eventManager->DispatchMouseEventNG(event); 122 EXPECT_FALSE(retFlag); 123 124 event.action = MouseAction::MOVE; 125 retFlag = eventManager->DispatchMouseEventNG(event); 126 EXPECT_FALSE(retFlag); 127 128 event.action = MouseAction::WINDOW_ENTER; 129 retFlag = eventManager->DispatchMouseEventNG(event); 130 EXPECT_FALSE(retFlag); 131 132 event.action = MouseAction::WINDOW_LEAVE; 133 retFlag = eventManager->DispatchMouseEventNG(event); 134 EXPECT_FALSE(retFlag); 135 136 event.action = MouseAction::WINDOW_LEAVE; 137 retFlag = eventManager->DispatchMouseEventNG(event); 138 EXPECT_FALSE(retFlag); 139 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 140 } 141 142 /** 143 * @tc.name: MouseEventTest002 144 * @tc.desc: Test DispatchMouseEventNG 145 * @tc.type: FUNC 146 */ 147 HWTEST_F(EventManagerTestNg, MouseEventTest002, TestSize.Level1) 148 { 149 /** 150 * @tc.steps: step1. Create EventManager. 151 * @tc.expected: eventManager is not null. 152 */ 153 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 154 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 155 auto eventManager = AceType::MakeRefPtr<EventManager>(); 156 ASSERT_NE(eventManager, nullptr); 157 158 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 159 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget); 160 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 161 __anond804352b0302(MouseInfo& info) 162 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); }; 163 mouseEventTarget->SetCallback(onMouse); 164 165 /** 166 * @tc.steps: step2. Call DispatchMouseEventNG. 167 * @tc.expected: retFlag is TRUE. 168 */ 169 MouseEvent event; 170 event.action = MouseAction::PRESS; 171 bool retFlag = eventManager->DispatchMouseEventNG(event); 172 EXPECT_TRUE(retFlag); 173 174 event.action = MouseAction::RELEASE; 175 retFlag = eventManager->DispatchMouseEventNG(event); 176 EXPECT_TRUE(retFlag); 177 178 event.action = MouseAction::MOVE; 179 retFlag = eventManager->DispatchMouseEventNG(event); 180 EXPECT_TRUE(retFlag); 181 182 event.action = MouseAction::WINDOW_ENTER; 183 retFlag = eventManager->DispatchMouseEventNG(event); 184 EXPECT_TRUE(retFlag); 185 186 event.action = MouseAction::WINDOW_LEAVE; 187 retFlag = eventManager->DispatchMouseEventNG(event); 188 EXPECT_TRUE(retFlag); 189 190 event.action = MouseAction::WINDOW_LEAVE; 191 retFlag = eventManager->DispatchMouseEventNG(event); 192 EXPECT_TRUE(retFlag); 193 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 194 } 195 196 /** 197 * @tc.name: MouseEventTest003 198 * @tc.desc: Test DispatchMouseEventNG 199 * @tc.type: FUNC 200 */ 201 HWTEST_F(EventManagerTestNg, MouseEventTest003, TestSize.Level1) 202 { 203 /** 204 * @tc.steps: step1. Create EventManager. 205 * @tc.expected: eventManager is not null. 206 */ 207 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 208 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 209 auto eventManager = AceType::MakeRefPtr<EventManager>(); 210 ASSERT_NE(eventManager, nullptr); 211 212 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 213 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget); 214 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 215 __anond804352b0402(MouseInfo& info) 216 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); }; 217 mouseEventTarget->SetCallback(onMouse); 218 219 /** 220 * @tc.steps: step2. Call DispatchMouseEventNG. 221 * @tc.expected: retFlag is FALSE. 222 */ 223 MouseEvent event; 224 event.action = MouseAction::PRESS; 225 event.button = MouseButton::NONE_BUTTON; 226 bool retFlag = eventManager->DispatchMouseEventNG(event); 227 EXPECT_FALSE(retFlag); 228 229 event.action = MouseAction::PRESS; 230 event.button = MouseButton::NONE_BUTTON; 231 retFlag = eventManager->DispatchMouseEventNG(event); 232 EXPECT_FALSE(retFlag); 233 234 event.action = MouseAction::RELEASE; 235 event.button = MouseButton::NONE_BUTTON; 236 retFlag = eventManager->DispatchMouseEventNG(event); 237 EXPECT_FALSE(retFlag); 238 239 event.action = MouseAction::MOVE; 240 event.button = MouseButton::NONE_BUTTON; 241 retFlag = eventManager->DispatchMouseEventNG(event); 242 EXPECT_FALSE(retFlag); 243 244 event.action = MouseAction::WINDOW_ENTER; 245 event.button = MouseButton::NONE_BUTTON; 246 retFlag = eventManager->DispatchMouseEventNG(event); 247 EXPECT_FALSE(retFlag); 248 249 event.action = MouseAction::WINDOW_LEAVE; 250 event.button = MouseButton::NONE_BUTTON; 251 retFlag = eventManager->DispatchMouseEventNG(event); 252 EXPECT_FALSE(retFlag); 253 254 event.action = MouseAction::WINDOW_LEAVE; 255 event.button = MouseButton::NONE_BUTTON; 256 retFlag = eventManager->DispatchMouseEventNG(event); 257 EXPECT_FALSE(retFlag); 258 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 259 } 260 261 /** 262 * @tc.name: MouseEventTest004 263 * @tc.desc: Test DispatchMouseEventNG function 264 * @tc.type: FUNC 265 */ 266 HWTEST_F(EventManagerTestNg, MouseEventTest004, TestSize.Level1) 267 { 268 /** 269 * @tc.steps: step1. Create EventManager. 270 * @tc.expected: eventManager is not null. 271 */ 272 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 273 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 274 auto eventManager = AceType::MakeRefPtr<EventManager>(); 275 ASSERT_NE(eventManager, nullptr); 276 277 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 278 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget); 279 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 280 __anond804352b0502(MouseInfo& info) 281 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); }; 282 mouseEventTarget->SetCallback(onMouse); 283 284 /** 285 * @tc.steps: step2. Call DispatchMouseEventNG. 286 * @tc.expected: retFlag is false. 287 */ 288 MouseEvent event; 289 event.action = MouseAction::HOVER; 290 event.button = MouseButton::LEFT_BUTTON; 291 bool retFlag = eventManager->DispatchMouseEventNG(event); 292 EXPECT_FALSE(retFlag); 293 294 event.action = MouseAction::HOVER_ENTER; 295 event.button = MouseButton::RIGHT_BUTTON; 296 retFlag = eventManager->DispatchMouseEventNG(event); 297 EXPECT_FALSE(retFlag); 298 299 event.action = MouseAction::HOVER_MOVE; 300 event.button = MouseButton::MIDDLE_BUTTON; 301 retFlag = eventManager->DispatchMouseEventNG(event); 302 EXPECT_FALSE(retFlag); 303 304 event.action = MouseAction::HOVER_EXIT; 305 event.button = MouseButton::BACK_BUTTON; 306 retFlag = eventManager->DispatchMouseEventNG(event); 307 EXPECT_FALSE(retFlag); 308 309 event.action = MouseAction::PULL_DOWN; 310 event.button = MouseButton::FORWARD_BUTTON; 311 retFlag = eventManager->DispatchMouseEventNG(event); 312 EXPECT_FALSE(retFlag); 313 314 event.action = MouseAction::PULL_MOVE; 315 event.button = MouseButton::SIDE_BUTTON; 316 retFlag = eventManager->DispatchMouseEventNG(event); 317 EXPECT_FALSE(retFlag); 318 319 event.action = MouseAction::PULL_UP; 320 event.button = MouseButton::EXTRA_BUTTON; 321 retFlag = eventManager->DispatchMouseEventNG(event); 322 EXPECT_FALSE(retFlag); 323 324 event.action = MouseAction::CANCEL; 325 event.button = MouseButton::EXTRA_BUTTON; 326 retFlag = eventManager->DispatchMouseEventNG(event); 327 EXPECT_TRUE(retFlag); 328 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 329 } 330 331 /** 332 * @tc.name: MouseEventTest005 333 * @tc.desc: Test DispatchMouseEventNG function 334 * @tc.type: FUNC 335 */ 336 HWTEST_F(EventManagerTestNg, MouseEventTest005, TestSize.Level1) 337 { 338 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 339 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 340 auto eventManager = AceType::MakeRefPtr<EventManager>(); 341 ASSERT_NE(eventManager, nullptr); 342 343 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); __anond804352b0602(MouseInfo& info) 344 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); }; 345 mouseEventTarget->SetCallback(onMouse); 346 eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget); 347 auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2); __anond804352b0702(MouseInfo& info) 348 const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(false); }; 349 mouseEventTarget2->SetCallback(onMouse2); 350 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(mouseEventTarget2); 351 352 MouseEvent event; 353 event.action = MouseAction::PULL_DOWN; 354 event.button = MouseButton::FORWARD_BUTTON; 355 bool retFlag = eventManager->DispatchMouseEventNG(event); 356 EXPECT_FALSE(retFlag); 357 event.action = MouseAction::PRESS; 358 event.button = MouseButton::LEFT_BUTTON; 359 retFlag = eventManager->DispatchMouseEventNG(event); 360 EXPECT_TRUE(retFlag); 361 event.action = MouseAction::HOVER; 362 event.button = MouseButton::LEFT_BUTTON; 363 retFlag = eventManager->DispatchMouseEventNG(event); 364 EXPECT_FALSE(retFlag); 365 event.action = MouseAction::HOVER_ENTER; 366 event.button = MouseButton::RIGHT_BUTTON; 367 retFlag = eventManager->DispatchMouseEventNG(event); 368 EXPECT_FALSE(retFlag); 369 event.action = MouseAction::HOVER_MOVE; 370 event.button = MouseButton::MIDDLE_BUTTON; 371 retFlag = eventManager->DispatchMouseEventNG(event); 372 EXPECT_FALSE(retFlag); 373 event.action = MouseAction::HOVER_EXIT; 374 event.button = MouseButton::BACK_BUTTON; 375 retFlag = eventManager->DispatchMouseEventNG(event); 376 EXPECT_FALSE(retFlag); 377 event.action = MouseAction::PULL_UP; 378 event.button = MouseButton::EXTRA_BUTTON; 379 retFlag = eventManager->DispatchMouseEventNG(event); 380 EXPECT_FALSE(retFlag); 381 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 382 } 383 384 /** 385 * @tc.name: MouseEventTest006 386 * @tc.desc: Test DispatchMouseEventNG function. 387 * @tc.type: FUNC 388 */ 389 HWTEST_F(EventManagerTestNg, MouseEventTest006, TestSize.Level1) 390 { 391 /** 392 * @tc.steps: step1. Create EventManager. 393 * @tc.expected: eventManager is not null. 394 */ 395 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 396 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 397 auto eventManager = AceType::MakeRefPtr<EventManager>(); 398 ASSERT_NE(eventManager, nullptr); 399 400 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 401 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget); __anond804352b0802(MouseInfo& info) 402 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); }; 403 mouseEventTarget->SetCallback(onMouse); 404 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 405 406 /** 407 * @tc.steps: step2. Call DispatchMouseEventNG. 408 * @tc.expected: retFlag is FALSE. 409 */ 410 MouseEvent event; 411 event.action = MouseAction::MOVE; 412 event.button = MouseButton::LEFT_BUTTON; 413 bool result = eventManager->DispatchMouseEventNG(event); 414 EXPECT_FALSE(result); 415 416 event.action = MouseAction::PRESS; 417 event.button = MouseButton::LEFT_BUTTON; 418 result = eventManager->DispatchMouseEventNG(event); 419 EXPECT_FALSE(result); 420 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 421 } 422 423 /** 424 * @tc.name: MouseEventTest007 425 * @tc.desc: Test DispatchMouseEventNG function 426 * @tc.type: FUNC 427 */ 428 HWTEST_F(EventManagerTestNg, MouseEventTest007, TestSize.Level1) 429 { 430 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 431 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 432 auto eventManager = AceType::MakeRefPtr<EventManager>(); 433 ASSERT_NE(eventManager, nullptr); 434 435 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); __anond804352b0902(MouseInfo& info) 436 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); }; 437 mouseEventTarget->SetCallback(onMouse); 438 eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget); 439 auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2); __anond804352b0a02(MouseInfo& info) 440 const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(false); }; 441 mouseEventTarget2->SetCallback(onMouse2); 442 eventManager->pressMouseTestResultsMap_[{0, MouseButton::RIGHT_BUTTON}].emplace_back(mouseEventTarget2); 443 444 MouseEvent event; 445 event.action = MouseAction::RELEASE; 446 event.button = MouseButton::MIDDLE_BUTTON; 447 bool result = eventManager->DispatchMouseEventNG(event); 448 EXPECT_TRUE(result); 449 event.action = MouseAction::RELEASE; 450 event.button = MouseButton::BACK_BUTTON; 451 result = eventManager->DispatchMouseEventNG(event); 452 EXPECT_TRUE(result); 453 event.action = MouseAction::MOVE; 454 event.button = MouseButton::FORWARD_BUTTON; 455 result = eventManager->DispatchMouseEventNG(event); 456 EXPECT_TRUE(result); 457 event.action = MouseAction::WINDOW_ENTER; 458 event.button = MouseButton::SIDE_BUTTON; 459 result = eventManager->DispatchMouseEventNG(event); 460 EXPECT_TRUE(result); 461 event.action = MouseAction::WINDOW_LEAVE; 462 event.button = MouseButton::EXTRA_BUTTON; 463 result = eventManager->DispatchMouseEventNG(event); 464 EXPECT_TRUE(result); 465 event.action = MouseAction::PRESS; 466 event.button = MouseButton::LEFT_BUTTON; 467 result = eventManager->DispatchMouseEventNG(event); 468 EXPECT_TRUE(result); 469 event.action = MouseAction::RELEASE; 470 event.button = MouseButton::LEFT_BUTTON; 471 result = eventManager->DispatchMouseEventNG(event); 472 EXPECT_FALSE(result); 473 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 474 } 475 476 /** 477 * @tc.name: MouseEventTest008 478 * @tc.desc: Test DispatchMouseEventNG function 479 * @tc.type: FUNC 480 */ 481 HWTEST_F(EventManagerTestNg, MouseEventTest008, TestSize.Level1) 482 { 483 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 484 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 485 auto eventManager = AceType::MakeRefPtr<EventManager>(); 486 ASSERT_NE(eventManager, nullptr); 487 488 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); __anond804352b0b02(MouseInfo& info) 489 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(true); }; 490 mouseEventTarget->SetCallback(onMouse); 491 eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget); 492 auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2); __anond804352b0c02(MouseInfo& info) 493 const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(false); }; 494 mouseEventTarget2->SetCallback(onMouse2); 495 eventManager->pressMouseTestResultsMap_[{0, MouseButton::MIDDLE_BUTTON}].emplace_back(mouseEventTarget2); 496 497 MouseEvent event; 498 event.action = MouseAction::MOVE; 499 event.button = MouseButton::BACK_BUTTON; 500 bool result = eventManager->DispatchMouseEventNG(event); 501 EXPECT_TRUE(result); 502 event.action = MouseAction::WINDOW_ENTER; 503 event.button = MouseButton::SIDE_BUTTON; 504 result = eventManager->DispatchMouseEventNG(event); 505 EXPECT_TRUE(result); 506 event.action = MouseAction::PRESS; 507 event.button = MouseButton::LEFT_BUTTON; 508 result = eventManager->DispatchMouseEventNG(event); 509 EXPECT_TRUE(result); 510 event.action = MouseAction::RELEASE; 511 event.button = MouseButton::LEFT_BUTTON; 512 result = eventManager->DispatchMouseEventNG(event); 513 EXPECT_FALSE(result); 514 event.action = MouseAction::RELEASE; 515 event.button = MouseButton::RIGHT_BUTTON; 516 result = eventManager->DispatchMouseEventNG(event); 517 EXPECT_TRUE(result); 518 event.action = MouseAction::RELEASE; 519 event.button = MouseButton::MIDDLE_BUTTON; 520 result = eventManager->DispatchMouseEventNG(event); 521 EXPECT_TRUE(result); 522 event.action = MouseAction::RELEASE; 523 event.button = MouseButton::BACK_BUTTON; 524 result = eventManager->DispatchMouseEventNG(event); 525 EXPECT_TRUE(result); 526 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 527 } 528 529 /** 530 * @tc.name: MouseEventTest009 531 * @tc.desc: Test DispatchMouseEventNG function 532 * @tc.type: FUNC 533 */ 534 HWTEST_F(EventManagerTestNg, MouseEventTest009, TestSize.Level1) 535 { 536 /** 537 * @tc.steps: step1. Create EventManager. 538 * @tc.expected: eventManager is not null. 539 */ 540 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 541 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 542 auto eventManager = AceType::MakeRefPtr<EventManager>(); 543 ASSERT_NE(eventManager, nullptr); 544 545 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); __anond804352b0d02(MouseInfo& info) 546 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); }; 547 mouseEventTarget->SetCallback(onMouse); 548 eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget); 549 550 auto mouseEventTarget2 = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID_2); __anond804352b0e02(MouseInfo& info) 551 const OnMouseEventFunc onMouse2 = [](MouseInfo& info) { info.SetStopPropagation(true); }; 552 mouseEventTarget2->SetCallback(onMouse2); 553 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(mouseEventTarget2); 554 555 /** 556 * @tc.steps: step2. Call DispatchMouseEventNG. 557 * @tc.expected: retFlag is FALSE. 558 */ 559 MouseEvent event; 560 event.action = MouseAction::PRESS; 561 event.button = MouseButton::LEFT_BUTTON; 562 563 bool result = eventManager->DispatchMouseEventNG(event); 564 EXPECT_FALSE(result); 565 566 event.action = MouseAction::RELEASE; 567 event.button = MouseButton::LEFT_BUTTON; 568 result = eventManager->DispatchMouseEventNG(event); 569 EXPECT_FALSE(result); 570 571 event.action = MouseAction::RELEASE; 572 event.button = MouseButton::RIGHT_BUTTON; 573 result = eventManager->DispatchMouseEventNG(event); 574 EXPECT_FALSE(result); 575 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 576 } 577 578 /** 579 * @tc.name: MouseEventTest010 580 * @tc.desc: Test DispatchMouseEventNG function 581 * @tc.type: FUNC 582 */ 583 HWTEST_F(EventManagerTestNg, MouseEventTest010, TestSize.Level1) 584 { 585 /** 586 * @tc.steps: step1. Create EventManager. 587 * @tc.expected: eventManager is not null. 588 */ 589 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 590 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 591 auto eventManager = AceType::MakeRefPtr<EventManager>(); 592 ASSERT_NE(eventManager, nullptr); 593 594 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 595 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].push_back(mouseEventTarget); 596 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 597 __anond804352b0f02(MouseInfo& info) 598 const OnMouseEventFunc onMousePress = [](MouseInfo& info) -> bool { 599 info.SetStopPropagation(false); 600 return false; 601 }; __anond804352b1002(MouseInfo& info) 602 const OnMouseEventFunc onMouseRelease = [](MouseInfo& info) -> bool { return false; }; 603 mouseEventTarget->SetCallback(onMousePress); 604 605 /** 606 * @tc.steps: step2. Call DispatchMouseEventNG. 607 * @tc.expected: retFlag is FALSE. 608 */ 609 MouseEvent pressEvent; 610 pressEvent.action = MouseAction::PRESS; 611 pressEvent.button = MouseButton::LEFT_BUTTON; 612 bool result = eventManager->DispatchMouseEventNG(pressEvent); 613 EXPECT_FALSE(result); 614 615 MouseEvent releaseEvent; 616 releaseEvent.action = MouseAction::RELEASE; 617 releaseEvent.button = MouseButton::LEFT_BUTTON; 618 result = eventManager->DispatchMouseEventNG(releaseEvent); 619 EXPECT_FALSE(result); 620 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 621 } 622 623 /** 624 * @tc.name: MouseEventTest011 625 * @tc.desc: Test DispatchMouseEventNG function 626 * @tc.type: FUNC 627 */ 628 HWTEST_F(EventManagerTestNg, MouseEventTest011, TestSize.Level1) 629 { 630 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 631 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 632 auto eventManager = AceType::MakeRefPtr<EventManager>(); 633 ASSERT_NE(eventManager, nullptr); 634 635 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); __anond804352b1102(MouseInfo& info) 636 const OnMouseEventFunc onMouse = [](MouseInfo& info) { info.SetStopPropagation(false); }; 637 mouseEventTarget->SetCallback(onMouse); 638 eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget); 639 640 /** 641 * @tc.steps: step2. Call DispatchMouseEventNG. 642 * @tc.expected: retFlag is FALSE. 643 */ 644 MouseEvent event; 645 event.action = MouseAction::PRESS; 646 event.button = MouseButton::RIGHT_BUTTON; 647 648 bool result = eventManager->DispatchMouseEventNG(event); 649 EXPECT_FALSE(result); 650 651 event.action = MouseAction::RELEASE; 652 result = eventManager->DispatchMouseEventNG(event); 653 EXPECT_FALSE(result); 654 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 655 } 656 657 /** 658 * @tc.name: MouseEventTest012 659 * @tc.desc: Test DispatchMouseEventNG function 660 * @tc.type: FUNC 661 */ 662 HWTEST_F(EventManagerTestNg, MouseEventTest012, TestSize.Level1) 663 { 664 /** 665 * @tc.steps: step1. Create EventManager. 666 * @tc.expected: eventManager is not null. 667 */ 668 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 669 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 670 auto eventManager = AceType::MakeRefPtr<EventManager>(); 671 ASSERT_NE(eventManager, nullptr); 672 673 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); __anond804352b1202(MouseInfo& info) 674 const OnMouseEventFunc onMouse = [](MouseInfo& info) {}; 675 mouseEventTarget->SetCallback(onMouse); 676 eventManager->currMouseTestResultsMap_[0].emplace_back(mouseEventTarget); 677 678 /** 679 * @tc.steps: step2. Call DispatchMouseEventNG. 680 * @tc.expected: retFlag is FALSE. 681 */ 682 MouseEvent event; 683 event.action = MouseAction::MOVE; 684 event.button = MouseButton::NONE_BUTTON; 685 bool retFlag = eventManager->DispatchMouseEventNG(event); 686 EXPECT_FALSE(retFlag); 687 688 event.action = MouseAction::PRESS; 689 event.button = MouseButton::NONE_BUTTON; 690 retFlag = eventManager->DispatchMouseEventNG(event); 691 EXPECT_FALSE(retFlag); 692 693 event.action = MouseAction::PRESS; 694 event.button = MouseButton::LEFT_BUTTON; 695 retFlag = eventManager->DispatchMouseEventNG(event); 696 EXPECT_FALSE(retFlag); 697 698 event.action = MouseAction::WINDOW_ENTER; 699 event.button = MouseButton::RIGHT_BUTTON; 700 retFlag = eventManager->DispatchMouseEventNG(event); 701 EXPECT_FALSE(retFlag); 702 703 event.action = MouseAction::MOVE; 704 event.button = MouseButton::MIDDLE_BUTTON; 705 retFlag = eventManager->DispatchMouseEventNG(event); 706 EXPECT_FALSE(retFlag); 707 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 708 } 709 710 /** 711 * @tc.name: MouseEventTest013 712 * @tc.desc: Test DispatchMouseEventNG function 713 * @tc.type: FUNC 714 */ 715 HWTEST_F(EventManagerTestNg, MouseEventTest013, TestSize.Level1) 716 { 717 /** 718 * @tc.steps: step1. Create EventManager. 719 * @tc.expected: eventManager is not null. 720 */ 721 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 722 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 723 auto eventManager = AceType::MakeRefPtr<EventManager>(); 724 ASSERT_NE(eventManager, nullptr); 725 726 /** 727 * @tc.steps: step2. Call DispatchMouseEventNG. 728 * @tc.expected: retFlag is FALSE. 729 */ 730 MouseEvent event; 731 event.action = MouseAction::NONE; 732 event.button = MouseButton::NONE_BUTTON; 733 bool retFlag = eventManager->DispatchMouseEventNG(event); 734 EXPECT_FALSE(retFlag); 735 736 event.action = MouseAction::PRESS; 737 event.button = MouseButton::LEFT_BUTTON; 738 retFlag = eventManager->DispatchMouseEventNG(event); 739 EXPECT_FALSE(retFlag); 740 741 event.action = MouseAction::RELEASE; 742 event.button = MouseButton::RIGHT_BUTTON; 743 retFlag = eventManager->DispatchMouseEventNG(event); 744 EXPECT_FALSE(retFlag); 745 746 event.action = MouseAction::MOVE; 747 event.button = MouseButton::MIDDLE_BUTTON; 748 retFlag = eventManager->DispatchMouseEventNG(event); 749 EXPECT_FALSE(retFlag); 750 751 event.action = MouseAction::WINDOW_ENTER; 752 event.button = MouseButton::BACK_BUTTON; 753 retFlag = eventManager->DispatchMouseEventNG(event); 754 EXPECT_FALSE(retFlag); 755 756 event.action = MouseAction::WINDOW_LEAVE; 757 event.button = MouseButton::FORWARD_BUTTON; 758 retFlag = eventManager->DispatchMouseEventNG(event); 759 EXPECT_FALSE(retFlag); 760 761 event.action = MouseAction::PRESS; 762 event.button = MouseButton::SIDE_BUTTON; 763 retFlag = eventManager->DispatchMouseEventNG(event); 764 EXPECT_FALSE(retFlag); 765 766 event.action = MouseAction::RELEASE; 767 event.button = MouseButton::EXTRA_BUTTON; 768 retFlag = eventManager->DispatchMouseEventNG(event); 769 EXPECT_FALSE(retFlag); 770 771 event.action = MouseAction::MOVE; 772 event.button = MouseButton::TASK_BUTTON; 773 retFlag = eventManager->DispatchMouseEventNG(event); 774 EXPECT_FALSE(retFlag); 775 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 776 } 777 778 /** 779 * @tc.name: DispatchAxisEventIssueTest1 780 * @tc.desc: Test DispatchAxisEventNG, axisTestResultsMap_[event.id] is deleted each time it is dispatched. 781 * @tc.type: FUNC 782 */ 783 HWTEST_F(EventManagerTestNg, DispatchAxisEventIssueTest1, TestSize.Level1) 784 { 785 /** 786 * @tc.steps: step1. Create EventManager. 787 * @tc.expected: eventManager is not null. 788 */ 789 auto eventManager = AceType::MakeRefPtr<EventManager>(); 790 ASSERT_NE(eventManager, nullptr); 791 792 /** 793 * @tc.steps: step4. Call DispatchAxisEventNG with axisTestResultsMap_[event.id] not empty 794 * @tc.expected: eventManager->axisTestResultsMap_[event.id] is empty 795 */ 796 auto axisEventTarget = AceType::MakeRefPtr<AxisEventTarget>(); __anond804352b1302(AxisInfo&) 797 auto onAxisCallback = [](AxisInfo&) -> void {}; 798 axisEventTarget->SetOnAxisCallback(onAxisCallback); 799 AxisEvent event; 800 event.horizontalAxis = 0; 801 event.verticalAxis = 0; 802 event.pinchAxisScale = 0; 803 eventManager->axisTestResultsMap_[event.id].push_back(axisEventTarget); 804 eventManager->DispatchAxisEventNG(event); 805 EXPECT_TRUE(eventManager->axisTestResultsMap_[event.id].empty()); 806 } 807 808 /** 809 * @tc.name: MouseLocationTest001 810 * @tc.desc: Test HandleMouseEvent in less than API 14, the x、y location use coordinateOffset_. 811 * @tc.type: FUNC 812 */ 813 HWTEST_F(EventManagerTestNg, MouseLocationTest001, TestSize.Level1) 814 { 815 /** 816 * @tc.steps: step1. Create EventManager and set mouse event target callback. 817 * @tc.expected: eventManager is not null. 818 */ 819 auto eventManager = AceType::MakeRefPtr<EventManager>(); 820 ASSERT_NE(eventManager, nullptr); 821 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 822 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 823 mouseEventTarget->coordinateOffset_ = Offset(-100, 0); 824 MouseInfo mouseInfo; __anond804352b1402(MouseInfo& info) 825 const OnMouseEventFunc onMouse = [&mouseInfo](MouseInfo& info) { mouseInfo = info; }; 826 mouseEventTarget->SetCallback(onMouse); 827 828 /** 829 * @tc.steps: step2. Call DispatchMouseEventNG. 830 * @tc.expected: the mouse local location value is right. 831 */ 832 MouseEvent event; 833 event.x = 200.0f; 834 event.y = 200.0f; 835 event.action = MouseAction::PRESS; 836 eventManager->DispatchMouseEventNG(event); 837 EXPECT_EQ(mouseInfo.GetLocalLocation().GetX(), 200.0f); 838 EXPECT_EQ(mouseInfo.GetLocalLocation().GetY(), 200.0f); 839 } 840 841 /** 842 * @tc.name: MouseLocationTest002 843 * @tc.desc: Test HandleMouseEvent in great or equal API 14, the x、y location use Transform. 844 * @tc.type: FUNC 845 */ 846 HWTEST_F(EventManagerTestNg, MouseLocationTest002, TestSize.Level1) 847 { 848 /** 849 * @tc.steps: step1. create FrameNode. 850 */ 851 RefPtr<FrameNode> FRAME_NODE_0 = FrameNode::CreateFrameNode("0", 0, AceType::MakeRefPtr<Pattern>()); 852 RefPtr<FrameNode> FRAME_NODE_1 = FrameNode::CreateFrameNode("1", 1, AceType::MakeRefPtr<Pattern>()); 853 RefPtr<FrameNode> FRAME_NODE_2 = FrameNode::CreateFrameNode("2", 2, AceType::MakeRefPtr<Pattern>()); 854 FRAME_NODE_2->SetParent(WeakPtr<FrameNode>(FRAME_NODE_1)); 855 FRAME_NODE_1->SetParent(WeakPtr<FrameNode>(FRAME_NODE_0)); 856 857 /** 858 * @tc.steps: step2. mock local matrix. 859 */ 860 FRAME_NODE_0->localMat_ = Matrix4::CreateIdentity(); 861 FRAME_NODE_1->localMat_ = Matrix4::CreateIdentity(); 862 FRAME_NODE_2->localMat_ = Matrix4::Invert(Matrix4::CreateTranslate(400, 0, 0)); 863 864 /** 865 * @tc.steps: step3. Create EventManager, and set mouse event target callback. 866 * @tc.expected: eventManager is not null. 867 */ 868 int32_t backupApiVersion = AceApplicationInfo::GetInstance().GetApiTargetVersion(); 869 AceApplicationInfo::GetInstance().SetApiTargetVersion(static_cast<int32_t>(PlatformVersion::VERSION_TWENTY)); 870 auto eventManager = AceType::MakeRefPtr<EventManager>(); 871 ASSERT_NE(eventManager, nullptr); 872 873 auto mouseEventTarget = AceType::MakeRefPtr<MouseEventTarget>(MOUSE, NODEID); 874 eventManager->currMouseTestResultsMap_[0].push_back(mouseEventTarget); 875 mouseEventTarget->coordinateOffset_ = Offset(-100, 0); 876 mouseEventTarget->AttachFrameNode(FRAME_NODE_2); 877 MouseInfo mouseInfo; __anond804352b1502(MouseInfo& info) 878 const OnMouseEventFunc onMouse = [&mouseInfo](MouseInfo& info) { mouseInfo = info; }; 879 mouseEventTarget->SetCallback(onMouse); 880 881 /** 882 * @tc.steps: step4. Call DispatchMouseEventNG. 883 * @tc.expected: the mouse local location value is right. 884 */ 885 MouseEvent event; 886 event.x = 200.0f; 887 event.y = 200.0f; 888 event.action = MouseAction::PRESS; 889 eventManager->DispatchMouseEventNG(event); 890 EXPECT_EQ(mouseInfo.GetLocalLocation().GetX(), -200.0f); 891 EXPECT_EQ(mouseInfo.GetLocalLocation().GetY(), 200.0f); 892 AceApplicationInfo::GetInstance().SetApiTargetVersion(backupApiVersion); 893 } 894 895 /** 896 * @tc.name: EventManagerDispatchMouseEventNGTest001 897 * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget no-intersect, test mouse event dispatch. 898 * @tc.type: FUNC 899 */ 900 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest001, TestSize.Level1) 901 { 902 /** 903 * @tc.steps: step1. Create EventManager. 904 * @tc.expected: eventManager is not null. 905 */ 906 auto eventManager = AceType::MakeRefPtr<EventManager>(); 907 ASSERT_NE(eventManager, nullptr); 908 909 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 910 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, true, 4), // stop event propagation. 911 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 0), // not stop event propagation. 912 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4), // stop event propagation. 913 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 0), // not stop event propagation. 914 }; 915 916 /** 917 * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 918 * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] non-intersect. 919 */ 920 eventManager->pressMouseTestResults_.emplace_back(testCases[0]); 921 eventManager->pressMouseTestResults_.emplace_back(testCases[1]); 922 923 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 924 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 925 926 const std::vector<MockMouseEvent> mockMouseEvents = { 927 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true }, 928 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true }, 929 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true }, 930 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, true }, 931 }; 932 933 /** 934 * @tc.steps: step3. Inject mock mouseEvent 935 * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result. 936 */ 937 for (auto mockMouseEvent : mockMouseEvents) { 938 MouseEvent event; 939 event.action = mockMouseEvent.action; 940 event.button = mockMouseEvent.button; 941 auto result = eventManager->DispatchMouseEventNG(event); 942 EXPECT_EQ(result, mockMouseEvent.expectedResult); 943 } 944 945 /** 946 * @tc.expected: index == 1 and index == 3 can not be invoked. other can be invoked. 947 */ 948 for (auto i = 0; i < testCases.size(); i++) { 949 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 950 } 951 } 952 953 /** 954 * @tc.name: EventManagerDispatchMouseEventNGTest002 955 * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget no-intersect, test 956 * mouse event dispatch. 957 * @tc.type: FUNC 958 */ 959 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest002, TestSize.Level1) 960 { 961 /** 962 * @tc.steps: step1. Set API level 13. 963 * @tc.expected: current API level equal to 13. 964 */ 965 APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 966 ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN), 967 AceApplicationInfo::GetInstance().GetApiTargetVersion()); 968 969 /** 970 * @tc.steps: step2. Create EventManager. 971 * @tc.expected: eventManager is not null. 972 */ 973 auto eventManager = AceType::MakeRefPtr<EventManager>(); 974 ASSERT_NE(eventManager, nullptr); 975 976 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 977 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, true, 4), // stop event propagation. 978 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 0), // not stop event propagation. 979 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4), // stop event propagation. 980 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 0), // not stop event propagation. 981 }; 982 983 /** 984 * @tc.steps: step3. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 985 * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] non-intersect. 986 */ 987 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]); 988 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]); 989 990 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 991 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 992 993 const std::vector<MockMouseEvent> mockMouseEvents = { 994 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true }, 995 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true }, 996 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, true }, 997 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, true }, 998 }; 999 1000 /** 1001 * @tc.steps: step4. Inject mock mouseEvent 1002 * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result. 1003 */ 1004 for (auto mockMouseEvent : mockMouseEvents) { 1005 MouseEvent event; 1006 event.action = mockMouseEvent.action; 1007 event.button = mockMouseEvent.button; 1008 auto result = eventManager->DispatchMouseEventNG(event); 1009 EXPECT_EQ(result, mockMouseEvent.expectedResult); 1010 } 1011 1012 /** 1013 * @tc.expected: index == 0 and index == 3 can not be invoked. other can be invoked. 1014 */ 1015 for (auto i = 0; i < testCases.size(); i++) { 1016 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 1017 } 1018 } 1019 1020 /** 1021 * @tc.name: EventManagerDispatchMouseEventNGTest003 1022 * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget intersect, none one stop propagation, test mouse event 1023 * dispatch. expect every one will receive mouse event. 1024 * @tc.type: FUNC 1025 */ 1026 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest003, TestSize.Level1) 1027 { 1028 /** 1029 * @tc.steps: step1. Create EventManager. 1030 * @tc.expected: eventManager is not null. 1031 */ 1032 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1033 ASSERT_NE(eventManager, nullptr); 1034 1035 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1036 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), // not stop event propagation. 1037 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4), // not stop event propagation. 1038 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 4), // not stop event propagation. 1039 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4), // not stop event propagation. 1040 AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), // not stop event propagation. 1041 }; 1042 1043 /** 1044 * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 1045 * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] intersect. 1046 */ 1047 eventManager->pressMouseTestResults_.emplace_back(testCases[0]); 1048 eventManager->pressMouseTestResults_.emplace_back(testCases[1]); 1049 eventManager->pressMouseTestResults_.emplace_back(testCases[2]); 1050 eventManager->pressMouseTestResults_.emplace_back(testCases[3]); 1051 1052 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1053 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1054 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 1055 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]); 1056 1057 const std::vector<MockMouseEvent> mockMouseEvents = { 1058 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1059 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1060 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1061 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false }, 1062 }; 1063 1064 /** 1065 * @tc.steps: step3. Inject mock mouseEvent. 1066 */ 1067 for (auto mockMouseEvent : mockMouseEvents) { 1068 MouseEvent event; 1069 event.action = mockMouseEvent.action; 1070 event.button = mockMouseEvent.button; 1071 auto result = eventManager->DispatchMouseEventNG(event); 1072 EXPECT_EQ(result, mockMouseEvent.expectedResult); 1073 } 1074 1075 /** 1076 * @tc.expected: In this case, every mouse targer will receive four mouse events. 1077 */ 1078 for (auto i = 0; i < testCases.size(); i++) { 1079 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 1080 } 1081 } 1082 1083 /** 1084 * @tc.name: EventManagerDispatchMouseEventNGTest004 1085 * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget intersect, none one 1086 * stop propagation, test mouse event dispatch. expect every one will receive mouse event. 1087 * @tc.type: FUNC 1088 */ 1089 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest004, TestSize.Level1) 1090 { 1091 /** 1092 * @tc.steps: step1. Set API level 13. 1093 * @tc.expected: current API level equal to 13. 1094 */ 1095 APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 1096 ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN), 1097 AceApplicationInfo::GetInstance().GetApiTargetVersion()); 1098 /** 1099 * @tc.steps: step2. Create EventManager. 1100 * @tc.expected: eventManager is not null. 1101 */ 1102 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1103 ASSERT_NE(eventManager, nullptr); 1104 1105 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1106 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), // not stop event propagation. 1107 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4), // not stop event propagation. 1108 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 4), // not stop event propagation. 1109 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4), // not stop event propagation. 1110 AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), // not stop event propagation. 1111 }; 1112 1113 /** 1114 * @tc.steps: step3. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 1115 * @tc.expected: pressMouseTestResults_ and currMouseTestResultsMap_[0] intersect. 1116 */ 1117 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]); 1118 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]); 1119 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[2]); 1120 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[3]); 1121 1122 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1123 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1124 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 1125 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]); 1126 1127 const std::vector<MockMouseEvent> mockMouseEvents = { 1128 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1129 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1130 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1131 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false }, 1132 }; 1133 1134 /** 1135 * @tc.steps: step4. Inject mock mouseEvent. 1136 */ 1137 for (auto mockMouseEvent : mockMouseEvents) { 1138 MouseEvent event; 1139 event.action = mockMouseEvent.action; 1140 event.button = mockMouseEvent.button; 1141 auto result = eventManager->DispatchMouseEventNG(event); 1142 EXPECT_EQ(result, mockMouseEvent.expectedResult); 1143 } 1144 1145 /** 1146 * @tc.expected: In this case, every mouse targer will receive four mouse events. 1147 */ 1148 for (auto i = 0; i < testCases.size(); i++) { 1149 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 1150 } 1151 } 1152 1153 /** 1154 * @tc.name: EventManagerDispatchMouseEventNGTest005 1155 * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed MouseTestTarget stop propagation 1156 * test mouse event dispatch. 1157 * @tc.type: FUNC 1158 */ 1159 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest005, TestSize.Level1) 1160 { 1161 /** 1162 * @tc.steps: step1. Create EventManager. 1163 * @tc.expected: eventManager is not null. 1164 */ 1165 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1166 ASSERT_NE(eventManager, nullptr); 1167 1168 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1169 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), 1170 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4), 1171 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4), 1172 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, true, 0), 1173 AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), 1174 }; 1175 1176 /** 1177 * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 1178 * @tc.expected: pressMouseTestResults_ == currMouseTestResultsMap_[0]. 1179 */ 1180 eventManager->pressMouseTestResults_.emplace_back(testCases[0]); 1181 eventManager->pressMouseTestResults_.emplace_back(testCases[1]); 1182 eventManager->pressMouseTestResults_.emplace_back(testCases[2]); 1183 eventManager->pressMouseTestResults_.emplace_back(testCases[3]); 1184 1185 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1186 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1187 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 1188 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]); 1189 1190 const std::vector<MockMouseEvent> mockMouseEvents = { 1191 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1192 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1193 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1194 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false }, 1195 }; 1196 1197 /** 1198 * @tc.steps: step3. Inject mouseEvent 1199 * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result 1200 */ 1201 for (auto i = 0; i < mockMouseEvents.size(); i++) { 1202 MouseEvent event; 1203 event.action = mockMouseEvents[i].action; 1204 event.button = mockMouseEvents[i].button; 1205 auto result = eventManager->DispatchMouseEventNG(event); 1206 EXPECT_EQ(result, mockMouseEvents[i].expectedResult) << i; 1207 } 1208 1209 /** 1210 * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event. 1211 */ 1212 for (auto i = 0; i < testCases.size(); i++) { 1213 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 1214 } 1215 } 1216 1217 /** 1218 * @tc.name: EventManagerDispatchMouseEventNGTest006 1219 * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed 1220 * MouseTestTarget stop propagation test mouse event dispatch. 1221 * @tc.type: FUNC 1222 */ 1223 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest006, TestSize.Level1) 1224 { 1225 /** 1226 * @tc.steps: step1. Set API level 13. 1227 * @tc.expected: current API level equal to 13. 1228 */ 1229 APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 1230 ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN), 1231 AceApplicationInfo::GetInstance().GetApiTargetVersion()); 1232 1233 /** 1234 * @tc.steps: step2. Create EventManager. 1235 * @tc.expected: eventManager is not null. 1236 */ 1237 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1238 ASSERT_NE(eventManager, nullptr); 1239 1240 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1241 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), 1242 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false, 4), 1243 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true, 4), 1244 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, true, 0), 1245 AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), 1246 }; 1247 1248 /** 1249 * @tc.steps: step3. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 1250 * @tc.expected: pressMouseTestResults_ == currMouseTestResultsMap_[0]. 1251 */ 1252 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]); 1253 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]); 1254 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[2]); 1255 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[3]); 1256 1257 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1258 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1259 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 1260 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]); 1261 1262 const std::vector<MockMouseEvent> mockMouseEvents = { 1263 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1264 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1265 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1266 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false }, 1267 }; 1268 1269 /** 1270 * @tc.steps: step3. Inject mouseEvent 1271 * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result 1272 */ 1273 for (auto i = 0; i < mockMouseEvents.size(); i++) { 1274 MouseEvent event; 1275 event.action = mockMouseEvents[i].action; 1276 event.button = mockMouseEvents[i].button; 1277 auto result = eventManager->DispatchMouseEventNG(event); 1278 EXPECT_EQ(result, mockMouseEvents[i].expectedResult) << i; 1279 } 1280 1281 /** 1282 * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event. 1283 */ 1284 for (auto i = 0; i < testCases.size(); i++) { 1285 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 1286 } 1287 } 1288 1289 /** 1290 * @tc.name: EventManagerDispatchMouseEventNGTest007 1291 * @tc.desc: Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed MouseTestTarget stop propagation 1292 * will case which one in pressed MouseTestTarget can not be invoked. 1293 * @tc.type: FUNC 1294 */ 1295 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest007, TestSize.Level1) 1296 { 1297 /** 1298 * @tc.steps: step1. Create EventManager. 1299 * @tc.expected: eventManager is not null. 1300 */ 1301 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1302 ASSERT_NE(eventManager, nullptr); 1303 1304 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1305 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), 1306 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, true, 4), 1307 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 0), 1308 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4), 1309 AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), 1310 }; 1311 1312 /** 1313 * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 1314 * @tc.expected: pressMouseTestResults_ == currMouseTestResultsMap_[0]. 1315 */ 1316 eventManager->pressMouseTestResults_.emplace_back(testCases[0]); 1317 eventManager->pressMouseTestResults_.emplace_back(testCases[1]); 1318 eventManager->pressMouseTestResults_.emplace_back(testCases[2]); 1319 1320 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]); 1321 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1322 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1323 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 1324 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]); 1325 1326 const std::vector<MockMouseEvent> mockMouseEvents = { 1327 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1328 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1329 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1330 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false }, 1331 }; 1332 1333 /** 1334 * @tc.steps: step3. Inject mouseEvent 1335 * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result 1336 */ 1337 for (auto mockMouseEvent : mockMouseEvents) { 1338 MouseEvent event; 1339 event.action = mockMouseEvent.action; 1340 event.button = mockMouseEvent.button; 1341 auto result = eventManager->DispatchMouseEventNG(event); 1342 EXPECT_EQ(result, mockMouseEvent.expectedResult); 1343 } 1344 1345 /** 1346 * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event. 1347 */ 1348 for (auto i = 0; i < testCases.size(); i++) { 1349 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 1350 } 1351 } 1352 1353 /** 1354 * @tc.name: EventManagerDispatchMouseEventNGTest008 1355 * @tc.desc: API level greater or equal to 13, Pressed MouseTestTarget and Current MouseTestTarget intersect, Pressed 1356 * MouseTestTarget stop propagation will case which one in pressed MouseTestTarget can not be invoked. 1357 * @tc.type: FUNC 1358 */ 1359 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest008, TestSize.Level1) 1360 { 1361 /** 1362 * @tc.steps: step1. Set API level 13. 1363 * @tc.expected: current API level equal to 13. 1364 */ 1365 APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 1366 ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN), 1367 AceApplicationInfo::GetInstance().GetApiTargetVersion()); 1368 1369 /** 1370 * @tc.steps: step1. Create EventManager. 1371 * @tc.expected: eventManager is not null. 1372 */ 1373 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1374 ASSERT_NE(eventManager, nullptr); 1375 1376 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1377 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false, 4), 1378 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, true, 4), 1379 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false, 0), 1380 AceType::MakeRefPtr<MouseEventTargetTest>("3", 3, false, 4), 1381 AceType::MakeRefPtr<MouseEventTargetTest>("4", 4, false, 4), 1382 }; 1383 1384 /** 1385 * @tc.steps: step2. set pressMouseTestResults_ and currMouseTestResultsMap_[0]. 1386 * @tc.expected: pressMouseTestResults_ == currMouseTestResultsMap_[0]. 1387 */ 1388 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[0]); 1389 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[1]); 1390 eventManager->pressMouseTestResultsMap_[{0, MouseButton::LEFT_BUTTON}].emplace_back(testCases[2]); 1391 1392 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]); 1393 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1394 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1395 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[3]); 1396 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[4]); 1397 1398 const std::vector<MockMouseEvent> mockMouseEvents = { 1399 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1400 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1401 { MouseAction::MOVE, MouseButton::LEFT_BUTTON, false }, 1402 { MouseAction::RELEASE, MouseButton::LEFT_BUTTON, false }, 1403 }; 1404 1405 /** 1406 * @tc.steps: step3. Inject mouseEvent 1407 * @tc.expected: pressMouseTestResults stop propagation no work for DispatchMouseEventNG result 1408 */ 1409 for (auto mockMouseEvent : mockMouseEvents) { 1410 MouseEvent event; 1411 event.action = mockMouseEvent.action; 1412 event.button = mockMouseEvent.button; 1413 auto result = eventManager->DispatchMouseEventNG(event); 1414 EXPECT_EQ(result, mockMouseEvent.expectedResult); 1415 } 1416 1417 /** 1418 * @tc.expected: In this case, except index == 0 can receive mouse event. other targets can not receive event. 1419 */ 1420 for (auto i = 0; i < testCases.size(); i++) { 1421 EXPECT_EQ(testCases[i]->GetCallbackInvokeCount(), testCases[i]->GetExpectedResult()) << i; 1422 } 1423 } 1424 1425 /** 1426 * @tc.name: EventManagerDispatchMouseEventNGTest009 1427 * @tc.desc: API level less than 13, only MouseButton::LEFT_BUTTON mouse event can dispatch to pressedTestResult. 1428 * @tc.type: FUNC 1429 */ 1430 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest009, TestSize.Level1) 1431 { 1432 /** 1433 * @tc.steps: step1. Set API level 12. 1434 * @tc.expected: current API level equal to 12. 1435 */ 1436 APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_TWELVE)); 1437 ASSERT_EQ( 1438 static_cast<int32_t>(PlatformVersion::VERSION_TWELVE), AceApplicationInfo::GetInstance().GetApiTargetVersion()); 1439 1440 const std::vector<MockMouseEvent> mockMouseEvents = { 1441 { MouseAction::PRESS, MouseButton::NONE_BUTTON, false }, 1442 { MouseAction::PRESS, MouseButton::LEFT_BUTTON, true }, 1443 { MouseAction::PRESS, MouseButton::RIGHT_BUTTON, false }, 1444 { MouseAction::PRESS, MouseButton::MIDDLE_BUTTON, false }, 1445 { MouseAction::PRESS, MouseButton::BACK_BUTTON, false }, 1446 { MouseAction::PRESS, MouseButton::FORWARD_BUTTON, false }, 1447 { MouseAction::PRESS, MouseButton::SIDE_BUTTON, false }, 1448 { MouseAction::PRESS, MouseButton::EXTRA_BUTTON, false }, 1449 { MouseAction::PRESS, MouseButton::TASK_BUTTON, false }, 1450 }; 1451 1452 /** 1453 * @tc.steps: step2. Inject mock mouse event contains MouseButton and MouseAction == MouseAction::PRESS. 1454 * @tc.expected: currMouseTestResultsMap_[0] equals to pressMouseTestResults_. 1455 */ 1456 for (auto mockMouseEvent : mockMouseEvents) { 1457 MouseEvent event; 1458 event.action = mockMouseEvent.action; 1459 event.button = mockMouseEvent.button; 1460 1461 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1462 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false), 1463 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false), 1464 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false), 1465 }; 1466 1467 /** 1468 * @tc.steps: step3. Create EventManager. 1469 * @tc.expected: eventManager is not null. 1470 */ 1471 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1472 ASSERT_NE(eventManager, nullptr); 1473 1474 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]); 1475 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1476 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1477 1478 eventManager->DispatchMouseEventNG(event); 1479 EXPECT_EQ( 1480 eventManager->pressMouseTestResults_ == eventManager->currMouseTestResultsMap_[0], mockMouseEvent.expectedResult); 1481 } 1482 } 1483 1484 /** 1485 * @tc.name: EventManagerDispatchMouseEventNGTest010 1486 * @tc.desc: API level greater and equal to 13, all kinds of MouseButton event can dispatch to pressedTestResult. 1487 * @tc.type: FUNC 1488 */ 1489 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest010, TestSize.Level1) 1490 { 1491 /** 1492 * @tc.steps: step1. Set API level 13. 1493 * @tc.expected: current API level equal to 13. 1494 */ 1495 APIVersionGuard aPIVersionGuard(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN)); 1496 ASSERT_EQ(static_cast<int32_t>(PlatformVersion::VERSION_THIRTEEN), 1497 AceApplicationInfo::GetInstance().GetApiTargetVersion()); 1498 1499 const std::vector<MockMouseEvent> mockMouseEvents = { 1500 { MouseAction::PRESS, MouseButton::NONE_BUTTON, false }, 1501 { MouseAction::PRESS, MouseButton::LEFT_BUTTON, true }, 1502 { MouseAction::PRESS, MouseButton::RIGHT_BUTTON, true }, 1503 { MouseAction::PRESS, MouseButton::MIDDLE_BUTTON, true }, 1504 { MouseAction::PRESS, MouseButton::BACK_BUTTON, true }, 1505 { MouseAction::PRESS, MouseButton::FORWARD_BUTTON, true }, 1506 { MouseAction::PRESS, MouseButton::SIDE_BUTTON, true }, 1507 { MouseAction::PRESS, MouseButton::EXTRA_BUTTON, true }, 1508 { MouseAction::PRESS, MouseButton::TASK_BUTTON, true }, 1509 }; 1510 1511 /** 1512 * @tc.steps: step2. Inject mock mouse event contains MouseButton and MouseAction == MouseAction::PRESS. 1513 * @tc.expected: currMouseTestResultsMap_[0] equals to pressMouseTestResultsMap_[button] 1514 */ 1515 for (auto mockMouseEvent : mockMouseEvents) { 1516 MouseEvent event; 1517 event.action = mockMouseEvent.action; 1518 event.button = mockMouseEvent.button; 1519 1520 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1521 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, false), 1522 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, false), 1523 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, false), 1524 }; 1525 1526 /** 1527 * @tc.steps: step3. Create EventManager. 1528 * @tc.expected: eventManager is not null. 1529 */ 1530 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1531 ASSERT_NE(eventManager, nullptr); 1532 1533 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]); 1534 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1535 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1536 1537 eventManager->DispatchMouseEventNG(event); 1538 PressMouseInfo key { 0, event.button }; 1539 EXPECT_EQ(eventManager->pressMouseTestResultsMap_[key] == eventManager->currMouseTestResultsMap_[0], 1540 mockMouseEvent.expectedResult); 1541 } 1542 } 1543 1544 /** 1545 * @tc.name: EventManagerDispatchMouseEventNGTest011 1546 * @tc.desc: DispatchMouseEventNG only work for five kinds(press/release/move/window_enter/window_leave) mouse action. 1547 * @tc.type: FUNC 1548 */ 1549 HWTEST_F(EventManagerDispatchMouseEventNGTest, EventManagerDispatchMouseEventNGTest011, TestSize.Level1) 1550 { 1551 /** 1552 * @tc.steps: step1. Create mock mouse event with all kind of MouseAction. 1553 */ 1554 const std::vector<MockMouseEvent> mockMouseEvents = { 1555 { MouseAction::NONE, MouseButton::NONE_BUTTON, false }, 1556 { MouseAction::PRESS, MouseButton::LEFT_BUTTON, true }, 1557 { MouseAction::RELEASE, MouseButton::RIGHT_BUTTON, true }, 1558 { MouseAction::MOVE, MouseButton::MIDDLE_BUTTON, true }, 1559 { MouseAction::WINDOW_ENTER, MouseButton::BACK_BUTTON, true }, 1560 { MouseAction::WINDOW_LEAVE, MouseButton::FORWARD_BUTTON, true }, 1561 { MouseAction::HOVER, MouseButton::SIDE_BUTTON, false }, 1562 { MouseAction::HOVER_ENTER, MouseButton::EXTRA_BUTTON, false }, 1563 { MouseAction::HOVER_MOVE, MouseButton::TASK_BUTTON, false }, 1564 { MouseAction::HOVER_EXIT, MouseButton::NONE_BUTTON, false }, 1565 { MouseAction::PULL_DOWN, MouseButton::LEFT_BUTTON, false }, 1566 { MouseAction::PULL_MOVE, MouseButton::RIGHT_BUTTON, false }, 1567 { MouseAction::PULL_UP, MouseButton::MIDDLE_BUTTON, false }, 1568 { MouseAction::CANCEL, MouseButton::BACK_BUTTON, true }, 1569 }; 1570 1571 /** 1572 * @tc.steps: step2. traversal all kinds of MouseAction,inject mock mouse event into EventManager. 1573 * @tc.expected: result of invoke DispatchMouseEventNG equal to expected result. 1574 */ 1575 for (auto mockMouseEvent : mockMouseEvents) { 1576 MouseEvent event; 1577 event.action = mockMouseEvent.action; 1578 event.button = mockMouseEvent.button; 1579 1580 std::vector<RefPtr<MouseEventTargetTest>> testCases = { 1581 AceType::MakeRefPtr<MouseEventTargetTest>("0", 0, true), 1582 AceType::MakeRefPtr<MouseEventTargetTest>("1", 1, true), 1583 AceType::MakeRefPtr<MouseEventTargetTest>("2", 2, true), 1584 }; 1585 1586 /** 1587 * @tc.steps: step3. Create eventManager. 1588 * @tc.expected: eventManager not equal to nullptr. 1589 */ 1590 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1591 ASSERT_NE(eventManager, nullptr); 1592 1593 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[0]); 1594 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[1]); 1595 eventManager->currMouseTestResultsMap_[0].emplace_back(testCases[2]); 1596 1597 auto result = eventManager->DispatchMouseEventNG(event); 1598 EXPECT_EQ(result, mockMouseEvent.expectedResult) << static_cast<int32_t>(event.action); 1599 } 1600 } 1601 1602 /** 1603 * @tc.name: GetOrRefreshMatrixFromCache 1604 * @tc.desc: Test GetOrRefreshMatrixFromCache func 1605 * @tc.type: FUNC 1606 */ 1607 HWTEST_F(EventManagerDispatchMouseEventNGTest, GetOrRefreshMatrixFromCacheNGTest001, TestSize.Level1) 1608 { 1609 /** 1610 * @tc.steps: step1. create 1611 * @tc.expected: expect The function return value is true when width or height is nearZero. 1612 */ 1613 MockPipelineContext::SetUp(); 1614 RefPtr<FrameNode> node = FrameNode::CreateFrameNode("0", 0, AceType::MakeRefPtr<Pattern>()); 1615 ASSERT_NE(node, nullptr); 1616 auto mockRenderContext = AceType::MakeRefPtr<MockRenderContext>(); 1617 ASSERT_NE(mockRenderContext, nullptr); 1618 auto pipeline = NG::PipelineContext::GetCurrentContext(); 1619 ASSERT_NE(pipeline, nullptr); 1620 node->renderContext_ = mockRenderContext; 1621 node->context_ = AceType::RawPtr(pipeline); 1622 1623 node->cacheMatrixInfo_ = CacheMatrixInfo(); 1624 mockRenderContext->paintRect_ = RectF(0, 0, 10, 0); 1625 CacheMatrixInfo cacheMatrixInfo = node->GetOrRefreshMatrixFromCache(); 1626 EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 0); 1627 1628 node->isTransformNotChanged_ = false; 1629 mockRenderContext->rect_ = RectF(0, 0, 10, 0); 1630 mockRenderContext->paintRect_ = RectF(0, 0, 10, 0); 1631 cacheMatrixInfo = node->GetOrRefreshMatrixFromCache(); 1632 EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 10); 1633 EXPECT_EQ(node->isTransformNotChanged_, true); 1634 1635 node->isTransformNotChanged_ = false; 1636 cacheMatrixInfo = node->GetOrRefreshMatrixFromCache(true); 1637 EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 10); 1638 EXPECT_EQ(node->isTransformNotChanged_, true); 1639 1640 node->cacheMatrixInfo_ = CacheMatrixInfo(); 1641 node->isTransformNotChanged_ = false; 1642 cacheMatrixInfo = node->GetOrRefreshMatrixFromCache(); 1643 EXPECT_EQ(cacheMatrixInfo.paintRectWithTransform.Width(), 10); 1644 EXPECT_EQ(node->isTransformNotChanged_, true); 1645 MockPipelineContext::TearDown(); 1646 } 1647 1648 /** 1649 * @tc.name: DispatchTouchEventAndCheck 1650 * @tc.desc: Test DispatchTouchEventAndCheck func 1651 * @tc.type: FUNC 1652 */ 1653 HWTEST_F(EventManagerDispatchMouseEventNGTest, DispatchTouchEventAndCheckTest001, TestSize.Level1) 1654 { 1655 /** 1656 * @tc.steps: step1. Create EventManager. 1657 * @tc.expected: eventManager is not null. 1658 */ 1659 auto eventManager = AceType::MakeRefPtr<EventManager>(); 1660 ASSERT_NE(eventManager, nullptr); 1661 1662 auto resultId = ElementRegister::GetInstance()->MakeUniqueId(); 1663 TouchTestResult touchTestResults; 1664 auto panRecognizer = AceType::MakeRefPtr<PanRecognizer>( 1665 DEFAULT_PAN_FINGER, PanDirection { PanDirection::NONE }, DEFAULT_PAN_DISTANCE.ConvertToPx()); 1666 panRecognizer->OnPending(); 1667 touchTestResults.push_back(panRecognizer); 1668 eventManager->touchTestResults_.emplace(resultId, touchTestResults); 1669 TouchEvent event; 1670 event.id = resultId; 1671 event.type = TouchType::DOWN; 1672 RefPtr<GestureScope> scope = AceType::MakeRefPtr<GestureScope>(resultId); 1673 ASSERT_NE(scope, nullptr); 1674 ASSERT_NE(eventManager->refereeNG_, nullptr); 1675 scope->AddMember(panRecognizer); 1676 eventManager->refereeNG_->gestureScopes_.insert(std::make_pair(resultId, scope)); 1677 eventManager->DispatchTouchEventAndCheck(event, false); 1678 EXPECT_EQ(panRecognizer->GetRefereeState(), RefereeState::FAIL); 1679 } 1680 } // namespace OHOS::Ace::NG