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 "gtest/gtest.h"
16 #include "test/unittest/core/gestures/gestures_common_test_ng.h"
17
18 #include "core/components_ng/gestures/recognizers/click_recognizer.h"
19 #include "core/components_ng/gestures/recognizers/multi_fingers_recognizer.h"
20 #include "core/event/ace_events.h"
21
22 using namespace testing;
23 using namespace testing::ext;
24 namespace OHOS::Ace::NG {
25 class MultiFingersRecognizerTestNg : public testing::Test {
26 public:
27 static void SetUpTestSuite();
28 static void TearDownTestSuite();
29 };
30
SetUpTestSuite()31 void MultiFingersRecognizerTestNg::SetUpTestSuite()
32 {
33 MockPipelineContext::SetUp();
34 }
35
TearDownTestSuite()36 void MultiFingersRecognizerTestNg::TearDownTestSuite()
37 {
38 MockPipelineContext::TearDown();
39 }
40 /**
41 * @tc.name: Test001
42 * @tc.desc: Test InitGlobalValue
43 * @tc.type: FUNC
44 */
45 HWTEST_F(MultiFingersRecognizerTestNg, Test001, TestSize.Level1)
46 {
47 auto clicRecognizerFirst = new ClickRecognizer(5, 5);
48 auto clicRecognizerSecond = new ClickRecognizer(10, 5);
49 auto clicRecognizerThird = new ClickRecognizer(-1, 5);
50 clicRecognizerFirst->InitGlobalValue(SourceType::MOUSE);
51 clicRecognizerSecond->InitGlobalValue(SourceType::MOUSE);
52 clicRecognizerThird->InitGlobalValue(SourceType::MOUSE);
53 SUCCEED();
54 }
55
56 /**
57 * @tc.name: Test002
58 * @tc.desc: Test IsNeedResetStatus
59 * @tc.type: FUNC
60 */
61 HWTEST_F(MultiFingersRecognizerTestNg, Test002, TestSize.Level1)
62 {
63 auto clicRecognizerFirst = new ClickRecognizer(5, 5);
64 MultiFingersRecognizer* fingersRecognizer = clicRecognizerFirst;
65 auto status = fingersRecognizer->IsNeedResetStatus();
66 EXPECT_EQ(status, true);
67 }
68
69 /**
70 * @tc.name: Test003
71 * @tc.desc: Test IsNeedResetStatus
72 * @tc.type: FUNC
73 */
74 HWTEST_F(MultiFingersRecognizerTestNg, Test003, TestSize.Level1)
75 {
76 auto clicRecognizerFirst = new ClickRecognizer(5, 5);
77 MultiFingersRecognizer* fingersRecognizer = clicRecognizerFirst;
78 AxisEvent event;
79 event.id = 1;
80 event.x = 10.1;
81 event.y = 10.1;
82 event.screenX = 10.1;
83 event.screenY = 10.1;
84 event.sourceType = SourceType::MOUSE;
85 event.sourceTool = SourceTool::PEN;
86 event.originalId = 1;
87 fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
88 auto status = fingersRecognizer->IsNeedResetStatus();
89 EXPECT_EQ(status, true);
90 }
91
92 template<class T>
93 class MockReferenced : public Referenced {
94 public:
95 MOCK_METHOD(RefPtr<T>, Claim, (T * rawPtr), ());
96 };
97
98 /**
99 * @tc.name: Test004
100 * @tc.desc: Test IsNeedResetStatus
101 * @tc.type: FUNC
102 */
103 HWTEST_F(MultiFingersRecognizerTestNg, Test004, TestSize.Level1)
104 {
105 MockReferenced<MultiFingersRecognizer> test;
106 EXPECT_CALL(test, Claim(_)).WillRepeatedly(Return(nullptr));
107 auto clicRecognizerFirst = new ClickRecognizer(5, 5);
108 MultiFingersRecognizer* fingersRecognizer = clicRecognizerFirst;
109 AxisEvent event;
110 event.id = 1;
111 event.x = 10.1;
112 event.y = 10.1;
113 event.screenX = 10.1;
114 event.screenY = 10.1;
115 event.sourceType = SourceType::MOUSE;
116 event.sourceTool = SourceTool::PEN;
117 event.originalId = 1;
118 fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
119 auto status = fingersRecognizer->IsNeedResetStatus();
120 EXPECT_EQ(status, true);
121 }
122
123 class MockRecognizerGroup : public ClickRecognizer {
124 public:
125 MOCK_CONST_METHOD0(GetGroupRecognizer, const std::list<RefPtr<NGGestureRecognizer>>&());
126 };
127
128 /**
129 * @tc.name: Test005
130 * @tc.desc: Test IsNeedResetStatus
131 * @tc.type: FUNC
132 */
133 HWTEST_F(MultiFingersRecognizerTestNg, Test005, TestSize.Level1)
134 {
135 std::list<RefPtr<NGGestureRecognizer>> listTest;
136 listTest.resize(10, nullptr);
137 MockRecognizerGroup groupTest;
138 EXPECT_CALL(groupTest, GetGroupRecognizer()).WillRepeatedly(ReturnRef(listTest));
139 auto clicRecognizerFirst = new ClickRecognizer(5, 5);
140 MultiFingersRecognizer* fingersRecognizer = clicRecognizerFirst;
141 AxisEvent event;
142 event.id = 1;
143 event.x = 10.1;
144 event.y = 10.1;
145 event.screenX = 10.1;
146 event.screenY = 10.1;
147 event.sourceType = SourceType::MOUSE;
148 event.sourceTool = SourceTool::PEN;
149 event.originalId = 1;
150 fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
151 auto status = fingersRecognizer->IsNeedResetStatus();
152 EXPECT_EQ(status, true);
153 }
154
155 class MockMultiFingersRecognizer : public MultiFingersRecognizer {
156 public:
157 MOCK_METHOD(void, OnFinishGestureReferee, (int32_t, bool), ());
158 MOCK_METHOD(bool, IsNeedResetStatus, (), ());
159 MOCK_METHOD(void, ResetStatusOnFinish, (bool isBlocked), ());
BatchAdjudicate(const RefPtr<NGGestureRecognizer> & recognizer,GestureDisposal disposal)160 void BatchAdjudicate(const RefPtr<NGGestureRecognizer>& recognizer, GestureDisposal disposal) {}
OnBeginGestureReferee(int32_t touchId,bool needUpdateChild=false)161 void OnBeginGestureReferee(int32_t touchId, bool needUpdateChild = false) {}
HandleTouchDownEvent(const TouchEvent & event)162 void HandleTouchDownEvent(const TouchEvent& event) {}
HandleTouchUpEvent(const TouchEvent & event)163 void HandleTouchUpEvent(const TouchEvent& event) {}
HandleTouchMoveEvent(const TouchEvent & event)164 void HandleTouchMoveEvent(const TouchEvent& event) {}
HandleTouchCancelEvent(const TouchEvent & event)165 void HandleTouchCancelEvent(const TouchEvent& event) {}
HandleTouchDownEvent(const AxisEvent & event)166 void HandleTouchDownEvent(const AxisEvent& event) {}
HandleTouchUpEvent(const AxisEvent & event)167 void HandleTouchUpEvent(const AxisEvent& event) {}
HandleTouchMoveEvent(const AxisEvent & event)168 void HandleTouchMoveEvent(const AxisEvent& event) {}
HandleTouchCancelEvent(const AxisEvent & event)169 void HandleTouchCancelEvent(const AxisEvent& event) {}
OnResetStatus()170 void OnResetStatus() {}
OnSucceedCancel()171 void OnSucceedCancel() {}
OnAccepted()172 void OnAccepted() {}
OnRejected()173 void OnRejected() {}
174 };
175
176 class MockNGGestureRecognizer : public NGGestureRecognizer {
177 public:
178 MOCK_METHOD(void, ResetStatusOnFinish, (bool isBlocked), ());
BatchAdjudicate(const RefPtr<NGGestureRecognizer> & recognizer,GestureDisposal disposal)179 void BatchAdjudicate(const RefPtr<NGGestureRecognizer>& recognizer, GestureDisposal disposal) {}
OnBeginGestureReferee(int32_t touchId,bool needUpdateChild=false)180 void OnBeginGestureReferee(int32_t touchId, bool needUpdateChild = false) {}
HandleTouchDownEvent(const TouchEvent & event)181 void HandleTouchDownEvent(const TouchEvent& event) {}
HandleTouchUpEvent(const TouchEvent & event)182 void HandleTouchUpEvent(const TouchEvent& event) {}
HandleTouchMoveEvent(const TouchEvent & event)183 void HandleTouchMoveEvent(const TouchEvent& event) {}
HandleTouchCancelEvent(const TouchEvent & event)184 void HandleTouchCancelEvent(const TouchEvent& event) {}
HandleTouchDownEvent(const AxisEvent & event)185 void HandleTouchDownEvent(const AxisEvent& event) {}
HandleTouchUpEvent(const AxisEvent & event)186 void HandleTouchUpEvent(const AxisEvent& event) {}
HandleTouchMoveEvent(const AxisEvent & event)187 void HandleTouchMoveEvent(const AxisEvent& event) {}
HandleTouchCancelEvent(const AxisEvent & event)188 void HandleTouchCancelEvent(const AxisEvent& event) {}
OnResetStatus()189 void OnResetStatus() {}
OnSucceedCancel()190 void OnSucceedCancel() {}
OnAccepted()191 void OnAccepted() {}
OnRejected()192 void OnRejected() {}
CheckTouchId(int32_t touchId)193 bool CheckTouchId(int32_t touchId)
194 {
195 return false;
196 }
197 };
198
199 /**
200 * @tc.name: Test006
201 * @tc.desc: Test UpdateTouchPointWithAxisEvent
202 * @tc.type: FUNC
203 */
204 HWTEST_F(MultiFingersRecognizerTestNg, Test006, TestSize.Level1)
205 {
206 std::list<RefPtr<NGGestureRecognizer>> listTest;
207 listTest.resize(10, nullptr);
208 auto clicRecognizerFirst = new ClickRecognizer(5, 5);
209 MultiFingersRecognizer* fingersRecognizer = clicRecognizerFirst;
210 AxisEvent event;
211 event.id = 1;
212 event.x = 10.1;
213 event.y = 10.1;
214 event.screenX = 10.1;
215 event.screenY = 10.1;
216 event.sourceType = SourceType::MOUSE;
217 event.sourceTool = SourceTool::PEN;
218 event.originalId = 1;
219 fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
220 SUCCEED();
221 }
222
223 /**
224 * @tc.name: Test007
225 * @tc.desc: Test CleanRecognizerState
226 * @tc.type: FUNC
227 */
228 HWTEST_F(MultiFingersRecognizerTestNg, Test007, TestSize.Level1)
229 {
230 auto clicRecognizerFirst = new ClickRecognizer(5, 5);
231 auto fingersRecognizer = AceType::DynamicCast<MultiFingersRecognizer>(clicRecognizerFirst);
232 fingersRecognizer->refereeState_ = RefereeState::SUCCEED;
233 fingersRecognizer->currentFingers_ = 0;
234 fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
235 SUCCEED();
236 fingersRecognizer->refereeState_ = RefereeState::FAIL;
237 fingersRecognizer->currentFingers_ = 0;
238 fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
239 SUCCEED();
240 fingersRecognizer->refereeState_ = RefereeState::DETECTING;
241 fingersRecognizer->currentFingers_ = 0;
242 fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
243 SUCCEED();
244 fingersRecognizer->refereeState_ = RefereeState::SUCCEED;
245 fingersRecognizer->currentFingers_ = 1;
246 fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
247 SUCCEED();
248 }
249 }; // namespace OHOS::Ace::NG