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