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 
18 #include "accesstoken_kit.h"
19 #include "input_manager.h"
20 #include "key_event.h"
21 #include "mmi_log.h"
22 #include "nativetoken_kit.h"
23 #include "oh_input_manager.h"
24 #include "oh_key_code.h"
25 #include "token_setproc.h"
26 
27 #undef MMI_LOG_TAG
28 #define MMI_LOG_TAG "InputNativeHotkeyTest"
29 
30 namespace OHOS {
31 namespace MMI {
32 namespace {
33 using namespace testing::ext;
34 using namespace Security::AccessToken;
35 using Security::AccessToken::AccessTokenID;
36 
37 AccessTokenID tokenID_ = 0;
38 PermissionDef g_infoManagerTestPermDef = {
39     .permissionName = "ohos.permission.ACTIVITY_MOTION",
40     .bundleName = "InputNativeHotkeyTest",
41     .grantMode = 1,
42     .label = "label",
43     .labelId = 1,
44     .description = "test InputNativeHotkeyTest",
45     .descriptionId = 1,
46     .availableLevel = APL_NORMAL
47 };
48 PermissionStateFull g_infoManagerTestState = {
49     .grantFlags = { 1 },
50     .grantStatus = { PermissionState::PERMISSION_GRANTED },
51     .isGeneral = true,
52     .permissionName = "ohos.permission.ACTIVITY_MOTION",
53     .resDeviceID = { "localTest" }
54 };
55 HapPolicyParams g_infoManagerTestPolicyParams = {
56     .apl = APL_NORMAL,
57     .domain = "test.domain",
58     .permList = { g_infoManagerTestPermDef },
59     .permStateList = { g_infoManagerTestState },
60 };
61 
62 HapInfoParams g_infoManagerTestInfoParams = {
63     .bundleName = "InputNativeHotkeyTest",
64     .userID = 1,
65     .instIndex = 0,
66     .appIDDesc = "InputNativeHotkeyTest"
67 };
68 } // namespace
69 
70 class InputNativeHotkeyTest : public testing::Test {
71 public:
SetUpTestCase(void)72     static void SetUpTestCase(void)
73     {
74         AccessTokenIDEx tokenIdEx = {0};
75         tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParams, g_infoManagerTestPolicyParams);
76         tokenID_ = tokenIdEx.tokenIdExStruct.tokenID;
77         GTEST_LOG_(INFO) << "tokenID:" << tokenID_;
78         ASSERT_NE(0, tokenID_);
79         ASSERT_EQ(0, SetSelfTokenID(tokenID_));
80     }
TearDownTestCase(void)81     static void TearDownTestCase(void)
82     {
83         ASSERT_NE(0, tokenID_);
84         int32_t ret = AccessTokenKit::DeleteToken(tokenID_);
85         ASSERT_EQ(INPUT_SUCCESS, ret);
86     }
SetUp()87     void SetUp() {}
TearDown()88     void TearDown() {}
89 };
90 
Input_HotkeyCallback(struct Input_Hotkey *hotkey)91 static void Input_HotkeyCallback(struct Input_Hotkey *hotkey)
92 {
93     printf("Input_HotkeyCallback success");
94 }
95 
96 /**
97  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_001
98  * @tc.desc: Subscribe ctrl + z
99  * @tc.type: FUNC
100  * @tc.require:
101  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_001, TestSize.Level1)102 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_001, TestSize.Level1)
103 {
104     CALL_TEST_DEBUG;
105     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
106     ASSERT_NE(hotkey, nullptr);
107 
108     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
109     OH_Input_SetPreKeys(hotkey, prekeys, 1);
110     OH_Input_SetFinalKey(hotkey, KEYCODE_Z);
111     OH_Input_SetRepeat(hotkey, false);
112     int32_t ret = OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
113     EXPECT_EQ(ret, INPUT_SERVICE_EXCEPTION);
114     ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
115     EXPECT_EQ(ret, INPUT_SUCCESS);
116     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
117     OH_Input_DestroyHotkey(&hotkey);
118     EXPECT_EQ(hotkey, nullptr);
119 }
120 
121 /**
122  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_002
123  * @tc.desc: Subscribe ctrl + alt + z
124  * @tc.type: FUNC
125  * @tc.require:
126  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_002, TestSize.Level1)127 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_002, TestSize.Level1)
128 {
129     CALL_TEST_DEBUG;
130     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
131     ASSERT_NE(hotkey, nullptr);
132 
133     int32_t prekeys[2] = { KEYCODE_CTRL_LEFT, KEYCODE_ALT_LEFT };
134     OH_Input_SetPreKeys(hotkey, prekeys, 2);
135     OH_Input_SetFinalKey(hotkey, KEYCODE_Z);
136     OH_Input_SetRepeat(hotkey, false);
137     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
138     EXPECT_EQ(ret, INPUT_SUCCESS);
139     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
140     OH_Input_DestroyHotkey(&hotkey);
141     EXPECT_EQ(hotkey, nullptr);
142 }
143 
144 /**
145  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_003
146  * @tc.desc: Subscribe shift + alt + z
147  * @tc.type: FUNC
148  * @tc.require:
149  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_003, TestSize.Level1)150 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_003, TestSize.Level1)
151 {
152     CALL_TEST_DEBUG;
153     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
154     ASSERT_NE(hotkey, nullptr);
155 
156     int32_t prekeys[2] = { KEYCODE_SHIFT_LEFT, KEYCODE_ALT_LEFT };
157     OH_Input_SetPreKeys(hotkey, prekeys, 2);
158     OH_Input_SetFinalKey(hotkey, KEYCODE_Z);
159     OH_Input_SetRepeat(hotkey, false);
160     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
161     EXPECT_EQ(ret, INPUT_SUCCESS);
162     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
163     OH_Input_DestroyHotkey(&hotkey);
164     EXPECT_EQ(hotkey, nullptr);
165 }
166 
167 /**
168  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_004
169  * @tc.desc: Subscribe alt + z
170  * @tc.type: FUNC
171  * @tc.require:
172  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_004, TestSize.Level1)173 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_004, TestSize.Level1)
174 {
175     CALL_TEST_DEBUG;
176     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
177     ASSERT_NE(hotkey, nullptr);
178 
179     int32_t prekeys[1] = { KEYCODE_ALT_LEFT };
180     OH_Input_SetPreKeys(hotkey, prekeys, 1);
181     OH_Input_SetFinalKey(hotkey, KEYCODE_Z);
182     OH_Input_SetRepeat(hotkey, false);
183     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
184     EXPECT_EQ(ret, INPUT_SUCCESS);
185     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
186     OH_Input_DestroyHotkey(&hotkey);
187     EXPECT_EQ(hotkey, nullptr);
188 }
189 
190 /**
191  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_005
192  * @tc.desc: Subscribe shift + c
193  * @tc.type: FUNC
194  * @tc.require:
195  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_005, TestSize.Level1)196 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_005, TestSize.Level1)
197 {
198     CALL_TEST_DEBUG;
199     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
200     ASSERT_NE(hotkey, nullptr);
201 
202     int32_t prekeys[1] = { KEYCODE_SHIFT_LEFT };
203     OH_Input_SetPreKeys(hotkey, prekeys, 1);
204     OH_Input_SetFinalKey(hotkey, KEYCODE_C);
205     OH_Input_SetRepeat(hotkey, false);
206     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
207     EXPECT_EQ(ret, INPUT_SUCCESS);
208     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
209     OH_Input_DestroyHotkey(&hotkey);
210     EXPECT_EQ(hotkey, nullptr);
211 }
212 
213 /**
214  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_006
215  * @tc.desc: Subscribe ctrl + 9
216  * @tc.type: FUNC
217  * @tc.require:
218  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_006, TestSize.Level1)219 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_006, TestSize.Level1)
220 {
221     CALL_TEST_DEBUG;
222     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
223     ASSERT_NE(hotkey, nullptr);
224 
225     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
226     OH_Input_SetPreKeys(hotkey, prekeys, 1);
227     OH_Input_SetFinalKey(hotkey, KEYCODE_9);
228     OH_Input_SetRepeat(hotkey, false);
229     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
230     EXPECT_EQ(ret, INPUT_SUCCESS);
231     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
232     OH_Input_SetFinalKey(hotkey, KEYCODE_NUMPAD_9);
233     OH_Input_SetRepeat(hotkey, true);
234     ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
235     EXPECT_EQ(ret, INPUT_SUCCESS);
236     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
237     OH_Input_DestroyHotkey(&hotkey);
238     EXPECT_EQ(hotkey, nullptr);
239 }
240 
241 /**
242  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_007
243  * @tc.desc: Subscribe ctrl + ↑
244  * @tc.type: FUNC
245  * @tc.require:
246  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_007, TestSize.Level1)247 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_007, TestSize.Level1)
248 {
249     CALL_TEST_DEBUG;
250     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
251     ASSERT_NE(hotkey, nullptr);
252 
253     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
254     OH_Input_SetPreKeys(hotkey, prekeys, 1);
255     OH_Input_SetFinalKey(hotkey, KEYCODE_DPAD_UP);
256     OH_Input_SetRepeat(hotkey, false);
257     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
258     EXPECT_EQ(ret, INPUT_SUCCESS);
259     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
260     OH_Input_DestroyHotkey(&hotkey);
261     EXPECT_EQ(hotkey, nullptr);
262 }
263 
264 /**
265  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_008
266  * @tc.desc: Subscribe ctrl + ←
267  * @tc.type: FUNC
268  * @tc.require:
269  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_008, TestSize.Level1)270 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_008, TestSize.Level1)
271 {
272     CALL_TEST_DEBUG;
273     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
274     ASSERT_NE(hotkey, nullptr);
275 
276     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
277     OH_Input_SetPreKeys(hotkey, prekeys, 1);
278     OH_Input_SetFinalKey(hotkey, KEYCODE_DPAD_LEFT);
279     OH_Input_SetRepeat(hotkey, false);
280     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
281     EXPECT_EQ(ret, INPUT_SUCCESS);
282     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
283     OH_Input_DestroyHotkey(&hotkey);
284     EXPECT_EQ(hotkey, nullptr);
285 }
286 
287 /**
288  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_009
289  * @tc.desc: Subscribe ctrl + F1
290  * @tc.type: FUNC
291  * @tc.require:
292  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_009, TestSize.Level1)293 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_009, TestSize.Level1)
294 {
295     CALL_TEST_DEBUG;
296     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
297     ASSERT_NE(hotkey, nullptr);
298 
299     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
300     OH_Input_SetPreKeys(hotkey, prekeys, 1);
301     OH_Input_SetFinalKey(hotkey, KEYCODE_F1);
302     OH_Input_SetRepeat(hotkey, false);
303     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
304     EXPECT_EQ(ret, INPUT_SUCCESS);
305     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
306     OH_Input_DestroyHotkey(&hotkey);
307     EXPECT_EQ(hotkey, nullptr);
308 }
309 
310 /**
311  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_010
312  * @tc.desc: Subscribe ctrl + home
313  * @tc.type: FUNC
314  * @tc.require:
315  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_010, TestSize.Level1)316 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_010, TestSize.Level1)
317 {
318     CALL_TEST_DEBUG;
319     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
320     ASSERT_NE(hotkey, nullptr);
321 
322     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
323     OH_Input_SetPreKeys(hotkey, prekeys, 1);
324     OH_Input_SetFinalKey(hotkey, KEYCODE_MOVE_HOME);
325     OH_Input_SetRepeat(hotkey, false);
326     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
327     EXPECT_EQ(ret, INPUT_SUCCESS);
328     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
329     OH_Input_DestroyHotkey(&hotkey);
330     EXPECT_EQ(hotkey, nullptr);
331 }
332 
333 /**
334  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_011
335  * @tc.desc: Subscribe ctrl + enter
336  * @tc.type: FUNC
337  * @tc.require:
338  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_011, TestSize.Level1)339 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_011, TestSize.Level1)
340 {
341     CALL_TEST_DEBUG;
342     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
343     ASSERT_NE(hotkey, nullptr);
344 
345     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
346     OH_Input_SetPreKeys(hotkey, prekeys, 1);
347     OH_Input_SetFinalKey(hotkey, KEYCODE_ENTER);
348     OH_Input_SetRepeat(hotkey, false);
349     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
350     EXPECT_EQ(ret, INPUT_SUCCESS);
351     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
352     OH_Input_DestroyHotkey(&hotkey);
353     EXPECT_EQ(hotkey, nullptr);
354 }
355 
356 /**
357  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_012
358  * @tc.desc: Subscribe ctrl + p
359  * @tc.type: FUNC
360  * @tc.require:
361  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_012, TestSize.Level1)362 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_012, TestSize.Level1)
363 {
364     CALL_TEST_DEBUG;
365     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
366     ASSERT_NE(hotkey, nullptr);
367 
368     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
369     OH_Input_SetPreKeys(hotkey, prekeys, 1);
370     OH_Input_SetFinalKey(hotkey, KEYCODE_P);
371     OH_Input_SetRepeat(hotkey, false);
372     int32_t ret = OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
373     EXPECT_EQ(ret, INPUT_SERVICE_EXCEPTION);
374     OH_Input_DestroyHotkey(&hotkey);
375     EXPECT_EQ(hotkey, nullptr);
376 }
377 
378 /**
379  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_013
380  * @tc.desc: Subscribe ctrl + alt + d + c
381  * @tc.type: FUNC
382  * @tc.require:
383  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_013, TestSize.Level1)384 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_013, TestSize.Level1)
385 {
386     CALL_TEST_DEBUG;
387     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
388     ASSERT_NE(hotkey, nullptr);
389 
390     int32_t prekeys[3] = { KEYCODE_CTRL_LEFT, KEYCODE_ALT_LEFT, KEYCODE_D };
391     OH_Input_SetPreKeys(hotkey, prekeys, 3);
392     OH_Input_SetFinalKey(hotkey, KEYCODE_C);
393     OH_Input_SetRepeat(hotkey, false);
394     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
395     EXPECT_EQ(ret, INPUT_PARAMETER_ERROR);
396     OH_Input_DestroyHotkey(&hotkey);
397     EXPECT_EQ(hotkey, nullptr);
398 }
399 
400 /**
401  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_014
402  * @tc.desc: Subscribe ctrl + alt + d + 9
403  * @tc.type: FUNC
404  * @tc.require:
405  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_014, TestSize.Level1)406 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_014, TestSize.Level1)
407 {
408     CALL_TEST_DEBUG;
409     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
410     ASSERT_NE(hotkey, nullptr);
411 
412     int32_t prekeys[3] = { KEYCODE_CTRL_LEFT, KEYCODE_ALT_LEFT, KEYCODE_D };
413     OH_Input_SetPreKeys(hotkey, prekeys, 3);
414     OH_Input_SetFinalKey(hotkey, KEYCODE_9);
415     OH_Input_SetRepeat(hotkey, false);
416     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
417     EXPECT_EQ(ret, INPUT_PARAMETER_ERROR);
418     OH_Input_DestroyHotkey(&hotkey);
419     EXPECT_EQ(hotkey, nullptr);
420 }
421 
422 /**
423  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_015
424  * @tc.desc: Subscribe 9 + d
425  * @tc.type: FUNC
426  * @tc.require:
427  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_015, TestSize.Level1)428 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_015, TestSize.Level1)
429 {
430     CALL_TEST_DEBUG;
431     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
432     ASSERT_NE(hotkey, nullptr);
433 
434     int32_t prekeys[1] = { KEYCODE_9 };
435     OH_Input_SetPreKeys(hotkey, prekeys, 1);
436     OH_Input_SetFinalKey(hotkey, KEYCODE_D);
437     OH_Input_SetRepeat(hotkey, false);
438     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
439     EXPECT_EQ(ret, INPUT_PARAMETER_ERROR);
440     OH_Input_DestroyHotkey(&hotkey);
441     EXPECT_EQ(hotkey, nullptr);
442 }
443 
444 /**
445  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_016
446  * @tc.desc: Subscribe f + d
447  * @tc.type: FUNC
448  * @tc.require:
449  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_016, TestSize.Level1)450 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_016, TestSize.Level1)
451 {
452     CALL_TEST_DEBUG;
453     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
454     ASSERT_NE(hotkey, nullptr);
455 
456     int32_t prekeys[1] = { KEYCODE_F };
457     OH_Input_SetPreKeys(hotkey, prekeys, 1);
458     OH_Input_SetFinalKey(hotkey, KEYCODE_D);
459     OH_Input_SetRepeat(hotkey, false);
460     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
461     EXPECT_EQ(ret, INPUT_PARAMETER_ERROR);
462     OH_Input_DestroyHotkey(&hotkey);
463     EXPECT_EQ(hotkey, nullptr);
464 }
465 
466 /**
467  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_017
468  * @tc.desc: Subscribe ctrl + meta
469  * @tc.type: FUNC
470  * @tc.require:
471  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_017, TestSize.Level1)472 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_017, TestSize.Level1)
473 {
474     CALL_TEST_DEBUG;
475     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
476     ASSERT_NE(hotkey, nullptr);
477 
478     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
479     OH_Input_SetPreKeys(hotkey, prekeys, 1);
480     OH_Input_SetFinalKey(hotkey, KEYCODE_META_LEFT);
481     OH_Input_SetRepeat(hotkey, false);
482     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
483     EXPECT_EQ(ret, INPUT_PARAMETER_ERROR);
484     OH_Input_DestroyHotkey(&hotkey);
485     EXPECT_EQ(hotkey, nullptr);
486 }
487 
488 /**
489  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_018
490  * @tc.desc: Subscribe left ctrl + right ctrl
491  * @tc.type: FUNC
492  * @tc.require:
493  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_018, TestSize.Level1)494 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_018, TestSize.Level1)
495 {
496     CALL_TEST_DEBUG;
497     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
498     ASSERT_NE(hotkey, nullptr);
499 
500     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
501     OH_Input_SetPreKeys(hotkey, prekeys, 1);
502     OH_Input_SetFinalKey(hotkey, KEYCODE_CTRL_RIGHT);
503     OH_Input_SetRepeat(hotkey, false);
504     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
505     EXPECT_EQ(ret, INPUT_PARAMETER_ERROR);
506     OH_Input_DestroyHotkey(&hotkey);
507     EXPECT_EQ(hotkey, nullptr);
508 }
509 
510 /**
511  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_019
512  * @tc.desc: Subscribe ctrl + Scroll Lock
513  * @tc.type: FUNC
514  * @tc.require:
515  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_019, TestSize.Level1)516 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_019, TestSize.Level1)
517 {
518     CALL_TEST_DEBUG;
519     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
520     ASSERT_NE(hotkey, nullptr);
521 
522     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
523     OH_Input_SetPreKeys(hotkey, prekeys, 1);
524     OH_Input_SetFinalKey(hotkey, KEYCODE_SCROLL_LOCK);
525     OH_Input_SetRepeat(hotkey, false);
526     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
527     EXPECT_EQ(ret, INPUT_SUCCESS);
528     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
529     OH_Input_DestroyHotkey(&hotkey);
530     EXPECT_EQ(hotkey, nullptr);
531 }
532 
533 /**
534  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_020
535  * @tc.desc: Verify the InjectKeyEvent
536  * @tc.type: FUNC
537  * @tc.require:
538  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_020, TestSize.Level1)539 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_020, TestSize.Level1)
540 {
541     CALL_TEST_DEBUG;
542     int32_t ret = OH_Input_AddHotkeyMonitor(nullptr, Input_HotkeyCallback);
543     EXPECT_EQ(ret, INPUT_PARAMETER_ERROR);
544 }
545 
546 /**
547  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_021
548  * @tc.desc: Verify the InjectKeyEvent
549  * @tc.type: FUNC
550  * @tc.require:
551  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_021, TestSize.Level1)552 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_021, TestSize.Level1)
553 {
554     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
555     ASSERT_NE(hotkey, nullptr);
556 
557     int32_t prekeys[2] = { KEYCODE_ALT_LEFT, KEYCODE_ALT_RIGHT };
558     OH_Input_SetPreKeys(hotkey, prekeys, 2);
559     int32_t key = 0;
560     int32_t key1 = 0;
561     int32_t *pressedKeys[2] = { &key, &key1 };
562     int32_t pressedKeyNum = 0;
563     Input_Result result = OH_Input_GetPreKeys(hotkey, pressedKeys, &pressedKeyNum);
564     EXPECT_EQ(result, INPUT_SUCCESS);
565     int32_t press= *pressedKeys[0];
566     int32_t press1= *pressedKeys[1];
567     EXPECT_EQ(press, KEYCODE_ALT_LEFT);
568     EXPECT_EQ(press1, KEYCODE_ALT_RIGHT);
569 
570     OH_Input_SetFinalKey(hotkey, KEYCODE_TAB);
571     int32_t finalKeyCode = 0;
572     result = OH_Input_GetFinalKey(hotkey, &finalKeyCode);
573     EXPECT_EQ(result, INPUT_SUCCESS);
574     EXPECT_EQ(finalKeyCode, KEYCODE_TAB);
575 
576     OH_Input_SetRepeat(hotkey, true);
577     bool isRepeat = false;
578     result = OH_Input_GetRepeat(hotkey, &isRepeat);
579     EXPECT_EQ(result, INPUT_SUCCESS);
580     EXPECT_EQ(isRepeat, true);
581 
582     OH_Input_SetRepeat(hotkey, false);
583     result = OH_Input_GetRepeat(hotkey, &isRepeat);
584     EXPECT_EQ(result, INPUT_SUCCESS);
585     EXPECT_EQ(isRepeat, false);
586 
587     OH_Input_DestroyHotkey(&hotkey);
588 }
589 
590 /**
591  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_022
592  * @tc.desc: Subscribe ctrl + tab
593  * @tc.type: FUNC
594  * @tc.require:
595  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_022, TestSize.Level1)596 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_022, TestSize.Level1)
597 {
598     CALL_TEST_DEBUG;
599     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
600     ASSERT_NE(hotkey, nullptr);
601 
602     int32_t prekeys[1] = { KEYCODE_CTRL_LEFT };
603     OH_Input_SetPreKeys(hotkey, prekeys, 1);
604     OH_Input_SetFinalKey(hotkey, KEYCODE_TAB);
605     OH_Input_SetRepeat(hotkey, false);
606     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
607     EXPECT_EQ(ret, INPUT_SUCCESS);
608     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
609     OH_Input_DestroyHotkey(&hotkey);
610     EXPECT_EQ(hotkey, nullptr);
611 }
612 
613 /**
614  * @tc.name: InputNativeHotkeyTest_AddHotkeyMonitor_023
615  * @tc.desc: Subscribe alt + tab
616  * @tc.type: FUNC
617  * @tc.require:
618  */
HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_023, TestSize.Level1)619 HWTEST_F(InputNativeHotkeyTest, InputNativeHotkeyTest_AddHotkeyMonitor_023, TestSize.Level1)
620 {
621     CALL_TEST_DEBUG;
622     Input_Hotkey *hotkey = OH_Input_CreateHotkey();
623     ASSERT_NE(hotkey, nullptr);
624 
625     int32_t prekeys[1] = { KEYCODE_ALT_LEFT };
626     OH_Input_SetPreKeys(hotkey, prekeys, 1);
627     OH_Input_SetFinalKey(hotkey, KEYCODE_TAB);
628     OH_Input_SetRepeat(hotkey, false);
629     int32_t ret = OH_Input_AddHotkeyMonitor(hotkey, Input_HotkeyCallback);
630     EXPECT_NE(ret, INPUT_OCCUPIED_BY_OTHER);
631     OH_Input_RemoveHotkeyMonitor(hotkey, Input_HotkeyCallback);
632     OH_Input_DestroyHotkey(&hotkey);
633     EXPECT_EQ(hotkey, nullptr);
634 }
635 } // namespace MMI
636 } // namespace OHOS
637