• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef TEST_UNITTEST_CORE_GESTURES_RECOGNIZER_GROUP_TEST_UTILS_H
17 #define TEST_UNITTEST_CORE_GESTURES_RECOGNIZER_GROUP_TEST_UTILS_H
18 
19 #include <iostream>
20 #include "test/unittest/core/gestures/recognizer_test_utils.h"
21 
22 #include "core/components_ng/gestures/recognizers/click_recognizer.h"
23 #include "core/components_ng/gestures/recognizers/exclusive_recognizer.h"
24 #include "core/components_ng/gestures/recognizers/long_press_recognizer.h"
25 #include "core/components_ng/gestures/recognizers/parallel_recognizer.h"
26 #include "core/components_ng/gestures/recognizers/pinch_recognizer.h"
27 #include "core/components_ng/gestures/recognizers/rotation_recognizer.h"
28 #include "core/components_ng/gestures/recognizers/sequenced_recognizer.h"
29 #include "core/components_ng/gestures/recognizers/swipe_recognizer.h"
30 
31 namespace OHOS::Ace::NG {
32 namespace {
CreateClickRecognizerWithParam(int32_t fingers,int32_t count)33 RefPtr<ClickRecognizer> CreateClickRecognizerWithParam(int32_t fingers, int32_t count)
34 {
35     auto clickRecognizer = AceType::MakeRefPtr<ClickRecognizer>(fingers, count);
36     return clickRecognizer;
37 }
38 
CreateLongPressRecognizerWithParam(int32_t duration,int32_t fingers,bool repeat)39 RefPtr<LongPressRecognizer> CreateLongPressRecognizerWithParam(int32_t duration, int32_t fingers, bool repeat)
40 {
41     auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(duration, fingers, repeat);
42     return longPressRecognizer;
43 }
44 
CreatePanRecognizerWithParam(int32_t fingers,const PanDirection & direction,double distance)45 RefPtr<PanRecognizer> CreatePanRecognizerWithParam(int32_t fingers, const PanDirection& direction, double distance)
46 {
47     auto panRecognizer = AceType::MakeRefPtr<PanRecognizer>(fingers, direction, distance);
48     return panRecognizer;
49 }
50 
CreateSwipeRecognizerWithParam(int32_t fingers,const SwipeDirection & direction,double speed)51 RefPtr<SwipeRecognizer> CreateSwipeRecognizerWithParam(int32_t fingers, const SwipeDirection& direction, double speed)
52 {
53     auto swipeRecognizer = AceType::MakeRefPtr<SwipeRecognizer>(fingers, direction, speed);
54     return swipeRecognizer;
55 }
56 
CreatePinchRecognizerWithParam(int32_t fingers,double distance)57 RefPtr<PinchRecognizer> CreatePinchRecognizerWithParam(int32_t fingers, double distance)
58 {
59     auto pinchRecognizer = AceType::MakeRefPtr<PinchRecognizer>(fingers, distance);
60     return pinchRecognizer;
61 }
62 
CreateRotationRecognizerWithParam(int32_t fingers,double angle)63 RefPtr<RotationRecognizer> CreateRotationRecognizerWithParam(int32_t fingers, double angle)
64 {
65     auto rotationRecognizer = AceType::MakeRefPtr<RotationRecognizer>(fingers, angle);
66     return rotationRecognizer;
67 }
68 
CreateExclusiveRecognizerWithParam(const std::vector<RefPtr<NGGestureRecognizer>> & recognizers)69 RefPtr<ExclusiveRecognizer> CreateExclusiveRecognizerWithParam(
70     const std::vector<RefPtr<NGGestureRecognizer>>& recognizers)
71 {
72     auto exclusiveRecognizer = AceType::MakeRefPtr<ExclusiveRecognizer>(recognizers);
73     return exclusiveRecognizer;
74 }
75 
DispatchSingleClickEvent(const RefPtr<NGGestureRecognizer> & recognizer)76 void DispatchSingleClickEvent(const RefPtr<NGGestureRecognizer>& recognizer)
77 {
78     recognizer->BeginReferee(0, true);
79     TouchEvent downEvent;
80     downEvent.SetId(0).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f);
81     recognizer->HandleEvent(downEvent);
82     TouchEvent upEvent;
83     upEvent.SetId(0).SetType(TouchType::UP).SetX(100.0f).SetY(100.0f);
84     recognizer->HandleEvent(upEvent);
85 }
86 
DispatchDoubleFingerSingleClickEvent(const RefPtr<NGGestureRecognizer> & recognizer)87 void DispatchDoubleFingerSingleClickEvent(const RefPtr<NGGestureRecognizer>& recognizer)
88 {
89     recognizer->BeginReferee(0, true);
90     recognizer->BeginReferee(1, true);
91     TouchEvent downEventOne;
92     downEventOne.SetId(0).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f);
93     recognizer->HandleEvent(downEventOne);
94     TouchEvent downEventTwo;
95     downEventTwo.SetId(1).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f);
96     recognizer->HandleEvent(downEventTwo);
97     TouchEvent upEventOne;
98     upEventOne.SetId(0).SetType(TouchType::UP).SetX(100.0f).SetY(100.0f);
99     recognizer->HandleEvent(upEventOne);
100     TouchEvent upEventTwo;
101     upEventTwo.SetId(1).SetType(TouchType::UP).SetX(100.0f).SetY(100.0f);
102     recognizer->HandleEvent(upEventTwo);
103 }
104 
DispatchPanEvent(const RefPtr<NGGestureRecognizer> & recognizer)105 void DispatchPanEvent(const RefPtr<NGGestureRecognizer>& recognizer)
106 {
107     recognizer->BeginReferee(0, true);
108     TouchEvent downEventOne;
109     downEventOne.SetId(0).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f);
110     recognizer->HandleEvent(downEventOne);
111     for (int32_t num = 1; num <= STEP_COUNT; num++) {
112         TouchEvent moveEvent;
113         moveEvent.SetId(0).SetType(TouchType::MOVE).SetX(100.0f + static_cast<float>(num) * 10.0f).SetY(100.0f);
114         recognizer->HandleEvent(moveEvent);
115     }
116 }
117 
DispatchSwipeEvent(const RefPtr<NGGestureRecognizer> & recognizer)118 void DispatchSwipeEvent(const RefPtr<NGGestureRecognizer>& recognizer)
119 {
120     recognizer->BeginReferee(0, true);
121     TouchEvent downEventOne;
122     std::chrono::nanoseconds nanoseconds(1000);
123     downEventOne.SetId(0).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f).SetTime(TimeStamp(nanoseconds));
124     ;
125     recognizer->HandleEvent(downEventOne);
126     auto timeStep = 1000 * 1000 * 1000;
127     TimeStamp lastTime;
128     for (int32_t num = 1; num <= STEP_COUNT; num++) {
129         TouchEvent moveEvent;
130         std::chrono::nanoseconds moveNanoseconds(static_cast<int64_t>(1000 + num * timeStep));
131         moveEvent.SetId(0)
132             .SetType(TouchType::MOVE)
133             .SetX(100.0f + static_cast<float>(num) * 100.0f)
134             .SetY(100.0f)
135             .SetTime(TimeStamp(moveNanoseconds));
136         recognizer->HandleEvent(moveEvent);
137         lastTime = TimeStamp(moveNanoseconds);
138     }
139     TouchEvent upEventOne;
140     upEventOne.SetId(0).SetType(TouchType::UP).SetX(600.0f).SetY(100.0f).SetTime(lastTime);
141     recognizer->HandleEvent(upEventOne);
142 }
143 
DispatchPinchEvent(const RefPtr<NGGestureRecognizer> & recognizer)144 void DispatchPinchEvent(const RefPtr<NGGestureRecognizer>& recognizer)
145 {
146     recognizer->BeginReferee(0, true);
147     recognizer->BeginReferee(1, true);
148     TouchEvent downEventOne;
149     downEventOne.SetId(0).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f);
150     recognizer->HandleEvent(downEventOne);
151     TouchEvent downEventTwo;
152     downEventTwo.SetId(1).SetType(TouchType::DOWN).SetX(300.0f).SetY(100.0f);
153     recognizer->HandleEvent(downEventTwo);
154     for (int32_t num = 1; num <= STEP_COUNT; num++) {
155         TouchEvent moveEventOne;
156         moveEventOne.SetId(0).SetType(TouchType::MOVE).SetX(100.0f + static_cast<float>(num) * 10.0f).SetY(100.0f);
157         recognizer->HandleEvent(moveEventOne);
158         TouchEvent moveEventTwo;
159         moveEventTwo.SetId(1).SetType(TouchType::MOVE).SetX(300.0f - static_cast<float>(num) * 10.0f).SetY(100.0f);
160         recognizer->HandleEvent(moveEventTwo);
161     }
162     TouchEvent upEventOne;
163     upEventOne.SetId(0).SetType(TouchType::UP).SetX(150.0f).SetY(100.0f);
164     recognizer->HandleEvent(upEventOne);
165     TouchEvent upEventTwo;
166     upEventTwo.SetId(1).SetType(TouchType::UP).SetX(250.0f).SetY(100.0f);
167     recognizer->HandleEvent(upEventTwo);
168 }
169 
DispatchRotationEvent(const RefPtr<NGGestureRecognizer> & recognizer)170 void DispatchRotationEvent(const RefPtr<NGGestureRecognizer>& recognizer)
171 {
172     recognizer->BeginReferee(0, true);
173     recognizer->BeginReferee(1, true);
174     TouchEvent downEventOne;
175     downEventOne.SetId(0).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f);
176     recognizer->HandleEvent(downEventOne);
177     TouchEvent downEventTwo;
178     downEventTwo.SetId(1).SetType(TouchType::DOWN).SetX(300.0f).SetY(100.0f);
179     recognizer->HandleEvent(downEventTwo);
180     for (int32_t num = 1; num <= STEP_COUNT; num++) {
181         TouchEvent moveEventOne;
182         moveEventOne.SetId(0)
183             .SetType(TouchType::MOVE)
184             .SetX(100.0f + static_cast<float>(num) * 20.0f)
185             .SetY(100.0f + static_cast<float>(num) * 20.0f);
186         recognizer->HandleEvent(moveEventOne);
187         TouchEvent moveEventTwo;
188         moveEventTwo.SetId(1)
189             .SetType(TouchType::MOVE)
190             .SetX(300.0f - static_cast<float>(num) * 20.0f)
191             .SetY(100.0f - static_cast<float>(num) * 20.0f);
192         recognizer->HandleEvent(moveEventTwo);
193     }
194     TouchEvent upEventOne;
195     upEventOne.SetId(0).SetType(TouchType::UP).SetX(200.0f).SetY(200.0f);
196     recognizer->HandleEvent(upEventOne);
197     TouchEvent upEventTwo;
198     upEventTwo.SetId(1).SetType(TouchType::UP).SetX(200.0f).SetY(0.0f);
199     recognizer->HandleEvent(upEventTwo);
200 }
201 
DispatchSingleDownSingleMoveEvent(const RefPtr<NGGestureRecognizer> & recognizer)202 void DispatchSingleDownSingleMoveEvent(const RefPtr<NGGestureRecognizer>& recognizer)
203 {
204     recognizer->BeginReferee(0, true);
205     recognizer->BeginReferee(1, true);
206     TouchEvent downEventOne;
207     downEventOne.SetId(0).SetType(TouchType::DOWN).SetX(100.0f).SetY(100.0f);
208     recognizer->HandleEvent(downEventOne);
209     TouchEvent downEventTwo;
210     downEventTwo.SetId(1).SetType(TouchType::DOWN).SetX(300.0f).SetY(100.0f);
211     recognizer->HandleEvent(downEventTwo);
212     for (int32_t num = 1; num <= STEP_COUNT; num++) {
213         TouchEvent moveEventTwo;
214         moveEventTwo.SetId(1).SetType(TouchType::MOVE).SetX(300.0f + static_cast<float>(num) * 20.0f).SetY(100.0f);
215         recognizer->HandleEvent(moveEventTwo);
216     }
217 }
218 
219 } // namespace
220 
221 } // namespace OHOS::Ace::NG
222 
223 #endif // TEST_UNITTEST_CORE_GESTURES_RECOGNIZER_GROUP_TEST_UTILS_H