• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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