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 #include "test/unittest/core/gestures/gestures_common_test_ng.h"
16
17 using namespace testing;
18 using namespace testing::ext;
19
20 namespace OHOS::Ace::NG {
21 class RecognizerGroupTestNg : public GesturesCommonTestNg {
22 public:
23 static void SetUpTestSuite();
24 static void TearDownTestSuite();
25 };
26
SetUpTestSuite()27 void RecognizerGroupTestNg::SetUpTestSuite()
28 {
29 MockPipelineContext::SetUp();
30 }
31
TearDownTestSuite()32 void RecognizerGroupTestNg::TearDownTestSuite()
33 {
34 MockPipelineContext::TearDown();
35 }
36
37 /**
38 * @tc.name: RecognizerGroupTest001
39 * @tc.desc: Test PinchRecognizer function: OnAccepted OnRejected
40 * @tc.type: FUNC
41 */
42 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest001, TestSize.Level1)
43 {
44 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
45 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
46 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
47 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
48 auto recognizer = excluRecognizer.CreateGestureFromRecognizer();
49 if (recognizer) {
50 SUCCEED();
51 }
52 }
53
54 /**
55 * @tc.name: RecognizerGroupTest003
56 * @tc.desc: Test PinchRecognizer function: OnAccepted OnRejected
57 * @tc.type: FUNC
58 */
59 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest003, TestSize.Level1)
60 {
61 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
62 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
63 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
64 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
65 Offset coordinateOffset;
66 std::string test = "test";
67 int32_t nodeid = 1;
68 auto nodePtr = SelectOverlayNode::GetFrameNode(test, nodeid);
69 auto component = AceType::MakeRefPtr<TargetComponent>();
70 PanDirection panDirection;
71 panDirection.type = PanDirection::VERTICAL;
72 auto panRecognizer = AceType::MakeRefPtr<PanRecognizer>(1, panDirection, 0);
73 std::vector<RefPtr<NGGestureRecognizer>> recognizers { panRecognizer };
74 auto testRecognizer = AceType::MakeRefPtr<SequencedRecognizer>(recognizers);
75 auto gesture = AceType::MakeRefPtr<NG::GestureReferee>();
76 auto Ngg = AceType::DynamicCast<NG::NGGestureRecognizer>(testRecognizer);
77 excluRecognizer.recognizers_.push_back(Ngg);
__anon1ed9cfde0102() 78 GetEventTargetImpl getEventTargetImpl = []() -> std::optional<EventTarget> {
79 EventTarget target;
80 return target;
81 };
82 excluRecognizer.SetRecognizerInfoRecursively(coordinateOffset, nodePtr, component, getEventTargetImpl);
83 SUCCEED();
84 }
85
86 /**
87 * @tc.name: RecognizerGroupTest004
88 * @tc.desc: Test AddHittedRecognizerType
89 * @tc.type: FUNC
90 */
91 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest004, TestSize.Level1)
92 {
93 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
94 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
95 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
96 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
97 TouchTestResultInfo tesultInfo;
98 tesultInfo.depth = 1;
99 std::list<TouchTestResultInfo> testList;
100 testList.push_back(tesultInfo);
101 std::map<std::string, std::list<TouchTestResultInfo>> tetMap;
102 tetMap["test"] = testList;
103 excluRecognizer.AddHittedRecognizerType(tetMap);
104 SUCCEED();
105 }
106
107 /**
108 * @tc.name: RecognizerGroupTest005
109 * @tc.desc: Test CleanRecognizerState
110 * @tc.type: FUNC
111 */
112 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest005, TestSize.Level1)
113 {
114 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
115 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
116 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
117 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
118 excluRecognizer.refereeState_ = RefereeState::SUCCEED;
119 excluRecognizer.currentFingers_ = 0;
120 excluRecognizer.RecognizerGroup::CleanRecognizerState();
121 SUCCEED();
122 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers1;
123 auto longPressRecognizer1 = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
124 longPressRecognizers1.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer1));
125 ExclusiveRecognizer excluRecognizer1(longPressRecognizers1);
126 excluRecognizer1.refereeState_ = RefereeState::FAIL;
127 excluRecognizer1.currentFingers_ = 0;
128 excluRecognizer1.RecognizerGroup::CleanRecognizerState();
129 SUCCEED();
130 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers2;
131 auto longPressRecognizer2 = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
132 longPressRecognizers2.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer2));
133 ExclusiveRecognizer excluRecognizer2(longPressRecognizers2);
134 excluRecognizer2.refereeState_ = RefereeState::DETECTING;
135 excluRecognizer2.currentFingers_ = 0;
136 excluRecognizer2.RecognizerGroup::CleanRecognizerState();
137 SUCCEED();
138 }
139
140 /**
141 * @tc.name: RecognizerGroupTest0052
142 * @tc.desc: Test CleanRecognizerState
143 * @tc.type: FUNC
144 */
145 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest0052, TestSize.Level1)
146 {
147 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers3;
148 auto longPressRecognizer3 = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
149 longPressRecognizers3.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer3));
150 ExclusiveRecognizer excluRecognizer3(longPressRecognizers3);
151 excluRecognizer3.refereeState_ = RefereeState::DETECTING;
152 excluRecognizer3.currentFingers_ = 0;
153 excluRecognizer3.RecognizerGroup::CleanRecognizerState();
154 SUCCEED();
155 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers4;
156 auto longPressRecognizer4 = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
157 longPressRecognizers4.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer4));
158 ExclusiveRecognizer excluRecognizer4(longPressRecognizers4);
159 excluRecognizer4.refereeState_ = RefereeState::DETECTING;
160 excluRecognizer4.currentFingers_ = 1;
161 excluRecognizer4.RecognizerGroup::CleanRecognizerState();
162 SUCCEED();
163 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers5;
164 auto longPressRecognizer5 = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
165 longPressRecognizers5.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer5));
166 ExclusiveRecognizer excluRecognizer5(longPressRecognizers5);
167 excluRecognizer5.refereeState_ = RefereeState::DETECTING;
168 excluRecognizer5.currentFingers_ = 1;
169 excluRecognizer5.recognizers_.clear();
170 excluRecognizer5.RecognizerGroup::CleanRecognizerState();
171 SUCCEED();
172 }
173
174 /**
175 * @tc.name: RecognizerGroupTest006
176 * @tc.desc: Test CleanRecognizerState
177 * @tc.type: FUNC
178 */
179 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest006, TestSize.Level1)
180 {
181 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
182 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
183 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
184 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
185 auto recognizerTest = AceType::DynamicCast<RecognizerGroup>(&excluRecognizer);
186 recognizerTest->refereeState_ = RefereeState::READY;
187 auto result = recognizerTest->IsReady();
188 EXPECT_EQ(result, true);
189 }
190
191 /**
192 * @tc.name: RecognizerGroupTest007
193 * @tc.desc: Test CleanRecognizerState
194 * @tc.type: FUNC
195 */
196 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest007, TestSize.Level1)
197 {
198 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
199 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
200 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
201 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
202 auto recognizerTest = AceType::DynamicCast<RecognizerGroup>(&excluRecognizer);
203 recognizerTest->refereeState_ = RefereeState::DETECTING;
204 auto result = recognizerTest->IsReady();
205 EXPECT_EQ(result, false);
206 }
207
208 /**
209 * @tc.name: RecognizerGroupTest008
210 * @tc.desc: Test PinchRecognizer function: OnAccepted OnRejected
211 * @tc.type: FUNC
212 */
213 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest008, TestSize.Level1)
214 {
215 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
216 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
217 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
218 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
219 Offset coordinateOffset;
220 std::string test = "test";
221 int32_t nodeid = 1;
222 auto nodePtr = SelectOverlayNode::GetFrameNode(test, nodeid);
223 auto component = AceType::MakeRefPtr<TargetComponent>();
__anon1ed9cfde0202() 224 GetEventTargetImpl getEventTargetImpl = []() -> std::optional<EventTarget> {
225 EventTarget target;
226 return target;
227 };
228 RefPtr<ClickRecognizer> clickRecognizerPtr = AceType::MakeRefPtr<ClickRecognizer>(FINGER_NUMBER, COUNT);
229 excluRecognizer.recognizers_.clear();
230 excluRecognizer.recognizers_.push_back(clickRecognizerPtr);
231 excluRecognizer.SetRecognizerInfoRecursively(coordinateOffset, nodePtr, component, getEventTargetImpl);
232 SUCCEED();
233 }
234
235 /**
236 * @tc.name: RecognizerGroupTest009
237 * @tc.desc: Test PinchRecognizer function: OnAccepted OnRejected
238 * @tc.type: FUNC
239 */
240 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest009, TestSize.Level1)
241 {
242 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
243 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
244 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
245 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
246 RefPtr<ClickRecognizer> clickRecognizerPtrNotSame = AceType::MakeRefPtr<ClickRecognizer>(FINGER_NUMBER, COUNT);
247 excluRecognizer.recognizers_.push_back(clickRecognizerPtrNotSame);
248 excluRecognizer.recognizers_.push_back(nullptr);
249 auto recognizer = excluRecognizer.CreateGestureFromRecognizer();
250 if (recognizer) {
251 SUCCEED();
252 }
253 }
254
255 /**
256 * @tc.name: RecognizerGroupTest010
257 * @tc.desc: Test AddHittedRecognizerType
258 * @tc.type: FUNC
259 */
260 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest010, TestSize.Level1)
261 {
262 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
263 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
264 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
265 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
266 TouchTestResultInfo tesultInfo;
267 tesultInfo.depth = 1;
268 std::list<TouchTestResultInfo> testList;
269 testList.push_back(tesultInfo);
270 std::map<std::string, std::list<TouchTestResultInfo>> tetMap;
271 tetMap["test"] = testList;
272 PanDirection panDirection;
273 panDirection.type = PanDirection::VERTICAL;
274 auto panRecognizer = AceType::MakeRefPtr<PanRecognizer>(1, panDirection, 0);
275 std::vector<RefPtr<NGGestureRecognizer>> recognizers { panRecognizer };
276 auto testRecognizer = AceType::MakeRefPtr<SequencedRecognizer>(recognizers);
277 auto gesture = AceType::MakeRefPtr<NG::GestureReferee>();
278 auto Ngg = AceType::DynamicCast<NG::NGGestureRecognizer>(testRecognizer);
279 RefPtr<FrameNode> FRAME_NODE_0 = FrameNode::CreateFrameNode("0", 0, AceType::MakeRefPtr<Pattern>());
280 Ngg->AttachFrameNode(FRAME_NODE_0);
281 excluRecognizer.recognizers_.push_back(Ngg);
282 excluRecognizer.AddHittedRecognizerType(tetMap);
283 SUCCEED();
284 }
285
286 /**
287 * @tc.name: RecognizerGroupTest011
288 * @tc.desc: Test CleanRecognizerState
289 * @tc.type: FUNC
290 */
291 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest011, TestSize.Level1)
292 {
293 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
294 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
295 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
296 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
297 auto recognizerTest = AceType::DynamicCast<RecognizerGroup>(&excluRecognizer);
298 recognizerTest->refereeState_ = RefereeState::READY;
299 PanDirection panDirection;
300 panDirection.type = PanDirection::VERTICAL;
301 auto panRecognizer = AceType::MakeRefPtr<PanRecognizer>(1, panDirection, 0);
302 std::vector<RefPtr<NGGestureRecognizer>> recognizers { panRecognizer };
303 auto testRecognizer = AceType::MakeRefPtr<SequencedRecognizer>(recognizers);
304 auto gesture = AceType::MakeRefPtr<NG::GestureReferee>();
305 auto Ngg = AceType::DynamicCast<NG::NGGestureRecognizer>(testRecognizer);
306 recognizerTest->recognizers_.push_back(Ngg);
307 auto result = recognizerTest->IsReady();
308 EXPECT_EQ(result, true);
309 }
310
311 /**
312 * @tc.name: RecognizerGroupTest012
313 * @tc.desc: Test CleanRecognizerState
314 * @tc.type: FUNC
315 */
316 HWTEST_F(RecognizerGroupTestNg, RecognizerGroupTest012, TestSize.Level1)
317 {
318 std::vector<RefPtr<NGGestureRecognizer>> longPressRecognizers;
319 auto longPressRecognizer = AceType::MakeRefPtr<LongPressRecognizer>(false, true);
320 longPressRecognizers.push_back(AceType::DynamicCast<NGGestureRecognizer>(longPressRecognizer));
321 ExclusiveRecognizer excluRecognizer(longPressRecognizers);
322 auto recognizerTest = AceType::DynamicCast<RecognizerGroup>(&excluRecognizer);
323 recognizerTest->refereeState_ = RefereeState::DETECTING;
324 PanDirection panDirection;
325 panDirection.type = PanDirection::VERTICAL;
326 auto panRecognizer = AceType::MakeRefPtr<PanRecognizer>(1, panDirection, 0);
327 std::vector<RefPtr<NGGestureRecognizer>> recognizers { panRecognizer };
328 auto testRecognizer = AceType::MakeRefPtr<SequencedRecognizer>(recognizers);
329 auto gesture = AceType::MakeRefPtr<NG::GestureReferee>();
330 auto Ngg = AceType::DynamicCast<NG::NGGestureRecognizer>(testRecognizer);
331 recognizerTest->recognizers_.push_back(Ngg);
332 auto result = recognizerTest->IsReady();
333 EXPECT_EQ(result, false);
334 }
335 }; // namespace OHOS::Ace::NG