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