• 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 "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     RefPtr<ClickRecognizer> clicRecognizerFirst = AceType::MakeRefPtr<ClickRecognizer>(5, 5);
48     RefPtr<ClickRecognizer> clicRecognizerSecond = AceType::MakeRefPtr<ClickRecognizer>(10, 5);
49     RefPtr<ClickRecognizer> clicRecognizerThird = AceType::MakeRefPtr<ClickRecognizer>(-1, 5);
50     clicRecognizerFirst->InitGlobalValue(SourceType::MOUSE);
51     clicRecognizerSecond->InitGlobalValue(SourceType::MOUSE);
52     clicRecognizerThird->InitGlobalValue(SourceType::MOUSE);
53     EXPECT_NE(clicRecognizerFirst, clicRecognizerSecond);
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     RefPtr<ClickRecognizer> clicRecognizerFirst = AceType::MakeRefPtr<ClickRecognizer>(5, 5);
64     RefPtr<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     RefPtr<ClickRecognizer> clicRecognizerFirst = AceType::MakeRefPtr<ClickRecognizer>(5, 5);
77     RefPtr<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.globalDisplayX = 10.1;
85     event.globalDisplayY = 10.1;
86     event.sourceType = SourceType::MOUSE;
87     event.sourceTool = SourceTool::PEN;
88     event.originalId = 1;
89     fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
90     auto status = fingersRecognizer->IsNeedResetStatus();
91     EXPECT_EQ(status, true);
92 }
93 
94 template<class T>
95 class MockReferenced : public Referenced {
96 public:
97     MOCK_METHOD(RefPtr<T>, Claim, (T * rawPtr), ());
98 };
99 
100 /**
101  * @tc.name: Test004
102  * @tc.desc: Test IsNeedResetStatus
103  * @tc.type: FUNC
104  */
105 HWTEST_F(MultiFingersRecognizerTestNg, Test004, TestSize.Level1)
106 {
107     MockReferenced<MultiFingersRecognizer> test;
108     EXPECT_CALL(test, Claim(_)).WillRepeatedly(Return(nullptr));
109     RefPtr<ClickRecognizer> clicRecognizerFirst = AceType::MakeRefPtr<ClickRecognizer>(5, 5);
110     RefPtr<MultiFingersRecognizer> fingersRecognizer = clicRecognizerFirst;
111     AxisEvent event;
112     event.id = 1;
113     event.x = 10.1;
114     event.y = 10.1;
115     event.screenX = 10.1;
116     event.screenY = 10.1;
117     event.sourceType = SourceType::MOUSE;
118     event.sourceTool = SourceTool::PEN;
119     event.originalId = 1;
120     fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
121     auto status = fingersRecognizer->IsNeedResetStatus();
122     EXPECT_EQ(status, true);
123 }
124 
125 class MockRecognizerGroup : public ClickRecognizer {
126 public:
127     MOCK_CONST_METHOD0(GetGroupRecognizer, const std::list<RefPtr<NGGestureRecognizer>>&());
128 };
129 
130 /**
131  * @tc.name: Test005
132  * @tc.desc: Test IsNeedResetStatus
133  * @tc.type: FUNC
134  */
135 HWTEST_F(MultiFingersRecognizerTestNg, Test005, TestSize.Level1)
136 {
137     std::list<RefPtr<NGGestureRecognizer>> listTest;
138     listTest.resize(10, nullptr);
139     MockRecognizerGroup groupTest;
140     EXPECT_CALL(groupTest, GetGroupRecognizer()).WillRepeatedly(ReturnRef(listTest));
141     RefPtr<ClickRecognizer> clicRecognizerFirst = AceType::MakeRefPtr<ClickRecognizer>(5, 5);
142     RefPtr<MultiFingersRecognizer> fingersRecognizer = clicRecognizerFirst;
143     AxisEvent event;
144     event.id = 1;
145     event.x = 10.1;
146     event.y = 10.1;
147     event.screenX = 10.1;
148     event.screenY = 10.1;
149     event.sourceType = SourceType::MOUSE;
150     event.sourceTool = SourceTool::PEN;
151     event.originalId = 1;
152     fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
153     auto status = fingersRecognizer->IsNeedResetStatus();
154     EXPECT_EQ(status, true);
155 }
156 
157 class MockMultiFingersRecognizer : public MultiFingersRecognizer {
158 public:
159     MOCK_METHOD(void, OnFinishGestureReferee, (int32_t, bool), ());
160     MOCK_METHOD(bool, IsNeedResetStatus, (), ());
161     MOCK_METHOD(void, ResetStatusOnFinish, (bool isBlocked), ());
BatchAdjudicate(const RefPtr<NGGestureRecognizer> & recognizer,GestureDisposal disposal)162     void BatchAdjudicate(const RefPtr<NGGestureRecognizer>& recognizer, GestureDisposal disposal) {}
OnBeginGestureReferee(int32_t touchId,bool needUpdateChild=false)163     void OnBeginGestureReferee(int32_t touchId, bool needUpdateChild = false) {}
HandleTouchDownEvent(const TouchEvent & event)164     void HandleTouchDownEvent(const TouchEvent& event) {}
HandleTouchUpEvent(const TouchEvent & event)165     void HandleTouchUpEvent(const TouchEvent& event) {}
HandleTouchMoveEvent(const TouchEvent & event)166     void HandleTouchMoveEvent(const TouchEvent& event) {}
HandleTouchCancelEvent(const TouchEvent & event)167     void HandleTouchCancelEvent(const TouchEvent& event) {}
HandleTouchDownEvent(const AxisEvent & event)168     void HandleTouchDownEvent(const AxisEvent& event) {}
HandleTouchUpEvent(const AxisEvent & event)169     void HandleTouchUpEvent(const AxisEvent& event) {}
HandleTouchMoveEvent(const AxisEvent & event)170     void HandleTouchMoveEvent(const AxisEvent& event) {}
HandleTouchCancelEvent(const AxisEvent & event)171     void HandleTouchCancelEvent(const AxisEvent& event) {}
OnResetStatus()172     void OnResetStatus() {}
OnSucceedCancel()173     void OnSucceedCancel() {}
OnAccepted()174     void OnAccepted() {}
OnRejected()175     void OnRejected() {}
176 };
177 
178 class MockNGGestureRecognizer : public NGGestureRecognizer {
179 public:
180     MOCK_METHOD(void, ResetStatusOnFinish, (bool isBlocked), ());
BatchAdjudicate(const RefPtr<NGGestureRecognizer> & recognizer,GestureDisposal disposal)181     void BatchAdjudicate(const RefPtr<NGGestureRecognizer>& recognizer, GestureDisposal disposal) {}
OnBeginGestureReferee(int32_t touchId,bool needUpdateChild=false)182     void OnBeginGestureReferee(int32_t touchId, bool needUpdateChild = false) {}
HandleTouchDownEvent(const TouchEvent & event)183     void HandleTouchDownEvent(const TouchEvent& event) {}
HandleTouchUpEvent(const TouchEvent & event)184     void HandleTouchUpEvent(const TouchEvent& event) {}
HandleTouchMoveEvent(const TouchEvent & event)185     void HandleTouchMoveEvent(const TouchEvent& event) {}
HandleTouchCancelEvent(const TouchEvent & event)186     void HandleTouchCancelEvent(const TouchEvent& event) {}
HandleTouchDownEvent(const AxisEvent & event)187     void HandleTouchDownEvent(const AxisEvent& event) {}
HandleTouchUpEvent(const AxisEvent & event)188     void HandleTouchUpEvent(const AxisEvent& event) {}
HandleTouchMoveEvent(const AxisEvent & event)189     void HandleTouchMoveEvent(const AxisEvent& event) {}
HandleTouchCancelEvent(const AxisEvent & event)190     void HandleTouchCancelEvent(const AxisEvent& event) {}
OnResetStatus()191     void OnResetStatus() {}
OnSucceedCancel()192     void OnSucceedCancel() {}
OnAccepted()193     void OnAccepted() {}
OnRejected()194     void OnRejected() {}
CheckTouchId(int32_t touchId)195     bool CheckTouchId(int32_t touchId)
196     {
197         return false;
198     }
GetTouchPoints()199     std::map<int32_t, TouchEvent> GetTouchPoints()
200     {
201         std::map<int32_t, TouchEvent> emptyTouchPoints;
202         return emptyTouchPoints;
203     }
204 };
205 
206 /**
207  * @tc.name: Test006
208  * @tc.desc: Test UpdateTouchPointWithAxisEvent
209  * @tc.type: FUNC
210  */
211 HWTEST_F(MultiFingersRecognizerTestNg, Test006, TestSize.Level1)
212 {
213     std::list<RefPtr<NGGestureRecognizer>> listTest;
214     listTest.resize(10, nullptr);
215     RefPtr<ClickRecognizer> clicRecognizerFirst = AceType::MakeRefPtr<ClickRecognizer>(5, 5);
216     RefPtr<MultiFingersRecognizer> fingersRecognizer = clicRecognizerFirst;
217     AxisEvent event;
218     event.id = 1;
219     event.x = 10.1;
220     event.y = 10.1;
221     event.screenX = 10.1;
222     event.screenY = 10.1;
223     event.sourceType = SourceType::MOUSE;
224     event.sourceTool = SourceTool::PEN;
225     event.originalId = 1;
226     fingersRecognizer->UpdateTouchPointWithAxisEvent(event);
227     EXPECT_EQ(event.originalId, 1);
228 }
229 
230 /**
231  * @tc.name: Test007
232  * @tc.desc: Test CleanRecognizerState
233  * @tc.type: FUNC
234  */
235 HWTEST_F(MultiFingersRecognizerTestNg, Test007, TestSize.Level1)
236 {
237     RefPtr<ClickRecognizer> clicRecognizerFirst = AceType::MakeRefPtr<ClickRecognizer>(5, 5);
238     RefPtr<MultiFingersRecognizer> fingersRecognizer = clicRecognizerFirst;
239     fingersRecognizer->refereeState_ = RefereeState::SUCCEED;
240     fingersRecognizer->currentFingers_ = 0;
241     fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
242     fingersRecognizer->refereeState_ = RefereeState::FAIL;
243     fingersRecognizer->currentFingers_ = 0;
244     fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
245     fingersRecognizer->refereeState_ = RefereeState::DETECTING;
246     fingersRecognizer->currentFingers_ = 0;
247     fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
248     fingersRecognizer->refereeState_ = RefereeState::SUCCEED;
249     fingersRecognizer->currentFingers_ = 1;
250     fingersRecognizer->MultiFingersRecognizer::CleanRecognizerState();
251     EXPECT_EQ(fingersRecognizer->currentFingers_, 1);
252 }
253 }; // namespace OHOS::Ace::NG