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