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 "input_manager.h"
18 #include "input_transfer_station.h"
19 #include "window_impl.h"
20 #include "mock_window_adapter.h"
21 #include "singleton_mocker.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace Rosen {
28 using WindowMocker = SingletonMocker<WindowAdapter, MockWindowAdapter>;
29 class InputTransferStationTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 virtual void SetUp() override;
34 virtual void TearDown() override;
35 sptr<WindowImpl> window_;
36 std::shared_ptr<MMI::IInputEventConsumer> listener;
37 };
SetUpTestCase()38 void InputTransferStationTest::SetUpTestCase()
39 {
40 }
41
TearDownTestCase()42 void InputTransferStationTest::TearDownTestCase()
43 {
44 }
45
SetUp()46 void InputTransferStationTest::SetUp()
47 {
48 sptr<WindowOption> option = new WindowOption();
49 option->SetWindowName("inputwindow");
50 window_ = new WindowImpl(option);
51 window_->Create(INVALID_WINDOW_ID);
52 listener = std::make_shared<InputEventListener>(InputEventListener());
53 }
54
TearDown()55 void InputTransferStationTest::TearDown()
56 {
57 window_->Destroy();
58 window_ = nullptr;
59 }
60
61 namespace {
62 /**
63 * @tc.name: AddInputWindow
64 * @tc.desc: add input window in station.
65 * @tc.type: FUNC
66 * @tc.require: issueI5I5L4
67 */
68 HWTEST_F(InputTransferStationTest, AddInputWindow, Function | SmallTest | Level2)
69 {
70 if (!window_) {
71 GTEST_LOG_(INFO) << "Null Pointer";
72 return;
73 }
74 InputTransferStation::GetInstance().isRegisteredMMI_ = true;
75 InputTransferStation::GetInstance().AddInputWindow(window_);
76 InputTransferStation::GetInstance().isRegisteredMMI_ = false;
77 window_->GetWindowProperty()->SetWindowType(WindowType::APP_SUB_WINDOW_BASE);
78 InputTransferStation::GetInstance().destroyed_ = true;
79 InputTransferStation::GetInstance().AddInputWindow(window_);
80 InputTransferStation::GetInstance().destroyed_ = false;
81 InputTransferStation::GetInstance().AddInputWindow(window_);
82 InputTransferStation::GetInstance().inputListener_ = listener;
83 InputTransferStation::GetInstance().AddInputWindow(window_);
84 }
85
86 /**
87 * @tc.name: RemoveInputWindow
88 * @tc.desc: remove input window in station.
89 * @tc.type: FUNC
90 * @tc.require: issueI5I5L4
91 */
92 HWTEST_F(InputTransferStationTest, RemoveInputWindow, Function | SmallTest | Level2)
93 {
94 InputTransferStation::GetInstance().destroyed_ = true;
95 InputTransferStation::GetInstance().RemoveInputWindow(window_->GetWindowId());
96
97 InputTransferStation::GetInstance().destroyed_ = false;
98 sptr<WindowInputChannel> inputChannel = sptr<WindowInputChannel>::MakeSptr(window_);
99 InputTransferStation::GetInstance().windowInputChannels_.insert({ window_->GetWindowId(), inputChannel });
100 InputTransferStation::GetInstance().RemoveInputWindow(window_->GetWindowId());
101 auto iter = InputTransferStation::GetInstance().windowInputChannels_.find(window_->GetWindowId());
102 ASSERT_EQ(iter, InputTransferStation::GetInstance().windowInputChannels_.end());
103 }
104
105 /**
106 * @tc.name: OnInputEvent
107 * @tc.desc: OnInputEvent keyEvent
108 * @tc.type: FUNC
109 */
110 HWTEST_F(InputTransferStationTest, OnInputEvent1, Function | SmallTest | Level2)
111 {
112 auto keyEvent = MMI::KeyEvent::Create();
113 if (!keyEvent || !listener) {
114 GTEST_LOG_(INFO) << "Null Pointer";
115 return;
116 }
117 auto tempKeyEvent = keyEvent;
118 keyEvent = nullptr;
119 listener->OnInputEvent(keyEvent);
120 keyEvent = tempKeyEvent;
121 listener->OnInputEvent(keyEvent);
122 }
123
124 /**
125 * @tc.name: OnInputEvent
126 * @tc.desc: OnInputEvent axisEvent
127 * @tc.type: FUNC
128 */
129 HWTEST_F(InputTransferStationTest, OnInputEvent2, Function | SmallTest | Level2)
130 {
131 auto axisEvent = MMI::AxisEvent::Create();
132 if (!axisEvent || !listener) {
133 GTEST_LOG_(INFO) << "Null Pointer";
134 return;
135 }
136 auto tempAxisEvent = axisEvent;
137 axisEvent = nullptr;
138 listener->OnInputEvent(axisEvent);
139 axisEvent = tempAxisEvent;
140 listener->OnInputEvent(axisEvent);
141 }
142
143 /**
144 * @tc.name: OnInputEvent
145 * @tc.desc: OnInputEvent pointerEvent
146 * @tc.type: FUNC
147 */
148 HWTEST_F(InputTransferStationTest, OnInputEvent3, Function | SmallTest | Level2)
149 {
150 auto pointerEvent = MMI::PointerEvent::Create();
151 if (!pointerEvent || !listener) {
152 GTEST_LOG_(INFO) << "Null Pointer";
153 return;
154 }
155 auto tempPointerEvent = pointerEvent;
156 pointerEvent = nullptr;
157 listener->OnInputEvent(pointerEvent);
158 pointerEvent = tempPointerEvent;
159 pointerEvent->SetPointerAction(static_cast<int32_t>(MMI::PointerEvent::POINTER_ACTION_DOWN));
160 listener->OnInputEvent(pointerEvent);
161 pointerEvent->SetPointerAction(static_cast<int32_t>(MMI::PointerEvent::POINTER_ACTION_MOVE));
162 pointerEvent->SetAgentWindowId(0);
163 listener->OnInputEvent(pointerEvent);
164 pointerEvent->SetAgentWindowId(static_cast<uint32_t>(-1));
165 listener->OnInputEvent(pointerEvent);
166 }
167
168 /**
169 * @tc.name: GetInputChannel
170 * @tc.desc: GetInputChannel
171 * @tc.type: FUNC
172 */
173 HWTEST_F(InputTransferStationTest, GetInputChannel, Function | SmallTest | Level2)
174 {
175 InputTransferStation::GetInstance().destroyed_ = true;
176 auto channel = InputTransferStation::GetInstance().GetInputChannel(0);
177 ASSERT_EQ(channel, nullptr);
178 InputTransferStation::GetInstance().destroyed_ = false;
179 ASSERT_EQ(channel, nullptr);
180 InputTransferStation::GetInstance().AddInputWindow(window_);
181 InputTransferStation::GetInstance().GetInputChannel(0);
182 }
183 }
184 } // namespace Rosen
185 } // namespace OHOS
186