1 /*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17
18 #include "display_manager.h"
19 #include "drag_controller.h"
20 #include "window_helper.h"
21 #include "window_inner_manager.h"
22 #include "window_manager_service.h"
23
24 using namespace testing;
25 using namespace testing::ext;
26
27 namespace OHOS {
28 namespace Rosen {
29 class DragControllerTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 void SetUp() override;
34 void TearDown() override;
35 private:
36 static sptr<MoveDragController> moveDragController_;
37 static std::shared_ptr<MMI::IInputEventConsumer> inputListener_;
38 };
39
40 sptr<MoveDragController> DragControllerTest::moveDragController_ = nullptr;
41 std::shared_ptr<MMI::IInputEventConsumer> DragControllerTest::inputListener_ = nullptr;
42
SetUpTestCase()43 void DragControllerTest::SetUpTestCase()
44 {
45 WindowInnerManager::GetInstance().Init();
46 moveDragController_ = WindowInnerManager::GetInstance().moveDragController_;
47
48 auto display = DisplayManager::GetInstance().GetDefaultDisplay();
49 ASSERT_TRUE((display != nullptr));
50 sptr<DisplayInfo> displayInfo = display->GetDisplayInfo();
51 ASSERT_TRUE((displayInfo != nullptr));
52 ASSERT_TRUE((display != nullptr));
53 ASSERT_TRUE((display->GetDisplayInfo() != nullptr));
54 ASSERT_TRUE(moveDragController_);
55 inputListener_ = moveDragController_->inputListener_;
56 ASSERT_TRUE(inputListener_);
57 }
58
TearDownTestCase()59 void DragControllerTest::TearDownTestCase()
60 {
61 moveDragController_ = nullptr;
62 inputListener_ = nullptr;
63 WindowInnerManager::GetInstance().Stop();
64 }
65
SetUp()66 void DragControllerTest::SetUp()
67 {
68 }
69
TearDown()70 void DragControllerTest::TearDown()
71 {
72 }
73
74 namespace {
75 /**
76 * @tc.name: OnInputEvent01
77 * @tc.desc: OnInputEven01, keyEvent
78 * @tc.type: FUNC
79 */
80 HWTEST_F(DragControllerTest, OnInputEvent01, Function | SmallTest | Level2)
81 {
82 ASSERT_TRUE(inputListener_);
83 std::shared_ptr<MMI::KeyEvent> keyEvent;
84 inputListener_->OnInputEvent(keyEvent);
85 keyEvent = MMI::KeyEvent::Create();
86 inputListener_->OnInputEvent(keyEvent);
87 }
88
89 /**
90 * @tc.name: OnInputEvent02
91 * @tc.desc: OnInputEvent02, axisEvent
92 * @tc.type: FUNC
93 */
94 HWTEST_F(DragControllerTest, OnInputEvent02, Function | SmallTest | Level2)
95 {
96 ASSERT_TRUE(inputListener_);
97 std::shared_ptr<MMI::AxisEvent> axisEvent;
98 inputListener_->OnInputEvent(axisEvent);
99 axisEvent = MMI::AxisEvent::Create();
100 inputListener_->OnInputEvent(axisEvent);
101 }
102
103 /**
104 * @tc.name: OnInputEvent03
105 * @tc.desc: OnInputEvent03, pointerEvent
106 * @tc.type: FUNC
107 */
108 HWTEST_F(DragControllerTest, OnInputEvent03, Function | SmallTest | Level2)
109 {
110 ASSERT_TRUE(inputListener_);
111 std::shared_ptr<MMI::PointerEvent> pointerEvent;
112 inputListener_->OnInputEvent(pointerEvent);
113 pointerEvent = MMI::PointerEvent::Create();
114 ASSERT_TRUE(pointerEvent);
115 pointerEvent->SetAgentWindowId(INVALID_WINDOW_ID);
116 ASSERT_TRUE(moveDragController_);
117 moveDragController_->SetActiveWindowId(1);
118 inputListener_->OnInputEvent(pointerEvent);
119 }
120
121 /**
122 * @tc.name: Stop02
123 * @tc.desc: Stop02
124 * @tc.type: FUNC
125 */
126 HWTEST_F(DragControllerTest, Stop02, Function | SmallTest | Level2)
127 {
128 ASSERT_TRUE(moveDragController_);
129 moveDragController_->Init();
130 moveDragController_->Stop();
131 moveDragController_->Init();
132 }
133
134 /**
135 * @tc.name: HandleEndUpMovingOrDragging
136 * @tc.desc: HandleEndUpMovingOrDragging
137 * @tc.type: FUNC
138 */
139 HWTEST_F(DragControllerTest, HandleEndUpMovingOrDragging, Function | SmallTest | Level2)
140 {
141 ASSERT_TRUE(moveDragController_);
142 uint32_t windowId = 1; // windowId: 1
143 moveDragController_->HandleEndUpMovingOrDragging(windowId);
144 moveDragController_->activeWindowId_ = windowId;
145 moveDragController_->HandleEndUpMovingOrDragging(windowId);
146 }
147
148 /**
149 * @tc.name: HandleWindowRemovedOrDestroyed
150 * @tc.desc: HandleWindowRemovedOrDestroyed
151 * @tc.type: FUNC
152 */
153 HWTEST_F(DragControllerTest, HandleWindowRemovedOrDestroyed, Function | SmallTest | Level2)
154 {
155 ASSERT_TRUE(moveDragController_);
156 uint32_t windowId = 5; // windowId: 5
157 moveDragController_->HandleWindowRemovedOrDestroyed(windowId);
158 moveDragController_->moveDragProperty_ = new MoveDragProperty();
159 moveDragController_->HandleWindowRemovedOrDestroyed(windowId);
160 moveDragController_->moveDragProperty_->startMoveFlag_ = true;
161 moveDragController_->HandleWindowRemovedOrDestroyed(windowId);
162 moveDragController_->moveDragProperty_->startMoveFlag_ = false;
163 moveDragController_->moveDragProperty_->startDragFlag_ = true;
164 moveDragController_->HandleWindowRemovedOrDestroyed(windowId);
165 moveDragController_->moveDragProperty_->startMoveFlag_ = true;
166 moveDragController_->HandleWindowRemovedOrDestroyed(windowId);
167 moveDragController_->moveDragProperty_ = nullptr;
168 }
169
170 /**
171 * @tc.name: ConvertPointerPosToDisplayGroupPos
172 * @tc.desc: ConvertPointerPosToDisplayGroupPos
173 * @tc.type: FUNC
174 */
175 HWTEST_F(DragControllerTest, ConvertPointerPosToDisplayGroupPos, Function | SmallTest | Level2)
176 {
177 ASSERT_TRUE(moveDragController_);
178
179 auto displayInfo = new DisplayInfo();
180 displayInfo->SetDisplayId(0);
181 displayInfo->SetWidth(720); // displayWidth: 720
182 displayInfo->SetHeight(1280); // displayHeight: 1280
183 displayInfo->SetOffsetX(0);
184 displayInfo->SetOffsetY(0);
185 DisplayGroupInfo::GetInstance().AddDisplayInfo(displayInfo);
186
187 int32_t posX = 0;
188 int32_t posY = 0;
189 moveDragController_->ConvertPointerPosToDisplayGroupPos(0, posX, posY);
190
191 moveDragController_->ConvertPointerPosToDisplayGroupPos(1, posX, posY);
192 moveDragController_->ConvertPointerPosToDisplayGroupPos(0, posX, posY);
193 DisplayGroupInfo::GetInstance().RemoveDisplayInfo(0);
194 }
195
196 /**
197 * @tc.name: ConsumePointerEvent
198 * @tc.desc: ConsumePointerEvent
199 * @tc.type: FUNC
200 */
201 HWTEST_F(DragControllerTest, ConsumePointerEvent, Function | SmallTest | Level2)
202 {
203 ASSERT_TRUE(moveDragController_);
204 std::shared_ptr<MMI::PointerEvent> pointerEvent;
205 moveDragController_->ConsumePointerEvent(pointerEvent);
206 pointerEvent = MMI::PointerEvent::Create();
207 ASSERT_TRUE(pointerEvent);
208 pointerEvent->SetAgentWindowId(1);
209 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_CANCEL);
210 moveDragController_->ConsumePointerEvent(pointerEvent);
211 }
212
213 /**
214 * @tc.name: OnReceiveVsync
215 * @tc.desc: OnReceiveVsync
216 * @tc.type: FUNC
217 */
218 HWTEST_F(DragControllerTest, OnReceiveVsync, Function | SmallTest | Level2)
219 {
220 ASSERT_TRUE(moveDragController_);
221 std::shared_ptr<MMI::PointerEvent> pointerEvent = MMI::PointerEvent::Create();
222 ASSERT_TRUE(pointerEvent);
223 moveDragController_->OnReceiveVsync(0);
224 moveDragController_->moveEvent_ = pointerEvent;
225 moveDragController_->OnReceiveVsync(0);
226 }
227
228 /**
229 * @tc.name: GetHotZoneRect
230 * @tc.desc: GetHotZoneRect
231 * @tc.type: FUNC
232 */
233 HWTEST_F(DragControllerTest, GetHotZoneRect, Function | SmallTest | Level2)
234 {
235 ASSERT_TRUE(moveDragController_);
236
237 auto displayInfo = new DisplayInfo();
238 displayInfo->SetDisplayId(0);
239 displayInfo->SetWidth(720); // displayWidth: 720
240 displayInfo->SetHeight(1280); // displayHeight: 1280
241 displayInfo->SetOffsetX(0);
242 displayInfo->SetOffsetY(0);
243 DisplayGroupInfo::GetInstance().AddDisplayInfo(displayInfo);
244 moveDragController_->moveDragProperty_ = new MoveDragProperty();
245 moveDragController_->moveDragProperty_->targetDisplayId_ = 0;
246 moveDragController_->moveDragProperty_->startRectExceptCorner_ = { 0, 0, 40, 40 };
247
248 moveDragController_->moveDragProperty_->startPointPosX_ = 20; // startPointPosX: 20
249 moveDragController_->moveDragProperty_->startPointPosY_ = 20; // startPointPosY: 20
250 moveDragController_->GetHotZoneRect();
251
252 moveDragController_->moveDragProperty_->startPointPosX_ = -1; // startPointPosX: -1
253 moveDragController_->moveDragProperty_->startPointPosY_ = -1; // startPointPosY: -1
254 moveDragController_->GetHotZoneRect();
255
256 moveDragController_->moveDragProperty_->startPointPosX_ = -1; // startPointPosX: -1
257 moveDragController_->moveDragProperty_->startPointPosY_ = 20; // startPointPosY: 20
258 moveDragController_->GetHotZoneRect();
259
260 moveDragController_->moveDragProperty_->startPointPosX_ = 41; // startPointPosX: 41
261 moveDragController_->moveDragProperty_->startPointPosY_ = 20; // startPointPosY: 20
262 moveDragController_->GetHotZoneRect();
263
264 moveDragController_->moveDragProperty_->startPointPosX_ = 20; // startPointPosX: 20
265 moveDragController_->moveDragProperty_->startPointPosY_ = -1; // startPointPosY: -1
266 moveDragController_->GetHotZoneRect();
267
268 moveDragController_->moveDragProperty_->startPointPosX_ = 20; // startPointPosX: 20
269 moveDragController_->moveDragProperty_->startPointPosY_ = 41; // startPointPosY: 41
270 moveDragController_->GetHotZoneRect();
271
272 moveDragController_->moveDragProperty_->startPointPosX_ = 41; // startPointPosX: 41
273 moveDragController_->moveDragProperty_->startPointPosY_ = 41; // startPointPosY: 41
274 moveDragController_->GetHotZoneRect();
275 moveDragController_->moveDragProperty_ = nullptr;
276 }
277
278 /**
279 * @tc.name: HandleDragEvent01
280 * @tc.desc: HandleDragEvent01
281 * @tc.type: FUNC
282 */
283 HWTEST_F(DragControllerTest, HandleDragEvent01, Function | SmallTest | Level2)
284 {
285 ASSERT_TRUE(moveDragController_);
286 int32_t posX = 0;
287 int32_t posY = 0;
288 int32_t pointId = 0;
289 int32_t sourceType = 0;
290 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
291
292 moveDragController_->moveDragProperty_ = new MoveDragProperty();
293 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
294
295 moveDragController_->moveDragProperty_->startDragFlag_ = true;
296 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
297
298 pointId = 1;
299 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
300
301 pointId = 0;
302 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
303
304 sourceType = 1;
305 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
306
307 sourceType = 0;
308 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
309
310 moveDragController_->moveDragProperty_ = nullptr;
311 }
312
313 /**
314 * @tc.name: HandleDragEvent02
315 * @tc.desc: HandleDragEvent02
316 * @tc.type: FUNC
317 */
318 HWTEST_F(DragControllerTest, HandleDragEvent02, Function | SmallTest | Level2)
319 {
320 ASSERT_TRUE(moveDragController_);
321 int32_t posX = 0;
322 int32_t posY = 0;
323 int32_t pointId = 0;
324 int32_t sourceType = 0;
325 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
326
327 moveDragController_->moveDragProperty_ = new MoveDragProperty();
328 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
329
330 moveDragController_->moveDragProperty_->startDragFlag_ = true;
331 moveDragController_->moveDragProperty_->targetDisplayId_ = 0;
332 moveDragController_->moveDragProperty_->startRectExceptCorner_ = { 0, 0, 40, 40 }; // hotZone: 0, 0, 40, 40
333
334 moveDragController_->moveDragProperty_->startPointPosX_ = -1; // startPointPosX: -1
335 moveDragController_->moveDragProperty_->startPointPosY_ = -1; // startPointPosY: -1
336 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
337
338 moveDragController_->moveDragProperty_->startPointPosX_ = 45; // startPointPosX: 45
339 moveDragController_->moveDragProperty_->startPointPosY_ = -1; // startPointPosY: -1
340 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
341
342 moveDragController_->moveDragProperty_->startPointPosX_ = -1; // startPointPosX: -1
343 moveDragController_->moveDragProperty_->startPointPosY_ = 45; // startPointPosY: 45
344 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
345
346 moveDragController_->moveDragProperty_->startPointPosX_ = 45; // startPointPosX: 45
347 moveDragController_->moveDragProperty_->startPointPosY_ = 45; // startPointPosY: 45
348 moveDragController_->HandleDragEvent(0, posX, posY, pointId, sourceType);
349
350 moveDragController_->moveDragProperty_ = nullptr;
351 }
352
353 /**
354 * @tc.name: HandleMoveEvent
355 * @tc.desc: HandleMoveEvent
356 * @tc.type: FUNC
357 */
358 HWTEST_F(DragControllerTest, HandleMoveEvent, Function | SmallTest | Level2)
359 {
360 ASSERT_TRUE(moveDragController_);
361 int32_t posX = 0;
362 int32_t posY = 0;
363 int32_t pointId = 0;
364 int32_t sourceType = 0;
365 moveDragController_->HandleMoveEvent(0, posX, posY, pointId, sourceType);
366
367 moveDragController_->moveDragProperty_ = new MoveDragProperty();
368 moveDragController_->HandleMoveEvent(0, posX, posY, pointId, sourceType);
369
370 moveDragController_->moveDragProperty_->startMoveFlag_ = true;
371 moveDragController_->HandleMoveEvent(0, posX, posY, pointId, sourceType);
372
373 pointId = 1;
374 moveDragController_->HandleMoveEvent(0, posX, posY, pointId, sourceType);
375
376 pointId = 0;
377 moveDragController_->HandleMoveEvent(0, posX, posY, pointId, sourceType);
378
379 sourceType = 1;
380 moveDragController_->HandleMoveEvent(0, posX, posY, pointId, sourceType);
381
382 sourceType = 0;
383 moveDragController_->HandleMoveEvent(0, posX, posY, pointId, sourceType);
384
385 moveDragController_->moveDragProperty_ = nullptr;
386 }
387
388 /**
389 * @tc.name: HandlePointerEvent
390 * @tc.desc: HandlePointerEvent
391 * @tc.type: FUNC
392 */
393 HWTEST_F(DragControllerTest, HandlePointerEvent, Function | SmallTest | Level2)
394 {
395 ASSERT_TRUE(moveDragController_);
396 std::shared_ptr<MMI::PointerEvent> pointerEvent = MMI::PointerEvent::Create();
397 ASSERT_TRUE(pointerEvent);
398 pointerEvent->SetAgentWindowId(1);
399 MMI::PointerEvent::PointerItem pointerItem;
400 pointerItem.SetPointerId(0);
401 pointerItem.SetDisplayX(0);
402 pointerItem.SetDisplayY(0);
403 pointerEvent->AddPointerItem(pointerItem);
404 moveDragController_->HandlePointerEvent(pointerEvent);
405
406 pointerEvent->SetPointerId(0);
407 pointerEvent->SetSourceType(MMI::PointerEvent::SOURCE_TYPE_MOUSE);
408 pointerEvent->SetButtonId(MMI::PointerEvent::MOUSE_BUTTON_LEFT);
409 moveDragController_->HandlePointerEvent(pointerEvent);
410
411 moveDragController_->windowProperty_ = new WindowProperty();
412 moveDragController_->moveDragProperty_ = new MoveDragProperty();
413 moveDragController_->HandlePointerEvent(pointerEvent);
414
415 pointerEvent->SetSourceType(MMI::PointerEvent::SOURCE_TYPE_MOUSE);
416 pointerEvent->SetButtonId(MMI::PointerEvent::MOUSE_BUTTON_RIGHT);
417 moveDragController_->HandlePointerEvent(pointerEvent);
418
419 pointerEvent->SetButtonId(MMI::PointerEvent::MOUSE_BUTTON_LEFT);
420 moveDragController_->HandlePointerEvent(pointerEvent);
421
422 pointerEvent->SetSourceType(MMI::PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
423 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_DOWN);
424 moveDragController_->HandlePointerEvent(pointerEvent);
425
426 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_BUTTON_DOWN);
427 moveDragController_->HandlePointerEvent(pointerEvent);
428
429 moveDragController_->moveDragProperty_->startPointerId_ = 1;
430 moveDragController_->moveDragProperty_->sourceType_ = 2; // sourceType: 2
431 moveDragController_->HandlePointerEvent(pointerEvent);
432
433 moveDragController_->moveDragProperty_->startPointerId_ = 0;
434 moveDragController_->moveDragProperty_->sourceType_ = 2; // sourceType: 2
435 moveDragController_->HandlePointerEvent(pointerEvent);
436
437 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_MOVE);
438 moveDragController_->HandlePointerEvent(pointerEvent);
439
440 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_UP);
441 moveDragController_->HandlePointerEvent(pointerEvent);
442
443 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_BUTTON_UP);
444 moveDragController_->HandlePointerEvent(pointerEvent);
445
446 pointerEvent->SetPointerAction(MMI::PointerEvent::POINTER_ACTION_CANCEL);
447 moveDragController_->HandlePointerEvent(pointerEvent);
448
449 moveDragController_->windowProperty_ = nullptr;
450 moveDragController_->moveDragProperty_ = nullptr;
451 }
452 }
453 } // namespace Rosen
454 } // namespace OHOS
455