1 /*
2 * Copyright (c) 2021 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 <cstdint>
18 #include "window_input_intercept.h"
19 #include "window_input_intercept_client.h"
20 #include "window_input_intercept_consumer.h"
21
22 using namespace testing;
23 using namespace testing::ext;
24
25 namespace OHOS {
26 namespace Rosen {
27 namespace {
28 const int32_t DEVICE_ID = 12;
29 }
30 class WindowInputInterceptConsumer : public IInputEventInterceptConsumer {
31 public:
32 void OnInputEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent) override;
33
34 void OnInputEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent) override;
35 public:
36 std::shared_ptr<MMI::KeyEvent> keyEventResult_ = nullptr;
37 std::shared_ptr<MMI::PointerEvent> pointerEvent_ = nullptr;
38 };
39
OnInputEvent(const std::shared_ptr<MMI::KeyEvent> & keyEvent)40 void WindowInputInterceptConsumer::OnInputEvent(const std::shared_ptr<MMI::KeyEvent>& keyEvent)
41 {
42 keyEventResult_ = keyEvent;
43 }
44
OnInputEvent(const std::shared_ptr<MMI::PointerEvent> & pointerEvent)45 void WindowInputInterceptConsumer::OnInputEvent(const std::shared_ptr<MMI::PointerEvent>& pointerEvent)
46 {
47 pointerEvent_ = pointerEvent;
48 }
49
50 class WindowInputInterceptTest : public testing::Test {
51 public:
52 void SetUp() override;
53 void TearDown() override;
54 };
55
SetUp()56 void WindowInputInterceptTest::SetUp()
57 {
58 WindowInputIntercept::GetInstance().UnRegisterInputEventIntercept(DEVICE_ID);
59 }
60
TearDown()61 void WindowInputInterceptTest::TearDown() {}
62
63 /**
64 * @tc.name: IsInputIntercept01
65 * @tc.desc: when call IsInputIntercept(KeyEvent) and the callback of the deviceId is exist, return true
66 * @tc.type: FUNC
67 */
68 HWTEST_F(WindowInputInterceptTest, IsInputIntercept01, Function | SmallTest | Level2)
69 {
70 std::shared_ptr<WindowInputInterceptConsumer> consumer = std::make_shared<WindowInputInterceptConsumer>();
71 WindowInputIntercept::GetInstance().RegisterInputEventIntercept(DEVICE_ID, consumer);
72 std::shared_ptr<MMI::KeyEvent> keyEvent = MMI::KeyEvent::Create();
73 keyEvent->SetDeviceId(DEVICE_ID);
74 EXPECT_TRUE(WindowInputIntercept::GetInstance().IsInputIntercept(keyEvent));
75 EXPECT_EQ(DEVICE_ID, consumer->keyEventResult_->GetDeviceId());
76
77 WindowInputIntercept::GetInstance().UnRegisterInputEventIntercept(DEVICE_ID);
78 EXPECT_FALSE(WindowInputIntercept::GetInstance().IsInputIntercept(keyEvent));
79
80 WindowInputInterceptClient::RegisterInputEventIntercept(DEVICE_ID, consumer);
81 EXPECT_TRUE(WindowInputIntercept::GetInstance().IsInputIntercept(keyEvent));
82 WindowInputInterceptClient::SendInputEvent(keyEvent);
83 consumer->OnInputEvent(keyEvent);
84 EXPECT_NE(nullptr, consumer->keyEventResult_);
85
86 WindowInputInterceptClient::UnRegisterInputEventIntercept(DEVICE_ID);
87 EXPECT_FALSE(WindowInputIntercept::GetInstance().IsInputIntercept(keyEvent));
88 }
89
90 /**
91 * @tc.name: IsInputIntercept02
92 * @tc.desc: when call IsInputIntercept(KeyEvent) and the callback of the deviceId is not exist, return false
93 * @tc.type: FUNC
94 */
95 HWTEST_F(WindowInputInterceptTest, IsInputIntercept02, Function | SmallTest | Level2)
96 {
97 std::shared_ptr<WindowInputInterceptConsumer> consumer = std::make_shared<WindowInputInterceptConsumer>();
98 WindowInputIntercept::GetInstance().RegisterInputEventIntercept(DEVICE_ID, consumer);
99 std::shared_ptr<MMI::KeyEvent> keyEvent = MMI::KeyEvent::Create();
100 keyEvent->SetDeviceId(0);
101 EXPECT_FALSE(WindowInputIntercept::GetInstance().IsInputIntercept(keyEvent));
102 EXPECT_TRUE(consumer->keyEventResult_ == nullptr);
103 }
104
105 /**
106 * @tc.name: IsInputIntercept03
107 * @tc.desc: when call IsInputIntercept(PointerEvent) and the callback of the deviceId is exist, return true
108 * @tc.type: FUNC
109 */
110 HWTEST_F(WindowInputInterceptTest, IsInputIntercept03, Function | SmallTest | Level2)
111 {
112 std::shared_ptr<WindowInputInterceptConsumer> consumer = std::make_shared<WindowInputInterceptConsumer>();
113 WindowInputIntercept::GetInstance().RegisterInputEventIntercept(DEVICE_ID, consumer);
114 std::shared_ptr<MMI::PointerEvent> pointerEvent = MMI::PointerEvent::Create();
115 pointerEvent->SetDeviceId(DEVICE_ID);
116 EXPECT_TRUE(WindowInputIntercept::GetInstance().IsInputIntercept(pointerEvent));
117 EXPECT_EQ(DEVICE_ID, consumer->pointerEvent_->GetDeviceId());
118
119 WindowInputInterceptClient::RegisterInputEventIntercept(DEVICE_ID, consumer);
120 EXPECT_TRUE(WindowInputIntercept::GetInstance().IsInputIntercept(pointerEvent));
121 WindowInputInterceptClient::SendInputEvent(pointerEvent);
122 consumer->OnInputEvent(pointerEvent);
123 EXPECT_NE(nullptr, consumer->pointerEvent_);
124
125 WindowInputInterceptClient::UnRegisterInputEventIntercept(DEVICE_ID);
126 EXPECT_FALSE(WindowInputIntercept::GetInstance().IsInputIntercept(pointerEvent));
127 }
128
129 /**
130 * @tc.name: IsInputIntercept04
131 * @tc.desc: when call IsInputIntercept(PointerEvent) and the callback of the deviceId is not exist, return false
132 * @tc.type: FUNC
133 */
134 HWTEST_F(WindowInputInterceptTest, IsInputIntercept04, Function | SmallTest | Level2)
135 {
136 std::shared_ptr<WindowInputInterceptConsumer> consumer = std::make_shared<WindowInputInterceptConsumer>();
137 WindowInputIntercept::GetInstance().RegisterInputEventIntercept(DEVICE_ID, consumer);
138 std::shared_ptr<MMI::PointerEvent> pointerEvent = MMI::PointerEvent::Create();
139 pointerEvent->SetDeviceId(0);
140 EXPECT_FALSE(WindowInputIntercept::GetInstance().IsInputIntercept(pointerEvent));
141 EXPECT_TRUE(consumer->pointerEvent_ == nullptr);
142 }
143 }
144 }