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 }