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
16 #include <gtest/gtest.h>
17
18 #include "image_source.h"
19 #include "image_type.h"
20 #include "image_utils.h"
21
22 #include "mmi_log.h"
23 #include "pointer_event.h"
24 #include "knuckle_dynamic_drawing_manager.h"
25
26 #undef MMI_LOG_TAG
27 #define MMI_LOG_TAG "KnuckleDynamicDrawingManagerTest"
28
29 namespace OHOS {
30 namespace MMI {
31 namespace {
32 using namespace testing::ext;
33 constexpr int32_t POINT_SYSTEM_SIZE = 50;
34 constexpr int32_t MAX_DIVERGENCE_NUM = 10;
35 constexpr int32_t MAX_POINTER_COLOR = 0xff00ff;
36 constexpr std::string_view SCREEN_READ_ENABLE { "1" };
37 } // namespace
38
39 class KnuckleDynamicDrawingManagerTest : public testing::Test {
40 public:
SetUpTestCase(void)41 static void SetUpTestCase(void) {};
TearDownTestCase(void)42 static void TearDownTestCase(void) {};
SetUp(void)43 void SetUp(void)
44 {
45 OLD::DisplayInfo displayInfo = { .id = 1, .x = 1, .y = 1, .width = 1, .height = 1,
46 .dpi = 240, .name = "display", .uniq = "xx" };
47 if (knuckleDynamicDrawingMgr == nullptr) {
48 knuckleDynamicDrawingMgr = std::make_shared<KnuckleDynamicDrawingManager>();
49 }
50 knuckleDynamicDrawingMgr->UpdateDisplayInfo(displayInfo);
51 }
52
53 std::shared_ptr<Media::PixelMap> DecodeImageToPixelMap(const std::string &imagePath);
54 private:
55 std::shared_ptr<KnuckleDynamicDrawingManager> knuckleDynamicDrawingMgr { nullptr };
56 };
57
DecodeImageToPixelMap(const std::string & imagePath)58 std::shared_ptr<Media::PixelMap> KnuckleDynamicDrawingManagerTest::DecodeImageToPixelMap(const std::string &imagePath)
59 {
60 CALL_DEBUG_ENTER;
61 OHOS::Media::SourceOptions opts;
62 uint32_t ret = 0;
63 auto imageSource = OHOS::Media::ImageSource::CreateImageSource(imagePath, opts, ret);
64 CHKPP(imageSource);
65 std::set<std::string> formats;
66 ret = imageSource->GetSupportedFormats(formats);
67 OHOS::Media::DecodeOptions decodeOpts;
68 decodeOpts.desiredSize = {
69 .width = 80,
70 .height = 80
71 };
72
73 decodeOpts.SVGOpts.fillColor = {.isValidColor = false, .color = MAX_POINTER_COLOR};
74 decodeOpts.SVGOpts.strokeColor = {.isValidColor = false, .color = MAX_POINTER_COLOR};
75
76 std::shared_ptr<OHOS::Media::PixelMap> pixelMap = imageSource->CreatePixelMap(decodeOpts, ret);
77 if (pixelMap == nullptr) {
78 MMI_HILOGE("The pixelMap is nullptr");
79 }
80 return pixelMap;
81 }
82
83 /**
84 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_Normal
85 * @tc.desc: Test Normal branch of covering KnuckleDynamicDrawHandler function
86 * @tc.type: Function
87 * @tc.require:
88 */
89 HWTEST_F(KnuckleDynamicDrawingManagerTest,
90 KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_Normal, TestSize.Level1)
91 {
92 CALL_TEST_DEBUG;
93 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
94 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
95 ASSERT_NE(pointerEvent, nullptr);
96 PointerEvent::PointerItem item;
97 item.SetPointerId(1);
98 item.SetToolType(PointerEvent::TOOL_TYPE_MOUSE);
99 pointerEvent->SetPointerId(1);
100 pointerEvent->AddPointerItem(item);
101 knuckleDynamicDrawMgr.KnuckleDynamicDrawHandler(pointerEvent);
102 EXPECT_FALSE(knuckleDynamicDrawMgr.isStop_);
103 }
104
105 /**
106 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_Abnormal
107 * @tc.desc: Test Abnormal branch of covering KnuckleDynamicDrawHandler function
108 * @tc.type: Function
109 * @tc.require:
110 */
111 HWTEST_F(KnuckleDynamicDrawingManagerTest,
112 KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_Abnormal, TestSize.Level1)
113 {
114 CALL_TEST_DEBUG;
115 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
116 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
117 ASSERT_NE(pointerEvent, nullptr);
118 PointerEvent::PointerItem item;
119 item.SetPointerId(1);
120 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
121 pointerEvent->SetPointerId(1);
122 pointerEvent->AddPointerItem(item);
123 pointerEvent->SetTargetDisplayId(50);
124 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_PULL_DOWN);
125 knuckleDynamicDrawMgr.KnuckleDynamicDrawHandler(pointerEvent);
126 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_SWIPE_END);
127 knuckleDynamicDrawMgr.KnuckleDynamicDrawHandler(pointerEvent);
128 EXPECT_TRUE(knuckleDynamicDrawMgr.isDrawing_);
129 }
130
131 /**
132 * @tc.name: KnuckleDynamicDrawingManagerTest_InitPointerPathPaint
133 * @tc.desc: Test Overrides InitPointerPathPaint function branches
134 * @tc.type: Function
135 * @tc.require:
136 */
137 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_InitPointerPathPaint, TestSize.Level1)
138 {
139 CALL_TEST_DEBUG;
140 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
141 knuckleDynamicDrawMgr.glowTraceSystem_ = nullptr;
142 knuckleDynamicDrawMgr.InitPointerPathPaint();
143 std::string imagePath = "/system/etc/multimodalinput/mouse_icon/Default.svg";
144 auto pixelMap = DecodeImageToPixelMap(imagePath);
145 ASSERT_NE(pixelMap, nullptr);
146 knuckleDynamicDrawMgr.glowTraceSystem_ =
147 std::make_shared<KnuckleGlowTraceSystem>(POINT_SYSTEM_SIZE, pixelMap, MAX_DIVERGENCE_NUM);
148 knuckleDynamicDrawMgr.InitPointerPathPaint();
149 }
150
151 /**
152 * @tc.name: KnuckleDynamicDrawingManagerTest_IsSingleKnuckle
153 * @tc.desc: Test Overrides IsSingleKnuckle function branches
154 * @tc.type: Function
155 * @tc.require:
156 */
157 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_IsSingleKnuckle, TestSize.Level1)
158 {
159 CALL_TEST_DEBUG;
160 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
161 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
162 ASSERT_NE(pointerEvent, nullptr);
163 PointerEvent::PointerItem item;
164 item.SetPointerId(1);
165 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
166 pointerEvent->SetPointerId(1);
167 pointerEvent->AddPointerItem(item);
168 ASSERT_TRUE(knuckleDynamicDrawMgr.IsSingleKnuckle(pointerEvent));
169
170 item.SetPointerId(2);
171 item.SetToolType(PointerEvent::TOOL_TYPE_TOUCHPAD);
172 pointerEvent->SetPointerId(2);
173 pointerEvent->AddPointerItem(item);
174 knuckleDynamicDrawMgr.canvasNode_ = nullptr;
175 ASSERT_FALSE(knuckleDynamicDrawMgr.IsSingleKnuckle(pointerEvent));
176
177 knuckleDynamicDrawMgr.canvasNode_ = Rosen::RSCanvasDrawingNode::Create();
178 ASSERT_NE(knuckleDynamicDrawMgr.canvasNode_, nullptr);
179 ASSERT_FALSE(knuckleDynamicDrawMgr.IsSingleKnuckle(pointerEvent));
180 }
181
182 /**
183 * @tc.name: KnuckleDrawingManagerTest_StartTouchDraw
184 * @tc.desc: Test Overrides StartTouchDraw function branches
185 * @tc.type: Function
186 * @tc.require:
187 */
188 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_StartTouchDraw, TestSize.Level1)
189 {
190 CALL_TEST_DEBUG;
191 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
192 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
193 ASSERT_NE(pointerEvent, nullptr);
194 pointerEvent->SetPointerId(1);
195 knuckleDynamicDrawMgr.StartTouchDraw(pointerEvent);
196
197 knuckleDynamicDrawMgr.canvasNode_ = Rosen::RSCanvasDrawingNode::Create();
198 ASSERT_NE(knuckleDynamicDrawMgr.canvasNode_, nullptr);
199 knuckleDynamicDrawMgr.displayInfo_.width = 200;
200 knuckleDynamicDrawMgr.displayInfo_.height = 200;
201 std::string imagePath = "/system/etc/multimodalinput/mouse_icon/Default.svg";
202 auto pixelMap = DecodeImageToPixelMap(imagePath);
203 knuckleDynamicDrawMgr.glowTraceSystem_ =
204 std::make_shared<KnuckleGlowTraceSystem>(POINT_SYSTEM_SIZE, pixelMap, MAX_DIVERGENCE_NUM);
205 knuckleDynamicDrawMgr.isDrawing_ = true;
206 knuckleDynamicDrawMgr.StartTouchDraw(pointerEvent);
207 }
208
209 /**
210 * @tc.name: KnuckleDynamicDrawingManagerTest_DrawGraphic
211 * @tc.name: KnuckleDrawingManagerTest_DrawGraphic
212 * @tc.desc: Test Overrides DrawGraphic function branches
213 * @tc.type: Function
214 * @tc.require:
215 */
216 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_DrawGraphic, TestSize.Level1)
217 {
218 CALL_TEST_DEBUG;
219 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
220 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
221 ASSERT_NE(pointerEvent, nullptr);
222 pointerEvent->SetPointerId(1);
223
224 knuckleDynamicDrawMgr.canvasNode_ = Rosen::RSCanvasDrawingNode::Create();
225 ASSERT_NE(knuckleDynamicDrawMgr.canvasNode_, nullptr);
226 knuckleDynamicDrawMgr.displayInfo_.width = 200;
227 knuckleDynamicDrawMgr.displayInfo_.height = 200;
228 std::string imagePath = "/system/etc/multimodalinput/mouse_icon/Default.svg";
229 auto pixelMap = DecodeImageToPixelMap(imagePath);
230 knuckleDynamicDrawMgr.glowTraceSystem_ =
231 std::make_shared<KnuckleGlowTraceSystem>(POINT_SYSTEM_SIZE, pixelMap, MAX_DIVERGENCE_NUM);
232 knuckleDynamicDrawMgr.isDrawing_ = false;
233 ASSERT_EQ(knuckleDynamicDrawMgr.DrawGraphic(pointerEvent), RET_OK);
234 knuckleDynamicDrawMgr.isDrawing_ = true;
235 ASSERT_EQ(knuckleDynamicDrawMgr.DrawGraphic(pointerEvent), RET_ERR);
236 }
237
238 /**
239 * @tc.name: KnuckleDynamicDrawingManagerTest_CreateTouchWindow
240 * @tc.desc: Test Overrides CreateTouchWindow function branches
241 * @tc.type: Function
242 * @tc.require:
243 */
244 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_CreateTouchWindow, TestSize.Level1)
245 {
246 CALL_TEST_DEBUG;
247 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
248 int32_t displayId = 10;
249 knuckleDynamicDrawMgr.surfaceNode_ = nullptr;
250 knuckleDynamicDrawMgr.displayInfo_.width = 200;
251 knuckleDynamicDrawMgr.displayInfo_.height = 200;
252 knuckleDynamicDrawMgr.CreateTouchWindow(displayId);
253
254 Rosen::RSSurfaceNodeConfig surfaceNodeConfig;
255 surfaceNodeConfig.SurfaceNodeName = "touch window";
256 Rosen::RSSurfaceNodeType surfaceNodeType = Rosen::RSSurfaceNodeType::SELF_DRAWING_WINDOW_NODE;
257 knuckleDynamicDrawMgr.surfaceNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, surfaceNodeType);
258 ASSERT_NE(knuckleDynamicDrawMgr.surfaceNode_, nullptr);
259 knuckleDynamicDrawMgr.CreateTouchWindow(displayId);
260 }
261
262 /**
263 * @tc.name: KnuckleDynamicDrawingManagerTest_CreateTouchWindow_002
264 * @tc.desc: Test Overrides CreateTouchWindow function branches
265 * @tc.type: Function
266 * @tc.require:
267 */
268 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_CreateTouchWindow_002, TestSize.Level1)
269 {
270 CALL_TEST_DEBUG;
271 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
272 int32_t displayId = 10;
273 knuckleDynamicDrawMgr.surfaceNode_ = nullptr;
274 knuckleDynamicDrawMgr.displayInfo_.width = 200;
275 knuckleDynamicDrawMgr.displayInfo_.height = 200;
276 knuckleDynamicDrawMgr.displayInfo_.displayMode = DisplayMode::MAIN;
277 knuckleDynamicDrawMgr.CreateTouchWindow(displayId);
278 EXPECT_EQ(knuckleDynamicDrawMgr.screenId_, 5);
279
280 knuckleDynamicDrawMgr.knuckleDrawMgr_ = std::make_shared<KnuckleDrawingManager>();
281 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawMgr.CreateTouchWindow(displayId));
282 }
283
284 /**
285 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_001
286 * @tc.desc: Test KnuckleDynamicDrawHandler
287 * @tc.type: Function
288 * @tc.require:
289 */
290 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_001,
291 TestSize.Level1)
292 {
293 CALL_TEST_DEBUG;
294 auto pointerEvent = PointerEvent::Create();
295 EXPECT_NE(pointerEvent, nullptr);
296
297 PointerEvent::PointerItem item;
298 item.SetPointerId(0);
299 int32_t displayX = 100;
300 int32_t displayY = 100;
301 item.SetDisplayX(displayX);
302 item.SetDisplayY(displayY);
303 item.SetToolType(PointerEvent::TOOL_TYPE_FINGER);
304 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
305 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
306 pointerEvent->SetTargetDisplayId(0);
307 pointerEvent->SetPointerId(0);
308 pointerEvent->AddPointerItem(item);
309 knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent);
310 EXPECT_TRUE(knuckleDynamicDrawingMgr->isDrawing_);
311 }
312
313 /**
314 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_002
315 * @tc.desc: Test KnuckleDynamicDrawHandler
316 * @tc.type: Function
317 * @tc.require:
318 */
319 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_002,
320 TestSize.Level1)
321 {
322 CALL_TEST_DEBUG;
323 auto pointerEvent = PointerEvent::Create();
324 EXPECT_NE(pointerEvent, nullptr);
325
326 PointerEvent::PointerItem item;
327 item.SetPointerId(0);
328 int32_t displayX = 200;
329 int32_t displayY = 200;
330 item.SetDisplayX(displayX);
331 item.SetDisplayY(displayY);
332 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
333 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
334 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
335 pointerEvent->SetTargetDisplayId(0);
336 pointerEvent->SetPointerId(0);
337 pointerEvent->AddPointerItem(item);
338 knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent);
339 EXPECT_EQ(knuckleDynamicDrawingMgr->lastUpTime_, 0);
340 }
341
342 /**
343 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_003
344 * @tc.desc: Test KnuckleDynamicDrawHandler
345 * @tc.type: Function
346 * @tc.require:
347 */
348 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_003,
349 TestSize.Level1)
350 {
351 CALL_TEST_DEBUG;
352 auto pointerEvent = PointerEvent::Create();
353 EXPECT_NE(pointerEvent, nullptr);
354
355 PointerEvent::PointerItem item1;
356 item1.SetPointerId(0);
357 int32_t displayX = 100;
358 int32_t displayY = 200;
359 item1.SetDisplayX(displayX);
360 item1.SetDisplayY(displayY);
361 item1.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
362 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE);
363 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
364 pointerEvent->SetTargetDisplayId(0);
365 pointerEvent->SetPointerId(0);
366 pointerEvent->AddPointerItem(item1);
367
368 PointerEvent::PointerItem item2;
369 item2.SetPointerId(1);
370 displayX = 200;
371 displayY = 200;
372 item2.SetDisplayX(displayX);
373 item2.SetDisplayY(displayY);
374 item2.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
375 pointerEvent->AddPointerItem(item2);
376 knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent);
377 EXPECT_TRUE(knuckleDynamicDrawingMgr->isDrawing_);
378 }
379
380 /**
381 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_004
382 * @tc.desc: Test KnuckleDynamicDrawHandler
383 * @tc.type: Function
384 * @tc.require:
385 */
386 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_004,
387 TestSize.Level1)
388 {
389 CALL_TEST_DEBUG;
390 auto pointerEvent = PointerEvent::Create();
391 EXPECT_NE(pointerEvent, nullptr);
392
393 PointerEvent::PointerItem item;
394 item.SetPointerId(0);
395 int32_t displayX = 200;
396 int32_t displayY = 200;
397 item.SetDisplayX(displayX);
398 item.SetDisplayY(displayY);
399 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
400 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
401 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
402 pointerEvent->SetTargetDisplayId(0);
403 pointerEvent->SetPointerId(0);
404 pointerEvent->AddPointerItem(item);
405 knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent);
406 EXPECT_EQ(knuckleDynamicDrawingMgr->firstDownTime_, 0);
407 }
408
409 /**
410 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_005
411 * @tc.desc: Test KnuckleDynamicDrawHandler
412 * @tc.type: Function
413 * @tc.require:
414 */
415 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_005,
416 TestSize.Level1)
417 {
418 CALL_TEST_DEBUG;
419 auto pointerEvent = PointerEvent::Create();
420 EXPECT_NE(pointerEvent, nullptr);
421
422 PointerEvent::PointerItem item;
423 item.SetPointerId(0);
424 int32_t displayX = 200;
425 int32_t displayY = 200;
426 item.SetDisplayX(displayX);
427 item.SetDisplayY(displayY);
428 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
429 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE);
430 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
431 pointerEvent->SetTargetDisplayId(0);
432 pointerEvent->SetPointerId(0);
433 pointerEvent->AddPointerItem(item);
434 knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent);
435 EXPECT_NE(knuckleDynamicDrawingMgr->pointCounter_, 1);
436 }
437
438 /**
439 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_006
440 * @tc.desc: Test KnuckleDynamicDrawHandler
441 * @tc.type: Function
442 * @tc.require:
443 */
444 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_006,
445 TestSize.Level1)
446 {
447 CALL_TEST_DEBUG;
448 auto pointerEvent = PointerEvent::Create();
449 EXPECT_NE(pointerEvent, nullptr);
450
451 PointerEvent::PointerItem item;
452 item.SetPointerId(0);
453 int32_t displayX = 200;
454 int32_t displayY = 200;
455 item.SetDisplayX(displayX);
456 item.SetDisplayY(displayY);
457 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
458 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_CANCEL);
459 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
460 pointerEvent->SetTargetDisplayId(0);
461 pointerEvent->SetPointerId(0);
462 pointerEvent->AddPointerItem(item);
463 knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent);
464 EXPECT_TRUE(knuckleDynamicDrawingMgr->traceControlPoints_.empty());
465 }
466
467 /**
468 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_007
469 * @tc.desc: Test KnuckleDynamicDrawHandler
470 * @tc.type: Function
471 * @tc.require:
472 */
473 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_007,
474 TestSize.Level1)
475 {
476 CALL_TEST_DEBUG;
477 auto pointerEvent = PointerEvent::Create();
478 EXPECT_NE(pointerEvent, nullptr);
479
480 PointerEvent::PointerItem item;
481 item.SetPointerId(0);
482 int32_t displayX = 100;
483 int32_t displayY = 100;
484 item.SetDisplayX(displayX);
485 item.SetDisplayY(displayY);
486 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
487 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
488 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
489 pointerEvent->SetTargetDisplayId(0);
490 pointerEvent->SetPointerId(0);
491 pointerEvent->AddPointerItem(item);
492 int32_t rsId = 0;
493 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent, rsId));
494 }
495
496 /**
497 * @tc.name: KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_008
498 * @tc.desc: Test KnuckleDynamicDrawHandler
499 * @tc.type: Function
500 * @tc.require:
501 */
502 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_KnuckleDynamicDrawHandler_008,
503 TestSize.Level1)
504 {
505 CALL_TEST_DEBUG;
506 auto pointerEvent = PointerEvent::Create();
507 EXPECT_NE(pointerEvent, nullptr);
508
509 PointerEvent::PointerItem item;
510 item.SetPointerId(0);
511 int32_t displayX = 100;
512 int32_t displayY = 100;
513 item.SetDisplayX(displayX);
514 item.SetDisplayY(displayY);
515 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
516 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
517 pointerEvent->SetSourceType(PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
518 pointerEvent->SetTargetDisplayId(0);
519 pointerEvent->SetPointerId(0);
520 pointerEvent->AddPointerItem(item);
521 knuckleDynamicDrawingMgr->isRotate_ = false;
522 int32_t rsId = 0;
523 knuckleDynamicDrawingMgr->knuckleDrawMgr_ = std::make_shared<KnuckleDrawingManager>();
524 EXPECT_TRUE(knuckleDynamicDrawingMgr->IsSingleKnuckle(pointerEvent));
525 EXPECT_TRUE(knuckleDynamicDrawingMgr->CheckPointerAction(pointerEvent));
526 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawingMgr->KnuckleDynamicDrawHandler(pointerEvent, rsId));
527 }
528
529 /**
530 * @tc.name: KnuckleDynamicDrawingManagerTest_UpdateDisplayInfo_001
531 * @tc.desc: Test UpdateDisplayInfo
532 * @tc.type: Function
533 * @tc.require:
534 */
535 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_UpdateDisplayInfo_001, TestSize.Level1)
536 {
537 CALL_TEST_DEBUG;
538 OLD::DisplayInfo displayInfo = { .id = 1, .x = 1, .y = 1, .width = 1, .height = 1,
539 .dpi = 240, .name = "display", .uniq = "xx" };
540 knuckleDynamicDrawingMgr->UpdateDisplayInfo(displayInfo);
541 EXPECT_EQ(knuckleDynamicDrawingMgr->displayInfo_.width, 1);
542 }
543
544 /**
545 * @tc.name: KnuckleDynamicDrawingManagerTest_UpdateDisplayInfo_002
546 * @tc.desc: Test UpdateDisplayInfo
547 * @tc.type: Function
548 * @tc.require:
549 */
550 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_UpdateDisplayInfo_002, TestSize.Level1)
551 {
552 CALL_TEST_DEBUG;
553 OLD::DisplayInfo displayInfo;
554 knuckleDynamicDrawingMgr->UpdateDisplayInfo(displayInfo);
555 EXPECT_EQ(knuckleDynamicDrawingMgr->displayInfo_.width, 0);
556 }
557
558 /**
559 * @tc.name: KnuckleDynamicDrawingManagerTest_UpdateDisplayInfo_003
560 * @tc.desc: Test UpdateDisplayInfo
561 * @tc.type: Function
562 * @tc.require:
563 */
564 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_UpdateDisplayInfo_003, TestSize.Level1)
565 {
566 CALL_TEST_DEBUG;
567 OLD::DisplayInfo displayInfo;
568 displayInfo.direction = Direction::DIRECTION90;
569 knuckleDynamicDrawingMgr->displayInfo_.direction = Direction::DIRECTION0;
570 knuckleDynamicDrawingMgr->UpdateDisplayInfo(displayInfo);
571 EXPECT_TRUE(knuckleDynamicDrawingMgr->isRotate_);
572 }
573
574 /**
575 * @tc.name: KnuckleDynamicDrawingManagerTest_DestoryWindow_002
576 * @tc.desc: Test DestoryWindow
577 * @tc.type: Function
578 * @tc.require:
579 */
580 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_DestoryWindow_002, TestSize.Level1)
581 {
582 CALL_TEST_DEBUG;
583 knuckleDynamicDrawingMgr->canvasNode_ = nullptr;
584 Rosen::RSSurfaceNodeConfig surfaceNodeConfig;
585 surfaceNodeConfig.SurfaceNodeName = "knuckle window";
586 Rosen::RSSurfaceNodeType surfaceNodeType = Rosen::RSSurfaceNodeType::SELF_DRAWING_WINDOW_NODE;
587 knuckleDynamicDrawingMgr->surfaceNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, surfaceNodeType);
588 ASSERT_NE(knuckleDynamicDrawingMgr->surfaceNode_, nullptr);
589 knuckleDynamicDrawingMgr->canvasNode_ = Rosen::RSCanvasDrawingNode::Create();
590 ASSERT_NE(knuckleDynamicDrawingMgr->canvasNode_, nullptr);
591 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawingMgr->DestoryWindow());
592 }
593
594 /**
595 * @tc.name: KnuckleDynamicDrawingManagerTest_IsSingleKnuckle_001
596 * @tc.desc: Test Overrides IsSingleKnuckle function branches
597 * @tc.type: Function
598 * @tc.require:
599 */
600 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_IsSingleKnuckle_001, TestSize.Level1)
601 {
602 CALL_TEST_DEBUG;
603 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
604 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
605 ASSERT_NE(pointerEvent, nullptr);
606 PointerEvent::PointerItem item;
607 item.SetPointerId(10);
608 item.SetToolType(PointerEvent::TOOL_TYPE_TOUCHPAD);
609 pointerEvent->SetPointerId(10);
610 pointerEvent->AddPointerItem(item);
611 Rosen::Drawing::Point point = Rosen::Drawing::Point();
612 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
613 EXPECT_FALSE(knuckleDynamicDrawMgr.IsSingleKnuckle(pointerEvent));
614 knuckleDynamicDrawMgr.traceControlPoints_.clear();
615 knuckleDynamicDrawMgr.isRotate_ = true;
616 item.SetPointerId(20);
617 item.SetToolType(PointerEvent::TOOL_TYPE_KNUCKLE);
618 pointerEvent->SetPointerId(20);
619 pointerEvent->AddPointerItem(item);
620 EXPECT_TRUE(knuckleDynamicDrawMgr.IsSingleKnuckle(pointerEvent));
621 pointerEvent->SetPointerId(10);
622 knuckleDynamicDrawMgr.isRotate_ = true;
623 EXPECT_FALSE(knuckleDynamicDrawMgr.IsSingleKnuckle(pointerEvent));
624 EXPECT_FALSE(knuckleDynamicDrawMgr.IsSingleKnuckle(pointerEvent));
625 }
626
627 /**
628 * @tc.name: KnuckleDynamicDrawingManagerTest_CheckPointerAction
629 * @tc.desc: Test Overrides CheckPointerAction function branches
630 * @tc.type: Function
631 * @tc.require:
632 */
633 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_CheckPointerAction, TestSize.Level1)
634 {
635 CALL_TEST_DEBUG;
636 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
637 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
638 ASSERT_NE(pointerEvent, nullptr);
639 knuckleDynamicDrawMgr.canvasNode_ = Rosen::RSCanvasDrawingNode::Create();
640 ASSERT_NE(knuckleDynamicDrawMgr.canvasNode_, nullptr);
641 Rosen::RSSurfaceNodeConfig surfaceNodeConfig;
642 surfaceNodeConfig.SurfaceNodeName = "touch window";
643 Rosen::RSSurfaceNodeType surfaceNodeType = Rosen::RSSurfaceNodeType::SELF_DRAWING_WINDOW_NODE;
644 knuckleDynamicDrawMgr.surfaceNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, surfaceNodeType);
645 ASSERT_NE(knuckleDynamicDrawMgr.surfaceNode_, nullptr);
646 PointerEvent::PointerItem item;
647 item.SetPointerId(10);
648 pointerEvent->AddPointerItem(item);
649 item.SetPointerId(20);
650 pointerEvent->AddPointerItem(item);
651 knuckleDynamicDrawMgr.knuckleDrawMgr_ = std::make_shared<KnuckleDrawingManager>();
652 knuckleDynamicDrawMgr.knuckleDrawMgr_->screenReadState_.state = SCREEN_READ_ENABLE;
653 EXPECT_FALSE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
654 }
655
656 /**
657 * @tc.name: KnuckleDynamicDrawingManagerTest_CheckPointerAction_001
658 * @tc.desc: Test Overrides CheckPointerAction function branches
659 * @tc.type: Function
660 * @tc.require:
661 */
662 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_CheckPointerAction_001, TestSize.Level1)
663 {
664 CALL_TEST_DEBUG;
665 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
666 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
667 ASSERT_NE(pointerEvent, nullptr);
668 PointerEvent::PointerItem item;
669 item.SetPointerId(10);
670 pointerEvent->AddPointerItem(item);
671 knuckleDynamicDrawMgr.knuckleDrawMgr_ = std::make_shared<KnuckleDrawingManager>();
672 knuckleDynamicDrawMgr.knuckleDrawMgr_->screenReadState_.state = "0";
673 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UP);
674 EXPECT_TRUE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
675 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_PULL_UP);
676 EXPECT_TRUE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
677 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_DOWN);
678 EXPECT_TRUE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
679 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_PULL_DOWN);
680 EXPECT_TRUE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
681 knuckleDynamicDrawMgr.isStop_ = true;
682 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_MOVE);
683 EXPECT_FALSE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
684 knuckleDynamicDrawMgr.isStop_ = false;
685 knuckleDynamicDrawMgr.traceControlPoints_.clear();
686 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_PULL_MOVE);
687 EXPECT_FALSE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
688 Rosen::Drawing::Point point = Rosen::Drawing::Point();
689 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
690 EXPECT_TRUE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
691 pointerEvent->SetPointerAction(PointerEvent::POINTER_ACTION_UNKNOWN);
692 EXPECT_FALSE(knuckleDynamicDrawMgr.CheckPointerAction(pointerEvent));
693 }
694
695 /**
696 * @tc.name: KnuckleDynamicDrawingManagerTest_ProcessUpAndCancelEvent
697 * @tc.desc: Test Overrides ProcessUpAndCancelEvent function branches
698 * @tc.type: Function
699 * @tc.require:
700 */
701 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_ProcessUpAndCancelEvent, TestSize.Level1)
702 {
703 CALL_TEST_DEBUG;
704 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
705 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
706 ASSERT_NE(pointerEvent, nullptr);
707 std::string imagePath = "/system/etc/multimodalinput/mouse_icon/Default.svg";
708 auto pixelMap = DecodeImageToPixelMap(imagePath);
709 knuckleDynamicDrawMgr.glowTraceSystem_ = std::make_shared<KnuckleGlowTraceSystem>(POINT_SYSTEM_SIZE,
710 pixelMap, MAX_DIVERGENCE_NUM);
711 pointerEvent->SetPointerId(10);
712 pointerEvent->SetActionTime(1000);
713 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawMgr.ProcessUpAndCancelEvent(pointerEvent));
714 }
715
716 /**
717 * @tc.name: KnuckleDynamicDrawingManagerTest_SetKnuckleDrawingManager
718 * @tc.desc: Test SetKnuckleDrawingManager
719 * @tc.type: Function
720 * @tc.require:
721 */
722 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_SetKnuckleDrawingManager, TestSize.Level1)
723 {
724 CALL_TEST_DEBUG;
725 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
726 knuckleDynamicDrawMgr.knuckleDrawMgr_ = std::make_shared<KnuckleDrawingManager>();
727 knuckleDynamicDrawMgr.knuckleDrawMgr_->screenReadState_.state = "0";
728 knuckleDynamicDrawMgr.pointCounter_ = MAX_DIVERGENCE_NUM;
729 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawMgr.SetKnuckleDrawingManager(knuckleDynamicDrawMgr.knuckleDrawMgr_));
730 }
731
732 /**
733 * @tc.name: KnuckleDynamicDrawingManagerTest_ProcessMoveEvent
734 * @tc.desc: Test ProcessMoveEvent
735 * @tc.type: Function
736 * @tc.require:
737 */
738 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_ProcessMoveEvent, TestSize.Level1)
739 {
740 CALL_TEST_DEBUG;
741 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
742 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
743 knuckleDynamicDrawMgr.pointCounter_ = MAX_DIVERGENCE_NUM;
744 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawMgr.ProcessMoveEvent(pointerEvent));
745 }
746
747 /**
748 * @tc.name: KnuckleDynamicDrawingManagerTest_ProcessMoveEvent_002
749 * @tc.desc: Test ProcessMoveEvent
750 * @tc.type: Function
751 * @tc.require:
752 */
753 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_ProcessMoveEvent_002, TestSize.Level1)
754 {
755 CALL_TEST_DEBUG;
756 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
757 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
758 knuckleDynamicDrawMgr.pointCounter_ = 0;
759 pointerEvent->SetActionTime(200001);
760 knuckleDynamicDrawMgr.firstDownTime_ = 100000;
761
762 std::string imagePath = "/system/etc/multimodalinput/mouse_icon/Default.svg";
763 auto pixelMap = DecodeImageToPixelMap(imagePath);
764 ASSERT_NE(pixelMap, nullptr);
765 knuckleDynamicDrawMgr.glowTraceSystem_ =
766 std::make_shared<KnuckleGlowTraceSystem>(POINT_SYSTEM_SIZE, pixelMap, MAX_DIVERGENCE_NUM);
767 Rosen::Drawing::Point point = Rosen::Drawing::Point();
768 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
769
770 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawMgr.ProcessMoveEvent(pointerEvent));
771 EXPECT_FALSE(knuckleDynamicDrawMgr.isDrawing_);
772 }
773
774 /**
775 * @tc.name: KnuckleDynamicDrawingManagerTest_ProcessMoveEvent_003
776 * @tc.desc: Test ProcessMoveEvent
777 * @tc.type: Function
778 * @tc.require:
779 */
780 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_ProcessMoveEvent_003, TestSize.Level1)
781 {
782 CALL_TEST_DEBUG;
783 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
784 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
785 knuckleDynamicDrawMgr.pointCounter_ = 3;
786 pointerEvent->SetActionTime(200001);
787 knuckleDynamicDrawMgr.firstDownTime_ = 100000;
788
789 std::string imagePath = "/system/etc/multimodalinput/mouse_icon/Default.svg";
790 auto pixelMap = DecodeImageToPixelMap(imagePath);
791 ASSERT_NE(pixelMap, nullptr);
792 knuckleDynamicDrawMgr.glowTraceSystem_ =
793 std::make_shared<KnuckleGlowTraceSystem>(POINT_SYSTEM_SIZE, pixelMap, MAX_DIVERGENCE_NUM);
794 Rosen::Drawing::Point point = Rosen::Drawing::Point();
795 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
796 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
797 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
798 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
799
800 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawMgr.ProcessMoveEvent(pointerEvent));
801 EXPECT_EQ(knuckleDynamicDrawMgr.pointCounter_, 1);
802 }
803
804 /**
805 * @tc.name: KnuckleDynamicDrawingManagerTest_ProcessMoveEvent_004
806 * @tc.desc: Test ProcessMoveEvent
807 * @tc.type: Function
808 * @tc.require:
809 */
810 HWTEST_F(KnuckleDynamicDrawingManagerTest, KnuckleDynamicDrawingManagerTest_ProcessMoveEvent_004, TestSize.Level1)
811 {
812 CALL_TEST_DEBUG;
813 KnuckleDynamicDrawingManager knuckleDynamicDrawMgr;
814 std::shared_ptr<PointerEvent> pointerEvent = PointerEvent::Create();
815 knuckleDynamicDrawMgr.pointCounter_ = 3;
816 pointerEvent->SetActionTime(100001);
817 knuckleDynamicDrawMgr.firstDownTime_ = 100000;
818
819 std::string imagePath = "/system/etc/multimodalinput/mouse_icon/Default.svg";
820 auto pixelMap = DecodeImageToPixelMap(imagePath);
821 ASSERT_NE(pixelMap, nullptr);
822 knuckleDynamicDrawMgr.glowTraceSystem_ =
823 std::make_shared<KnuckleGlowTraceSystem>(POINT_SYSTEM_SIZE, pixelMap, MAX_DIVERGENCE_NUM);
824 Rosen::Drawing::Point point = Rosen::Drawing::Point();
825 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
826 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
827 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
828 knuckleDynamicDrawMgr.traceControlPoints_.push_back(point);
829
830 EXPECT_NO_FATAL_FAILURE(knuckleDynamicDrawMgr.ProcessMoveEvent(pointerEvent));
831 EXPECT_EQ(knuckleDynamicDrawMgr.pointCounter_, 1);
832 }
833 } // namespace MMI
834 } // namespace OHOS