• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }