1 /* 2 * Copyright (c) 2025 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 16 #include "test/unittest/core/event/event_manager_test_ng.h" 17 18 using namespace testing; 19 using namespace testing::ext; 20 namespace OHOS::Ace::NG { 21 22 /** 23 * @tc.name: PenHoverTest001 24 * @tc.desc: Test PenHoverTest function. 25 */ 26 HWTEST_F(EventManagerTestNg, PenHoverTest001, TestSize.Level1) 27 { 28 auto eventManager = AceType::MakeRefPtr<EventManager>(); 29 ASSERT_NE(eventManager, nullptr); 30 const int nodeId = 10008; 31 auto frameNode = FrameNode::GetOrCreateFrameNode(V2::LOCATION_BUTTON_ETS_TAG, nodeId, nullptr); 32 ASSERT_NE(frameNode, nullptr); 33 TouchRestrict touchRestrict; 34 TouchEvent touchEvent; 35 int32_t eventId = 1; 36 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 37 touchEvent.sourceTool = SourceTool::PEN; 38 39 touchEvent.SetType(TouchType::PROXIMITY_IN); 40 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId); 41 eventManager->curPenHoverResultsMap_[eventId].push_back(hoverEventTarget); 42 eventManager->PenHoverTest(touchEvent, frameNode, touchRestrict); 43 EXPECT_FALSE(eventManager->lastPenHoverResultsMap_.empty()); 44 EXPECT_FALSE(eventManager->curPenHoverResultsMap_.empty()); 45 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 46 } 47 48 /** 49 * @tc.name: PenHoverTest002 50 * @tc.desc: Test PenHoverTest function. 51 */ 52 HWTEST_F(EventManagerTestNg, PenHoverTest002, TestSize.Level1) 53 { 54 auto eventManager = AceType::MakeRefPtr<EventManager>(); 55 ASSERT_NE(eventManager, nullptr); 56 const int nodeId = 10008; 57 auto frameNode = FrameNode::GetOrCreateFrameNode(V2::LOCATION_BUTTON_ETS_TAG, nodeId, nullptr); 58 ASSERT_NE(frameNode, nullptr); 59 TouchRestrict touchRestrict; 60 TouchEvent touchEvent; 61 int32_t eventId = 1; 62 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 63 touchEvent.sourceTool = SourceTool::PEN; 64 65 touchEvent.SetType(TouchType::PROXIMITY_OUT); 66 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId); 67 eventManager->curPenHoverResultsMap_[eventId].push_back(hoverEventTarget); 68 eventManager->PenHoverTest(touchEvent, frameNode, touchRestrict); 69 EXPECT_FALSE(eventManager->lastPenHoverResultsMap_.empty()); 70 EXPECT_FALSE(eventManager->curPenHoverResultsMap_.empty()); 71 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 72 } 73 74 /** 75 * @tc.name: PenHoverTest003 76 * @tc.desc: Test PenHoverTest function. 77 */ 78 HWTEST_F(EventManagerTestNg, PenHoverTest003, TestSize.Level1) 79 { 80 auto eventManager = AceType::MakeRefPtr<EventManager>(); 81 ASSERT_NE(eventManager, nullptr); 82 const int nodeId = 10008; 83 auto frameNode = FrameNode::GetOrCreateFrameNode(V2::LOCATION_BUTTON_ETS_TAG, nodeId, nullptr); 84 ASSERT_NE(frameNode, nullptr); 85 TouchRestrict touchRestrict; 86 TouchEvent touchEvent; 87 int32_t eventId = 1; 88 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 89 touchEvent.sourceTool = SourceTool::PEN; 90 91 touchEvent.SetType(TouchType::HOVER_MOVE); 92 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId); 93 eventManager->curPenHoverResultsMap_[eventId].push_back(hoverEventTarget); 94 eventManager->PenHoverTest(touchEvent, frameNode, touchRestrict); 95 EXPECT_FALSE(eventManager->lastPenHoverResultsMap_.empty()); 96 EXPECT_FALSE(eventManager->curPenHoverResultsMap_.empty()); 97 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 98 } 99 100 /** 101 * @tc.name: DispatchPenHoverMoveEventNG004 102 * @tc.desc: Test DispatchPenHoverMoveEventNG function. 103 */ 104 HWTEST_F(EventManagerTestNg, DispatchPenHoverMoveEventNG004, TestSize.Level1) 105 { 106 auto eventManager = AceType::MakeRefPtr<EventManager>(); 107 ASSERT_NE(eventManager, nullptr); 108 const int nodeId = 10008; 109 auto frameNode = FrameNode::GetOrCreateFrameNode(V2::LOCATION_BUTTON_ETS_TAG, nodeId, nullptr); 110 ASSERT_NE(frameNode, nullptr); 111 TouchRestrict touchRestrict; 112 TouchEvent touchEvent; 113 int32_t eventId = 1; 114 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 115 touchEvent.sourceTool = SourceTool::PEN; 116 int32_t doneId = 0; 117 118 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId); 119 hoverEventTarget->onPenHoverMoveEventCallback_ = nullptr; 120 eventManager->curPenHoverMoveResultsMap_[eventId].push_back(hoverEventTarget); 121 eventManager->DispatchPenHoverMoveEventNG(touchEvent); 122 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 123 124 eventManager->curPenHoverMoveResultsMap_.clear(); __anon89fd47520102(HoverInfo& hoverInfo) 125 hoverEventTarget->onPenHoverMoveEventCallback_ = [&doneId](HoverInfo& hoverInfo) { 126 hoverInfo.SetStopPropagation(false); 127 ++doneId; 128 }; 129 eventManager->curPenHoverMoveResultsMap_[eventId].push_back(hoverEventTarget); 130 eventManager->DispatchPenHoverMoveEventNG(touchEvent); 131 EXPECT_EQ(doneId, 1); 132 133 eventManager->curPenHoverMoveResultsMap_.clear(); 134 auto hoverEventTarget2 = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId); __anon89fd47520202(HoverInfo& hoverInfo) 135 hoverEventTarget2->onPenHoverMoveEventCallback_ = [&doneId](HoverInfo& hoverInfo) { 136 hoverInfo.SetStopPropagation(false); 137 ++doneId; 138 }; 139 eventManager->curPenHoverMoveResultsMap_[eventId - 1].push_back(hoverEventTarget2); 140 eventManager->DispatchPenHoverMoveEventNG(touchEvent); 141 EXPECT_EQ(doneId, 1); 142 } 143 144 145 /** 146 * @tc.name: DispatchPenHoverEventNG005 147 * @tc.desc: Test DispatchPenHoverEventNG function. 148 */ 149 HWTEST_F(EventManagerTestNg, DispatchPenHoverEventNG005, TestSize.Level1) 150 { 151 auto eventManager = AceType::MakeRefPtr<EventManager>(); 152 ASSERT_NE(eventManager, nullptr); 153 TouchEvent touchEvent; 154 int32_t eventId = 1; 155 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 156 157 int32_t doneId = 0; 158 const int nodeId1 = 10007; 159 const int nodeId2 = 10008; 160 const int nodeId3 = 10009; 161 const int nodeId4 = 10010; 162 auto hoverEventTarget1 = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId1); 163 auto hoverEventTarget2 = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId2); 164 auto hoverEventTarget3 = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId3); 165 auto hoverEventTarget4 = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId4); 166 hoverEventTarget2->onPenHoverEventCallback_ = nullptr; __anon89fd47520302(bool isHovered, HoverInfo& hoverInfo) 167 hoverEventTarget3->onPenHoverEventCallback_ = [&doneId](bool isHovered, HoverInfo& hoverInfo) { 168 hoverInfo.SetStopPropagation(false); 169 ++doneId; 170 }; 171 172 std::vector<std::unordered_map<int32_t, HoverTestResult>> lastPenHoverResultsMap = { 173 {}, 174 {{0, {hoverEventTarget1}}}, 175 {{eventId, {hoverEventTarget1}}}, 176 {{eventId, {hoverEventTarget1, hoverEventTarget2}}}, 177 {{eventId, {hoverEventTarget1, hoverEventTarget2, hoverEventTarget3}}} 178 }; 179 std::vector<std::unordered_map<int32_t, HoverTestResult>> curPenHoverResultsMap = { 180 {{0, {hoverEventTarget1}}}, 181 {{eventId, {hoverEventTarget2}}}, 182 {{eventId, {hoverEventTarget2, hoverEventTarget3}}}, 183 {{eventId, {hoverEventTarget2, hoverEventTarget3, hoverEventTarget4}}} 184 }; 185 std::vector<int> lastPenHoverDispatchLength = {0, 1, 2, 3}; 186 187 for (auto& lastMap : lastPenHoverResultsMap) { 188 for (auto& curMap : curPenHoverResultsMap) { 189 for (auto& len : lastPenHoverDispatchLength) { 190 eventManager->lastPenHoverResultsMap_ = lastMap; 191 eventManager->curPenHoverResultsMap_ = curMap; 192 eventManager->lastPenHoverDispatchLength_ = len; 193 eventManager->DispatchPenHoverEventNG(touchEvent); 194 } 195 } 196 } 197 ASSERT_EQ(doneId, 8); 198 } 199 200 /** 201 * @tc.name: UpdatePenHoverMoveNode006 202 * @tc.desc: Test UpdatePenHoverMoveNode function. 203 */ 204 HWTEST_F(EventManagerTestNg, UpdatePenHoverMoveNode006, TestSize.Level1) 205 { 206 auto eventManager = AceType::MakeRefPtr<EventManager>(); 207 ASSERT_NE(eventManager, nullptr); 208 209 const int nodeId = 10008; 210 211 TouchEvent touchEvent; 212 int32_t eventId = 1; 213 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 214 touchEvent.SetType(TouchType::HOVER_MOVE); 215 216 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId); 217 eventManager->curPenHoverResultsMap_[eventId].push_back(hoverEventTarget); 218 219 TouchTestResult testResult; 220 auto eventTarget = AceType::MakeRefPtr<MockTouchEventTarget>(); 221 testResult.push_back(eventTarget); 222 eventManager->UpdatePenHoverNode(touchEvent, testResult); 223 eventManager->UpdatePenHoverMoveNode(touchEvent, testResult); 224 225 EXPECT_FALSE(eventManager->lastPenHoverResultsMap_.empty()); 226 EXPECT_FALSE(eventManager->curPenHoverResultsMap_.empty()); 227 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 228 } 229 230 /** 231 * @tc.name: UpdatePenHoverMoveNode007 232 * @tc.desc: Test UpdatePenHoverMoveNode function. 233 */ 234 HWTEST_F(EventManagerTestNg, UpdatePenHoverMoveNode007, TestSize.Level1) 235 { 236 auto eventManager = AceType::MakeRefPtr<EventManager>(); 237 ASSERT_NE(eventManager, nullptr); 238 239 const int nodeId1 = 10008; 240 const int nodeId2 = 10009; 241 242 TouchEvent touchEvent; 243 int32_t eventId = 1; 244 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 245 touchEvent.SetType(TouchType::HOVER_MOVE); 246 247 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId1); 248 eventManager->curPenHoverResultsMap_[eventId].push_back(hoverEventTarget); 249 250 TouchTestResult testResult; 251 auto eventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId2); 252 eventTarget->SetPenHoverCallback(nullptr); 253 testResult.push_back(eventTarget); 254 255 eventManager->UpdatePenHoverNode(touchEvent, testResult); 256 eventManager->UpdatePenHoverMoveNode(touchEvent, testResult); 257 258 EXPECT_FALSE(eventManager->lastPenHoverResultsMap_.empty()); 259 EXPECT_FALSE(eventManager->curPenHoverResultsMap_.empty()); 260 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 261 } 262 263 /** 264 * @tc.name: UpdatePenHoverMoveNode008 265 * @tc.desc: Test UpdatePenHoverMoveNode function. 266 */ 267 HWTEST_F(EventManagerTestNg, UpdatePenHoverMoveNode008, TestSize.Level1) 268 { 269 auto eventManager = AceType::MakeRefPtr<EventManager>(); 270 ASSERT_NE(eventManager, nullptr); 271 272 const int nodeId1 = 10008; 273 const int nodeId2 = 10009; 274 275 TouchEvent touchEvent; 276 int32_t eventId = 1; 277 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 278 touchEvent.SetType(TouchType::HOVER_MOVE); 279 280 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId1); 281 eventManager->curPenHoverResultsMap_[eventId].push_back(hoverEventTarget); 282 283 TouchTestResult testResult; 284 auto eventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId2); __anon89fd47520402(bool, HoverInfo) 285 const OnHoverFunc onHover = [](bool, HoverInfo) {}; 286 eventTarget->SetPenHoverCallback(onHover); 287 testResult.push_back(eventTarget); 288 289 eventManager->UpdatePenHoverNode(touchEvent, testResult); 290 eventManager->UpdatePenHoverMoveNode(touchEvent, testResult); 291 292 EXPECT_FALSE(eventManager->lastPenHoverResultsMap_.empty()); 293 EXPECT_FALSE(eventManager->curPenHoverResultsMap_.empty()); 294 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 295 } 296 297 /** 298 * @tc.name: UpdatePenHoverMoveNode009 299 * @tc.desc: Test UpdatePenHoverMoveNode function. 300 */ 301 HWTEST_F(EventManagerTestNg, UpdatePenHoverMoveNode009, TestSize.Level1) 302 { 303 auto eventManager = AceType::MakeRefPtr<EventManager>(); 304 ASSERT_NE(eventManager, nullptr); 305 306 const int nodeId1 = 10008; 307 const int nodeId2 = 10009; 308 309 TouchEvent touchEvent; 310 int32_t eventId = 1; 311 touchEvent.SetX(100.0).SetY(100.0).SetOriginalId(eventId).SetId(eventId); 312 touchEvent.SetType(TouchType::HOVER_MOVE); 313 314 auto hoverEventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId1); 315 eventManager->curPenHoverResultsMap_[eventId].push_back(hoverEventTarget); 316 317 TouchTestResult testResult; 318 auto eventTarget = AceType::MakeRefPtr<HoverEventTarget>(V2::LOCATION_BUTTON_ETS_TAG, nodeId2); __anon89fd47520502(HoverInfo) 319 const OnHoverMoveFunc onHover = [](HoverInfo) {}; 320 eventTarget->SetPenHoverMoveCallback(onHover); 321 testResult.push_back(eventTarget); 322 323 eventManager->UpdatePenHoverNode(touchEvent, testResult); 324 eventManager->UpdatePenHoverMoveNode(touchEvent, testResult); 325 326 EXPECT_FALSE(eventManager->lastPenHoverResultsMap_.empty()); 327 EXPECT_FALSE(eventManager->curPenHoverResultsMap_.empty()); 328 EXPECT_FALSE(eventManager->curPenHoverMoveResultsMap_.empty()); 329 } 330 } // namespace OHOS::Ace::NG