1 /*
2  * Copyright (c) 2021-2022 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 "define_multimodal.h"
19 #include "event_util_test.h"
20 #include "input_manager.h"
21 #include "key_event.h"
22 #include "mmi_log.h"
23 #include "proto.h"
24 
25 #undef MMI_LOG_TAG
26 #define MMI_LOG_TAG "KeyEventTest"
27 
28 namespace OHOS {
29 namespace MMI {
30 namespace {
31 using namespace testing::ext;
32 } // namespace
33 
34 class KeyEventTest : public testing::Test {
35 public:
SetUpTestCase(void)36     static void SetUpTestCase(void) {}
TearDownTestCase(void)37     static void TearDownTestCase(void) {}
38 };
39 
40 /**
41  * @tc.name: KeyEventTest_OnCheckKeyEvent_001
42  * @tc.desc: Verify key event
43  * @tc.type: FUNC
44  * @tc.require:
45  */
46 HWTEST_F(KeyEventTest, KeyEventTest_OnCheckKeyEvent_001, TestSize.Level1)
47 {
48     CALL_TEST_DEBUG;
49     auto KeyEvent = KeyEvent::Create();
50     ASSERT_NE(KeyEvent, nullptr);
51     KeyEvent->SetKeyCode(KeyEvent::KEYCODE_UNKNOWN);
52     ASSERT_TRUE(!KeyEvent->IsValid());
53 
54     KeyEvent->SetKeyCode(KeyEvent::KEYCODE_HOME);
55     KeyEvent->SetActionTime(0);
56     ASSERT_TRUE(!KeyEvent->IsValid());
57 
58     KeyEvent->SetKeyCode(KeyEvent::KEYCODE_HOME);
59     KeyEvent->SetActionTime(100);
60     KeyEvent->SetKeyAction(KeyEvent::KEY_ACTION_UNKNOWN);
61     ASSERT_TRUE(!KeyEvent->IsValid());
62 }
63 
64 /**
65  * @tc.name: KeyEventTest_OnCheckKeyEvent_002
66  * @tc.desc: Verify key event
67  * @tc.type: FUNC
68  * @tc.require:
69  */
70 HWTEST_F(KeyEventTest, KeyEventTest_OnCheckKeyEvent_002, TestSize.Level1)
71 {
72     CALL_TEST_DEBUG;
73     auto KeyEvent1 = KeyEvent::Create();
74     ASSERT_NE(KeyEvent1, nullptr);
75     KeyEvent1->SetKeyCode(KeyEvent::KEYCODE_HOME);
76     KeyEvent1->SetActionTime(100);
77     KeyEvent1->SetKeyAction(KeyEvent::KEY_ACTION_CANCEL);
78     KeyEvent::KeyItem item;
79     item.SetKeyCode(KeyEvent::KEYCODE_UNKNOWN);
80     KeyEvent1->AddKeyItem(item);
81     ASSERT_TRUE(!KeyEvent1->IsValid());
82 
83     auto KeyEvent2 = KeyEvent::Create();
84     ASSERT_NE(KeyEvent2, nullptr);
85     KeyEvent2->SetKeyCode(KeyEvent::KEYCODE_HOME);
86     KeyEvent2->SetActionTime(100);
87     KeyEvent2->SetKeyAction(KeyEvent::KEY_ACTION_CANCEL);
88     item.SetKeyCode(KeyEvent::KEYCODE_HOME);
89     item.SetDownTime(0);
90     KeyEvent2->AddKeyItem(item);
91     ASSERT_TRUE(!KeyEvent2->IsValid());
92 }
93 
94 /**
95  * @tc.name: KeyEventTest_OnCheckKeyEvent_003
96  * @tc.desc: Verify key event
97  * @tc.type: FUNC
98  * @tc.require:
99  */
100 HWTEST_F(KeyEventTest, KeyEventTest_OnCheckKeyEvent_003, TestSize.Level1)
101 {
102     CALL_TEST_DEBUG;
103     auto KeyEvent1 = KeyEvent::Create();
104     ASSERT_NE(KeyEvent1, nullptr);
105     KeyEvent1->SetKeyCode(KeyEvent::KEYCODE_HOME);
106     KeyEvent1->SetActionTime(100);
107     KeyEvent1->SetKeyAction(KeyEvent::KEY_ACTION_CANCEL);
108     KeyEvent::KeyItem item;
109     item.SetKeyCode(KeyEvent::KEYCODE_HOME);
110     item.SetDownTime(100);
111     item.SetPressed(false);
112     KeyEvent1->AddKeyItem(item);
113     ASSERT_TRUE(!KeyEvent1->IsValid());
114 
115     auto KeyEvent2 = KeyEvent::Create();
116     ASSERT_NE(KeyEvent2, nullptr);
117     KeyEvent2->SetKeyCode(KeyEvent::KEYCODE_HOME);
118     KeyEvent2->SetActionTime(100);
119     KeyEvent2->SetKeyAction(KeyEvent::KEY_ACTION_UP);
120     item.SetKeyCode(KeyEvent::KEYCODE_BACK);
121     item.SetDownTime(100);
122     item.SetPressed(false);
123     KeyEvent2->AddKeyItem(item);
124     ASSERT_TRUE(!KeyEvent2->IsValid());
125 }
126 
127 /**
128  * @tc.name: KeyEventTest_OnCheckKeyEvent_004
129  * @tc.desc: Verify key event
130  * @tc.type: FUNC
131  * @tc.require:
132  */
133 HWTEST_F(KeyEventTest, KeyEventTest_OnCheckKeyEvent_004, TestSize.Level1)
134 {
135     CALL_TEST_DEBUG;
136     auto KeyEvent1 = KeyEvent::Create();
137     ASSERT_NE(KeyEvent1, nullptr);
138     KeyEvent1->SetKeyCode(KeyEvent::KEYCODE_HOME);
139     KeyEvent1->SetActionTime(100);
140     KeyEvent1->SetKeyAction(KeyEvent::KEY_ACTION_UP);
141     KeyEvent::KeyItem item1;
142     item1.SetKeyCode(KeyEvent::KEYCODE_HOME);
143     item1.SetDownTime(100);
144     item1.SetPressed(false);
145     KeyEvent1->AddKeyItem(item1);
146     KeyEvent::KeyItem item2;
147     item2.SetKeyCode(KeyEvent::KEYCODE_HOME);
148     item2.SetDownTime(100);
149     item2.SetPressed(false);
150     KeyEvent1->AddKeyItem(item2);
151     ASSERT_TRUE(!KeyEvent1->IsValid());
152 
153     auto KeyEvent2 = KeyEvent::Create();
154     ASSERT_NE(KeyEvent2, nullptr);
155     KeyEvent2->SetKeyCode(KeyEvent::KEYCODE_HOME);
156     KeyEvent2->SetActionTime(100);
157     KeyEvent2->SetKeyAction(KeyEvent::KEY_ACTION_CANCEL);
158     ASSERT_TRUE(!KeyEvent2->IsValid());
159 }
160 
161 /**
162  * @tc.name: KeyEventTest_OnCheckKeyEvent_005
163  * @tc.desc: Verify key event
164  * @tc.type: FUNC
165  * @tc.require:
166  */
167 HWTEST_F(KeyEventTest, KeyEventTest_OnCheckKeyEvent_005, TestSize.Level1)
168 {
169     CALL_TEST_DEBUG;
170     auto KeyEvent1 = KeyEvent::Create();
171     ASSERT_NE(KeyEvent1, nullptr);
172     KeyEvent1->SetKeyCode(KeyEvent::KEYCODE_HOME);
173     KeyEvent1->SetActionTime(100);
174     KeyEvent1->SetKeyAction(KeyEvent::KEY_ACTION_UP);
175     KeyEvent::KeyItem item1;
176     item1.SetKeyCode(KeyEvent::KEYCODE_HOME);
177     item1.SetDownTime(100);
178     item1.SetPressed(false);
179     KeyEvent1->AddKeyItem(item1);
180     KeyEvent::KeyItem item2;
181     item2.SetKeyCode(KeyEvent::KEYCODE_BACK);
182     item2.SetDownTime(100);
183     item2.SetPressed(true);
184     KeyEvent1->AddKeyItem(item2);
185     ASSERT_TRUE(KeyEvent1->IsValid());
186 
187     auto KeyEvent2 = KeyEvent::Create();
188     ASSERT_NE(KeyEvent2, nullptr);
189     KeyEvent2->SetKeyCode(KeyEvent::KEYCODE_HOME);
190     KeyEvent2->SetActionTime(100);
191     KeyEvent2->SetKeyAction(KeyEvent::KEY_ACTION_DOWN);
192     item1.SetKeyCode(KeyEvent::KEYCODE_HOME);
193     item1.SetDownTime(100);
194     item1.SetPressed(true);
195     KeyEvent2->AddKeyItem(item1);
196     ASSERT_TRUE(KeyEvent2->IsValid());
197 }
198 
199 /**
200  * @tc.name: KeyEventTest_OnCheckKeyEvent_006
201  * @tc.desc: Verify key event
202  * @tc.type: FUNC
203  * @tc.require: I5QSN3
204  */
205 HWTEST_F(KeyEventTest, KeyEventTest_OnCheckKeyEvent_006, TestSize.Level1)
206 {
207     CALL_TEST_DEBUG;
208     auto inputEvent = InputEvent::Create();
209     ASSERT_NE(inputEvent, nullptr);
210     auto event1 = KeyEvent::from(inputEvent);
211     ASSERT_EQ(event1, nullptr);
212     auto keyEvent = KeyEvent::Create();
213     ASSERT_NE(keyEvent, nullptr);
214     auto event2 = KeyEvent::Clone(keyEvent);
215     ASSERT_NE(event2, nullptr);
216     keyEvent->SetKeyCode(KeyEvent::KEYCODE_BACK);
217     keyEvent->SetActionTime(100);
218     keyEvent->SetKeyAction(KeyEvent::KEY_ACTION_DOWN);
219 
220     InputManager::GetInstance()->SimulateInputEvent(keyEvent);
221     keyEvent->ActionToString(KeyEvent::KEY_ACTION_DOWN);
222     keyEvent->KeyCodeToString(KeyEvent::KEYCODE_BACK);
223     KeyEvent::KeyItem item;
224     item.SetKeyCode(KeyEvent::KEYCODE_BACK);
225     item.SetDownTime(100);
226     item.SetPressed(true);
227     item.SetUnicode(0);
228     keyEvent->AddKeyItem(item);
229     ASSERT_TRUE(keyEvent->IsValid());
230     std::vector<KeyEvent::KeyItem> items = keyEvent->GetKeyItems();
231     TestUtil->DumpInputEvent(keyEvent);
232 }
233 
234 /**
235  * @tc.name: KeyEventTest_GetFunctionKey_001
236  * @tc.desc: Set Numlock for keyevent to false
237  * @tc.type: FUNC
238  * @tc.require: I5HMCX
239  */
240 HWTEST_F(KeyEventTest, KeyEventTest_GetFunctionKey_001, TestSize.Level1)
241 {
242     CALL_TEST_DEBUG;
243     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
244     ASSERT_NE(keyEvent, nullptr);
245     keyEvent->SetFunctionKey(KeyEvent::NUM_LOCK_FUNCTION_KEY, false);
246     bool result = keyEvent->GetFunctionKey(KeyEvent::NUM_LOCK_FUNCTION_KEY);
247     ASSERT_FALSE(result);
248 }
249 
250 /**
251  * @tc.name: KeyEventTest_GetFunctionKey_002
252  * @tc.desc: Set Numlock for keyevent to true
253  * @tc.type: FUNC
254  * @tc.require: I5HMCX
255  */
256 HWTEST_F(KeyEventTest, KeyEventTest_GetFunctionKey_002, TestSize.Level1)
257 {
258     CALL_TEST_DEBUG;
259     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
260     ASSERT_NE(keyEvent, nullptr);
261     keyEvent->SetFunctionKey(KeyEvent::NUM_LOCK_FUNCTION_KEY, true);
262     bool result = keyEvent->GetFunctionKey(KeyEvent::NUM_LOCK_FUNCTION_KEY);
263     ASSERT_TRUE(result);
264 }
265 
266 /**
267  * @tc.name: KeyEventTest_GetFunctionKey_003
268  * @tc.desc: Set Capslock for keyevent to false
269  * @tc.type: FUNC
270  * @tc.require: I5HMCX
271  */
272 HWTEST_F(KeyEventTest, KeyEventTest_GetFunctionKey_003, TestSize.Level1)
273 {
274     CALL_TEST_DEBUG;
275     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
276     ASSERT_NE(keyEvent, nullptr);
277     keyEvent->SetFunctionKey(KeyEvent::CAPS_LOCK_FUNCTION_KEY, false);
278     bool result = keyEvent->GetFunctionKey(KeyEvent::CAPS_LOCK_FUNCTION_KEY);
279     ASSERT_FALSE(result);
280 }
281 
282 /**
283  * @tc.name: KeyEventTest_GetFunctionKey_004
284  * @tc.desc: Set Capslock for keyevent to true
285  * @tc.type: FUNC
286  * @tc.require: I5HMCX
287  */
288 HWTEST_F(KeyEventTest, KeyEventTest_GetFunctionKey_004, TestSize.Level1)
289 {
290     CALL_TEST_DEBUG;
291     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
292     ASSERT_NE(keyEvent, nullptr);
293     keyEvent->SetFunctionKey(KeyEvent::CAPS_LOCK_FUNCTION_KEY, true);
294     bool result = keyEvent->GetFunctionKey(KeyEvent::CAPS_LOCK_FUNCTION_KEY);
295     ASSERT_TRUE(result);
296 }
297 
298 /**
299  * @tc.name: KeyEventTest_GetKeyIntention_001
300  * @tc.desc: GetKey intention
301  * @tc.type: FUNC
302  * @tc.require: I5HMCX
303  */
304 HWTEST_F(KeyEventTest, KeyEventTest_GetKeyIntention_001, TestSize.Level1)
305 {
306     CALL_TEST_DEBUG;
307     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
308     ASSERT_NE(keyEvent, nullptr);
309     int32_t result = keyEvent->GetKeyIntention();
310     ASSERT_EQ(result, -1);
311 }
312 
313 /**
314  * @tc.name: KeyEventTest_GetFunctionKey_005
315  * @tc.desc: Set Scrolllock for keyevent to false
316  * @tc.type: FUNC
317  * @tc.require: I5HMCX
318  */
319 HWTEST_F(KeyEventTest, KeyEventTest_GetFunctionKey_005, TestSize.Level1)
320 {
321     CALL_TEST_DEBUG;
322     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
323     ASSERT_NE(keyEvent, nullptr);
324     keyEvent->SetFunctionKey(KeyEvent::SCROLL_LOCK_FUNCTION_KEY, false);
325     bool result = keyEvent->GetFunctionKey(KeyEvent::SCROLL_LOCK_FUNCTION_KEY);
326     ASSERT_FALSE(result);
327 }
328 
329 /**
330  * @tc.name: KeyEventTest_GetFunctionKey_006
331  * @tc.desc: Set Scrolllock for keyevent to true
332  * @tc.type: FUNC
333  * @tc.require: I5HMCX
334  */
335 HWTEST_F(KeyEventTest, KeyEventTest_GetFunctionKey_006, TestSize.Level1)
336 {
337     CALL_TEST_DEBUG;
338     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
339     ASSERT_NE(keyEvent, nullptr);
340     keyEvent->SetFunctionKey(KeyEvent::SCROLL_LOCK_FUNCTION_KEY, true);
341     bool result = keyEvent->GetFunctionKey(KeyEvent::SCROLL_LOCK_FUNCTION_KEY);
342     ASSERT_TRUE(result);
343 }
344 
345 /**
346  * @tc.name: KeyEventTest_TransitionFunctionKey_001
347  * @tc.desc: Transition keycode to function key
348  * @tc.type: FUNC
349  * @tc.require: I5HMCX
350  */
351 HWTEST_F(KeyEventTest, KeyEventTest_TransitionFunctionKey_001, TestSize.Level1)
352 {
353     CALL_TEST_DEBUG;
354     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
355     ASSERT_NE(keyEvent, nullptr);
356     int32_t lockCode = keyEvent->TransitionFunctionKey(KeyEvent::KEYCODE_NUM_LOCK);
357     ASSERT_EQ(lockCode, KeyEvent::NUM_LOCK_FUNCTION_KEY);
358 }
359 
360 /**
361  * @tc.name: KeyEventTest_TransitionFunctionKey_002
362  * @tc.desc: Transition keycode to function key
363  * @tc.type: FUNC
364  * @tc.require: I5HMCX
365  */
366 HWTEST_F(KeyEventTest, KeyEventTest_TransitionFunctionKey_002, TestSize.Level1)
367 {
368     CALL_TEST_DEBUG;
369     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
370     ASSERT_NE(keyEvent, nullptr);
371     int32_t lockCode = keyEvent->TransitionFunctionKey(KeyEvent::KEYCODE_SCROLL_LOCK);
372     ASSERT_EQ(lockCode, KeyEvent::SCROLL_LOCK_FUNCTION_KEY);
373 }
374 
375 /**
376  * @tc.name: KeyEventTest_TransitionFunctionKey_003
377  * @tc.desc: Transition keycode to function key
378  * @tc.type: FUNC
379  * @tc.require: I5HMCX
380  */
381 HWTEST_F(KeyEventTest, KeyEventTest_TransitionFunctionKey_003, TestSize.Level1)
382 {
383     CALL_TEST_DEBUG;
384     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
385     ASSERT_NE(keyEvent, nullptr);
386     int32_t lockCode = keyEvent->TransitionFunctionKey(KeyEvent::KEYCODE_CAPS_LOCK);
387     ASSERT_EQ(lockCode, KeyEvent::CAPS_LOCK_FUNCTION_KEY);
388 }
389 
390 /**
391  * @tc.name: KeyEventTest_TransitionFunctionKey_004
392  * @tc.desc: Transition not support keycode to function key
393  * @tc.type: FUNC
394  * @tc.require: I5HMCX
395  */
396 HWTEST_F(KeyEventTest, KeyEventTest_TransitionFunctionKey_004, TestSize.Level1)
397 {
398     CALL_TEST_DEBUG;
399     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
400     ASSERT_NE(keyEvent, nullptr);
401     int32_t lockCode = keyEvent->TransitionFunctionKey(KeyEvent::KEYCODE_A);
402     ASSERT_EQ(lockCode, KeyEvent::UNKNOWN_FUNCTION_KEY);
403 }
404 
405 /**
406  * @tc.name: KeyEventTest_ReadFromParcel_001
407  * @tc.desc: Read from parcel
408  * @tc.type: FUNC
409  * @tc.require:
410  */
411 HWTEST_F(KeyEventTest, KeyEventTest_ReadFromParcel_001, TestSize.Level1)
412 {
413     CALL_TEST_DEBUG;
414     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
415     ASSERT_NE(keyEvent, nullptr);
416     keyEvent->SetKeyCode(KeyEvent::KEYCODE_HOME);
417     keyEvent->SetActionTime(100);
418     keyEvent->SetKeyAction(KeyEvent::KEY_ACTION_DOWN);
419     keyEvent->ActionToString(KeyEvent::KEY_ACTION_DOWN);
420     keyEvent->KeyCodeToString(KeyEvent::KEYCODE_HOME);
421     KeyEvent::KeyItem item;
422     item.SetKeyCode(KeyEvent::KEYCODE_HOME);
423     item.SetDownTime(100);
424     item.SetPressed(true);
425     keyEvent->AddKeyItem(item);
426     MessageParcel data;
427     bool ret = keyEvent->WriteToParcel(data);
428     ASSERT_TRUE(ret);
429     ret = keyEvent->ReadFromParcel(data);
430     ASSERT_TRUE(ret);
431 }
432 
433 /**
434  * @tc.name: KeyEventTest_ReadFromParcel_002
435  * @tc.desc: Read from parcel
436  * @tc.type: FUNC
437  * @tc.require:
438  */
439 HWTEST_F(KeyEventTest, KeyEventTest_ReadFromParcel_002, TestSize.Level1)
440 {
441     CALL_TEST_DEBUG;
442     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
443     ASSERT_NE(keyEvent, nullptr);
444     keyEvent->SetKeyCode(KeyEvent::KEYCODE_HOME);
445     keyEvent->SetActionTime(100);
446     keyEvent->SetKeyAction(KeyEvent::KEY_ACTION_DOWN);
447     keyEvent->ActionToString(KeyEvent::KEY_ACTION_DOWN);
448     keyEvent->KeyCodeToString(KeyEvent::KEYCODE_HOME);
449     KeyEvent::KeyItem item;
450     item.SetKeyCode(KeyEvent::KEYCODE_HOME);
451     item.SetDownTime(100);
452     item.SetPressed(true);
453     keyEvent->AddKeyItem(item);
454     MessageParcel data;
455     bool ret = keyEvent->WriteToParcel(data);
456     ASSERT_TRUE(ret);
457     std::shared_ptr<InputEvent> inputEvent = InputEvent::Create();
458     ret = inputEvent->ReadFromParcel(data);
459     ASSERT_TRUE(ret);
460     int32_t keyCode;
461     ret = data.ReadInt32(keyCode);
462     ASSERT_TRUE(ret);
463     const int32_t keysSize = data.ReadInt32();
464     ASSERT_FALSE(keysSize < 0);
465     for (int32_t i = 0; i < keysSize; ++i) {
466         KeyEvent::KeyItem keyItem = {};
467         ret = keyItem.ReadFromParcel(data);
468         ASSERT_TRUE(ret);
469     }
470 }
471 
472 /**
473  * @tc.name: KeyEventTest_ReadFromParcel_003
474  * @tc.desc: Verify keyoption read from parcel
475  * @tc.type: FUNC
476  * @tc.require:
477  */
478 HWTEST_F(KeyEventTest, KeyEventTest_ReadFromParcel_003, TestSize.Level1)
479 {
480     CALL_TEST_DEBUG;
481     std::set<int32_t> preKeys;
482     std::shared_ptr<KeyOption> keyOption = std::make_shared<KeyOption>();
483     keyOption->SetPreKeys(preKeys);
484     MessageParcel data;
485     bool ret = keyOption->ReadFromParcel(data);
486     ASSERT_FALSE(ret);
487     preKeys.insert(0);
488     preKeys.insert(1);
489     keyOption->SetPreKeys(preKeys);
490     keyOption->SetFinalKey(0);
491     keyOption->SetFinalKeyDown(0);
492     keyOption->SetFinalKeyDownDuration(0);
493     keyOption->SetFinalKeyUpDelay(0);
494     keyOption->WriteToParcel(data);
495     ret = keyOption->ReadFromParcel(data);
496     ASSERT_TRUE(ret);
497 }
498 
499 #ifdef OHOS_BUILD_ENABLE_SECURITY_COMPONENT
500 /**
501  * @tc.name: KeyEventTest_SetEnhanceData_001
502  * @tc.desc: Set the enhance data.
503  * @tc.type: FUNC
504  * @tc.require:
505  */
506 HWTEST_F(KeyEventTest, KeyEventTest_SetEnhanceData_001, TestSize.Level1)
507 {
508     CALL_TEST_DEBUG;
509     auto KeyEvent = KeyEvent::Create();
510     ASSERT_NE(KeyEvent, nullptr);
511     uint32_t enHanceDataLen = 3;
512     uint8_t enhanceDataBuf[enHanceDataLen];
513     std::vector<uint8_t> enhanceData;
514     for (uint32_t i = 0; i < enHanceDataLen; i++) {
515         enhanceData.push_back(enhanceDataBuf[i]);
516     }
517 
518     ASSERT_NO_FATAL_FAILURE(KeyEvent->SetEnhanceData(enhanceData));
519     ASSERT_EQ(KeyEvent->GetEnhanceData(), enhanceData);
520 }
521 #endif // OHOS_BUILD_ENABLE_SECURITY_COMPONENT
522 
523 /**
524  * @tc.name: KeyEventTest_IsRepeat_001
525  * @tc.desc: Set repeat_ to false
526  * @tc.type: FUNC
527  * @tc.require: I5HMCX
528  */
529 HWTEST_F(KeyEventTest, KeyEventTest_IsRepeat_001, TestSize.Level1)
530 {
531     CALL_TEST_DEBUG;
532     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
533     ASSERT_NE(keyEvent, nullptr);
534     keyEvent->SetRepeat(false);
535     bool result = keyEvent->IsRepeat();
536     ASSERT_FALSE(result);
537 }
538 
539 /**
540  * @tc.name: KeyEventTest_IsRepeat_002
541  * @tc.desc: Set repeat_ to true
542  * @tc.type: FUNC
543  * @tc.require: I5HMCX
544  */
545 HWTEST_F(KeyEventTest, KeyEventTest_IsRepeat_002, TestSize.Level1)
546 {
547     CALL_TEST_DEBUG;
548     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
549     ASSERT_NE(keyEvent, nullptr);
550     keyEvent->SetRepeat(true);
551     bool result = keyEvent->IsRepeat();
552     ASSERT_TRUE(result);
553 }
554 
555 /**
556  * @tc.name: KeyEventTest_Reset
557  * @tc.desc: Test Reset
558  * @tc.type: FUNC
559  * @tc.require: I5HMCX
560  */
561 HWTEST_F(KeyEventTest, KeyEventTest_Reset, TestSize.Level1)
562 {
563     CALL_TEST_DEBUG;
564     std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
565     ASSERT_NE(keyEvent, nullptr);
566     ASSERT_NO_FATAL_FAILURE(keyEvent->Reset());
567 }
568 } // namespace MMI
569 } // namespace OHOS
570