1 /*
2 * Copyright (C) 2022 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
16 #include <gtest/gtest.h>
17 #include "accessibility_common_helper.h"
18 #include "accessibility_touchEvent_injector.h"
19 #include "accessibility_ut_helper.h"
20 #include "accessible_ability_client_proxy.h"
21 #include "mock_accessible_ability_client_stub_impl.h"
22 #include "mock_accessible_ability_manager_service.h"
23
24 using namespace testing;
25 using namespace testing::ext;
26
27 namespace OHOS {
28 namespace Accessibility {
29 namespace {
30 constexpr uint32_t SLEEP_TIME_1 = 1;
31 constexpr uint32_t SLEEP_TIME_2 = 2;
32 } // namespace
33
34 class TouchEventInjectorTest : public testing::Test {
35 public:
TouchEventInjectorTest()36 TouchEventInjectorTest()
37 {}
~TouchEventInjectorTest()38 ~TouchEventInjectorTest()
39 {}
40
41 static void SetUpTestCase();
42 static void TearDownTestCase();
43 void SetUp() override;
44 void TearDown() override;
45 sptr<TouchEventInjector> touchEventInjector_ = nullptr;
46 sptr<AccessibilityInputInterceptor> inputInterceptor_ = nullptr;
47
48 protected:
49 MMI::PointerEvent CreateTouchEvent(int32_t action);
50 int32_t pointId_ = -1;
51 bool isDestroyEvents_ = false;
52 };
53
SetUpTestCase()54 void TouchEventInjectorTest::SetUpTestCase()
55 {
56 GTEST_LOG_(INFO) << "TouchEventInjectorTest SetUpTestCase";
57 Singleton<AccessibleAbilityManagerService>::GetInstance().OnStart();
58 }
59
TearDownTestCase()60 void TouchEventInjectorTest::TearDownTestCase()
61 {
62 GTEST_LOG_(INFO) << "TouchEventInjectorTest TearDownTestCase";
63 Singleton<AccessibleAbilityManagerService>::GetInstance().OnStop();
64 }
65
SetUp()66 void TouchEventInjectorTest::SetUp()
67 {
68 GTEST_LOG_(INFO) << "TouchEventInjectorTest SetUp";
69 touchEventInjector_ = new TouchEventInjector();
70 sptr<MockAccessibleAbilityClientStubImpl> stub = new MockAccessibleAbilityClientStubImpl();
71 inputInterceptor_ = AccessibilityInputInterceptor::GetInstance();
72 }
73
TearDown()74 void TouchEventInjectorTest::TearDown()
75 {
76 GTEST_LOG_(INFO) << "TouchEventInjectorTest TearDown";
77 inputInterceptor_ = nullptr;
78 }
79
CreateTouchEvent(int32_t action)80 MMI::PointerEvent TouchEventInjectorTest::CreateTouchEvent(int32_t action)
81 {
82 std::shared_ptr<MMI::PointerEvent> pointerEvent = MMI::PointerEvent::Create();
83 MMI::PointerEvent::PointerItem item = {};
84
85 pointerEvent->AddPointerItem(item);
86 pointerEvent->SetPointerId(pointId_++);
87 pointerEvent->SetSourceType(MMI::PointerEvent::SOURCE_TYPE_TOUCHSCREEN);
88 pointerEvent->SetPointerAction(action);
89
90 return *pointerEvent;
91 }
92 /**
93 * @tc.number: TouchEventInjector001
94 * @tc.name:TouchEventInjector
95 * @tc.desc: Check injected single tap event.
96 */
97 HWTEST_F(TouchEventInjectorTest, TouchEventInjector_Unittest_TouchEventInjector_001, TestSize.Level1)
98 {
99 GTEST_LOG_(INFO) << "TouchEventInjector_Unittest_TouchEventInjector_001 start";
100 touchEventInjector_->SetNext(inputInterceptor_);
101
102 AccessibilityGesturePosition point {10.0f, 10.0f};
103 std::shared_ptr<AccessibilityGestureInjectPath> gesturePath = std::make_shared<AccessibilityGestureInjectPath>();
104 gesturePath->AddPosition(point);
105 gesturePath->SetDurationTime(100);
106
107 touchEventInjector_->InjectEvents(gesturePath);
108
109 sleep(SLEEP_TIME_2);
110 int32_t touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(0);
111 int32_t expectValue = MMI::PointerEvent::POINTER_ACTION_DOWN;
112 EXPECT_EQ(touchAction, expectValue);
113
114 expectValue = MMI::PointerEvent::POINTER_ACTION_UP;
115 touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(1);
116 EXPECT_EQ(touchAction, expectValue);
117 AccessibilityAbilityHelper::GetInstance().ClearTouchEventActionVector();
118 }
119
120 /**
121 * @tc.number: TouchEventInjector004
122 * @tc.name:TouchEventInjector
123 * @tc.desc: Check Some functional interface.
124 */
125 HWTEST_F(TouchEventInjectorTest, TouchEventInjector_Unittest_TouchEventInjector_004, TestSize.Level1)
126 {
127 GTEST_LOG_(INFO) << "TouchEventInjector_Unittest_TouchEventInjector_004 start";
128
129 std::shared_ptr<MMI::PointerEvent> event = MMI::PointerEvent::Create();
130 event->SetSourceType(MMI::PointerEvent::SOURCE_TYPE_MOUSE);
131 touchEventInjector_->SetNext(inputInterceptor_);
132 touchEventInjector_->OnPointerEvent(*event);
133 touchEventInjector_->DestroyEvents();
134 isDestroyEvents_ = AccessibilityAbilityHelper::GetInstance().GetDestroyState();
135 EXPECT_EQ(isDestroyEvents_, true);
136
137 MMI::PointerEvent touchevent = CreateTouchEvent(MMI::PointerEvent::POINTER_ACTION_DOWN);
138 touchEventInjector_->OnPointerEvent(touchevent);
139 int32_t expectValue = MMI::PointerEvent::POINTER_ACTION_DOWN;
140 sleep(SLEEP_TIME_2);
141 int32_t touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(1);
142 AccessibilityAbilityHelper::GetInstance().ClearTouchEventActionVector();
143 EXPECT_EQ(touchAction, expectValue);
144
145 GTEST_LOG_(INFO) << "TouchEventInjector_Unittest_TouchEventInjector_004 end";
146 }
147
148 /**
149 * @tc.number: TouchEventInjector005
150 * @tc.name:TouchEventInjector
151 * @tc.desc: Check destroy event before sendtouchevent.
152 */
153 HWTEST_F(TouchEventInjectorTest, TouchEventInjector_Unittest_TouchEventInjector_005, TestSize.Level1)
154 {
155 GTEST_LOG_(INFO) << "TouchEventInjector_Unittest_TouchEventInjector_005 start";
156
157 touchEventInjector_->SetNext(inputInterceptor_);
158
159 AccessibilityGesturePosition point {10.0f, 10.0f};
160 std::shared_ptr<AccessibilityGestureInjectPath> gesturePath = std::make_shared<AccessibilityGestureInjectPath>();
161 gesturePath->AddPosition(point);
162 gesturePath->SetDurationTime(100000);
163
164 touchEventInjector_->InjectEvents(gesturePath);
165 sleep(SLEEP_TIME_1);
166 int32_t touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(0);
167 AccessibilityAbilityHelper::GetInstance().ClearTouchEventActionVector();
168 touchEventInjector_->DestroyEvents();
169 isDestroyEvents_ = AccessibilityAbilityHelper::GetInstance().GetDestroyState();
170 EXPECT_EQ(isDestroyEvents_, true);
171 int32_t expectValue = MMI::PointerEvent::POINTER_ACTION_DOWN;
172 EXPECT_EQ(touchAction, expectValue);
173
174 GTEST_LOG_(INFO) << "TouchEventInjector_Unittest_TouchEventInjector_005 end";
175 }
176
177 /**
178 * @tc.number: TouchEventInjector006
179 * @tc.name:TouchEventInjector
180 * @tc.desc: Check injected UP_THEN_RIGHT move event.
181 */
182 HWTEST_F(TouchEventInjectorTest, TouchEventInjector_Unittest_TouchEventInjector_006, TestSize.Level1)
183 {
184 GTEST_LOG_(INFO) << "TouchEventInjector_Unittest_TouchEventInjector_006 start";
185
186 touchEventInjector_->SetNext(inputInterceptor_);
187
188 AccessibilityGesturePosition point1 {10.0f, 10.0f};
189 AccessibilityGesturePosition point2 {10.0f, 20.0f};
190 AccessibilityGesturePosition point3 {20.0f, 20.0f};
191 std::shared_ptr<AccessibilityGestureInjectPath> gesturePath = std::make_shared<AccessibilityGestureInjectPath>();
192 gesturePath->AddPosition(point1);
193 gesturePath->AddPosition(point2);
194 gesturePath->AddPosition(point3);
195 gesturePath->SetDurationTime(200);
196
197 touchEventInjector_->InjectEvents(gesturePath);
198 sleep(SLEEP_TIME_2);
199 int32_t touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(0);
200 int32_t expectValue = MMI::PointerEvent::POINTER_ACTION_DOWN;
201 touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(1);
202 EXPECT_EQ(touchAction, expectValue);
203 expectValue = MMI::PointerEvent::POINTER_ACTION_MOVE;
204 touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(2);
205 EXPECT_EQ(touchAction, expectValue);
206 touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(3);
207 EXPECT_EQ(touchAction, expectValue);
208 expectValue = MMI::PointerEvent::POINTER_ACTION_UP;
209 touchAction = AccessibilityAbilityHelper::GetInstance().GetTouchEventActionOfTargetIndex(4);
210 EXPECT_EQ(touchAction, expectValue);
211 AccessibilityAbilityHelper::GetInstance().ClearTouchEventActionVector();
212
213 GTEST_LOG_(INFO) << "TouchEventInjector_Unittest_TouchEventInjector_006 end";
214 }
215 } // namespace Accessibility
216 } // namespace OHOS