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
16 #include <gtest/gtest.h>
17 #include <string>
18
19 #include "constants_dinput.h"
20 #include "dinput_sink_state.h"
21 #include "dinput_errcode.h"
22 #include "touchpad_event_fragment_mgr.h"
23
24 using namespace testing::ext;
25 namespace OHOS {
26 namespace DistributedHardware {
27 namespace DistributedInput {
28 using namespace std;
29 namespace {
30 const std::string DHID_1 = "input_159753qazplm";
31 RawEvent EVENT_1 = {
32 .when = 0,
33 .type = EV_KEY,
34 .code = KEY_D,
35 .value = 1,
36 .descriptor = DHID_1
37 };
38 RawEvent EVENT_2 = {
39 .when = 1,
40 .type = EV_ABS,
41 .code = KEY_D,
42 .value = 0,
43 .descriptor = DHID_1
44 };
45 RawEvent EVENT_3 = {
46 .when = 1,
47 .type = EV_ABS,
48 .code = ABS_X,
49 .value = 0,
50 .descriptor = DHID_1
51 };
52
53 }
54 class DinputSinkStateTest : public testing::Test {
55 public:
56 static void SetUpTestCase();
57 static void TearDownTestCase();
58 void SetUp();
59 void TearDown();
60 };
61
SetUpTestCase()62 void DinputSinkStateTest::SetUpTestCase()
63 {
64 }
65
TearDownTestCase()66 void DinputSinkStateTest::TearDownTestCase()
67 {
68 }
69
SetUp()70 void DinputSinkStateTest::SetUp()
71 {
72 }
73
TearDown()74 void DinputSinkStateTest::TearDown()
75 {
76 }
77
78 HWTEST_F(DinputSinkStateTest, RecordDhIds_001, testing::ext::TestSize.Level0)
79 {
80 std::vector<std::string> dhIds;
81 dhIds.push_back(DHID_1);
82 DhIdState state = DhIdState::THROUGH_IN;
83 int32_t sessionId = 1;
84 int32_t ret = DInputSinkState::GetInstance().RecordDhIds(dhIds, state, sessionId);
85 EXPECT_EQ(DH_SUCCESS, ret);
86 }
87
88 HWTEST_F(DinputSinkStateTest, RecordDhIds_002, testing::ext::TestSize.Level0)
89 {
90 std::vector<std::string> dhIds;
91 dhIds.push_back(DHID_1);
92 DhIdState state = DhIdState::THROUGH_OUT;
93 int32_t sessionId = -1;
94 DInputSinkState::GetInstance().dhIdStateMap_.clear();
95 int32_t ret = DInputSinkState::GetInstance().RecordDhIds(dhIds, state, sessionId);
96 EXPECT_EQ(DH_SUCCESS, ret);
97 }
98
99 HWTEST_F(DinputSinkStateTest, RemoveDhIds_001, testing::ext::TestSize.Level0)
100 {
101 std::vector<std::string> dhIds;
102 dhIds.push_back(DHID_1);
103 int32_t ret = DInputSinkState::GetInstance().RemoveDhIds(dhIds);
104 EXPECT_EQ(DH_SUCCESS, ret);
105 }
106
107 HWTEST_F(DinputSinkStateTest, GetStateByDhid_001, testing::ext::TestSize.Level0)
108 {
109 DInputSinkState::GetInstance().dhIdStateMap_[DHID_1] = DhIdState::THROUGH_OUT;
110 DhIdState ret = DInputSinkState::GetInstance().GetStateByDhid(DHID_1);
111 EXPECT_EQ(DhIdState::THROUGH_OUT, ret);
112 }
113
114 HWTEST_F(DinputSinkStateTest, GetStateByDhid_002, testing::ext::TestSize.Level0)
115 {
116 std::string dhId = "dhId_test";
117 DhIdState ret = DInputSinkState::GetInstance().GetStateByDhid(dhId);
118 EXPECT_EQ(DhIdState::THROUGH_IN, ret);
119 }
120
121 HWTEST_F(DinputSinkStateTest, SimulateEventInjectToSrc_001, testing::ext::TestSize.Level0)
122 {
123 int32_t sessionId = 1;
124 std::string dhId = "dhId_test";
125 std::vector<std::string> dhIds;
126 dhIds.push_back(dhId);
127 DInputSinkState::GetInstance().Init();
128 DInputSinkState::GetInstance().AddKeyDownState(EVENT_1);
129 DInputSinkState::GetInstance().SimulateEventInjectToSrc(sessionId, dhIds);
130
131 dhIds.clear();
132 dhIds.push_back(DHID_1);
133 DInputSinkState::GetInstance().SimulateEventInjectToSrc(sessionId, dhIds);
134 EXPECT_EQ(DInputSinkState::GetInstance().keyDownStateMap_.size(), 0);
135 }
136
137 HWTEST_F(DinputSinkStateTest, RemoveKeyDownState_001, testing::ext::TestSize.Level0)
138 {
139 DInputSinkState::GetInstance().keyDownStateMap_.clear();
140 std::string dhId = "dhId_test";
141 std::vector<std::string> dhIds;
142 dhIds.push_back(dhId);
143 DInputSinkState::GetInstance().AddKeyDownState(EVENT_1);
144 DInputSinkState::GetInstance().RemoveKeyDownState(EVENT_1);
145
146 dhIds.clear();
147 dhIds.push_back(DHID_1);
148 DInputSinkState::GetInstance().RemoveKeyDownState(EVENT_1);
149 EXPECT_EQ(DInputSinkState::GetInstance().keyDownStateMap_.size(), 0);
150 }
151
152 HWTEST_F(DinputSinkStateTest, IsPositionEvent_001, testing::ext::TestSize.Level0)
153 {
154 DInputSinkState::GetInstance().Init();
155 auto ret = DInputSinkState::GetInstance().GetTouchPadEventFragMgr()->IsPositionEvent(EVENT_2);
156 EXPECT_EQ(false, ret);
157 }
158
159 HWTEST_F(DinputSinkStateTest, PushEvent_001, testing::ext::TestSize.Level0)
160 {
161 auto ret = DInputSinkState::GetInstance().GetTouchPadEventFragMgr()->PushEvent(DHID_1, EVENT_1);
162 EXPECT_EQ(false, ret.first);
163
164 ret = DInputSinkState::GetInstance().GetTouchPadEventFragMgr()->PushEvent(DHID_1, EVENT_3);
165 EXPECT_EQ(false, ret.first);
166 }
167
168 HWTEST_F(DinputSinkStateTest, GetAndClearEvents_001, testing::ext::TestSize.Level0)
169 {
170 std::string dhId = "dhId_test";
171 auto ret = DInputSinkState::GetInstance().GetTouchPadEventFragMgr()->GetAndClearEvents(dhId);
172 EXPECT_EQ(0, ret.size());
173 }
174 }
175 }
176 }