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