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