1c29fa5a6Sopenharmony_ci/*
2c29fa5a6Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License.
5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at
6c29fa5a6Sopenharmony_ci *
7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8c29fa5a6Sopenharmony_ci *
9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and
13c29fa5a6Sopenharmony_ci * limitations under the License.
14c29fa5a6Sopenharmony_ci */
15c29fa5a6Sopenharmony_ci
16c29fa5a6Sopenharmony_ci#include <fstream>
17c29fa5a6Sopenharmony_ci#include <list>
18c29fa5a6Sopenharmony_ci#include <gtest/gtest.h>
19c29fa5a6Sopenharmony_ci
20c29fa5a6Sopenharmony_ci#include "ability_manager_client.h"
21c29fa5a6Sopenharmony_ci#include "display_event_monitor.h"
22c29fa5a6Sopenharmony_ci#include "event_log_helper.h"
23c29fa5a6Sopenharmony_ci#include "key_option.h"
24c29fa5a6Sopenharmony_ci#include "key_gesture_manager.h"
25c29fa5a6Sopenharmony_ci#include "key_event.h"
26c29fa5a6Sopenharmony_ci#include "mmi_log.h"
27c29fa5a6Sopenharmony_ci#include "nap_process.h"
28c29fa5a6Sopenharmony_ci#include "switch_subscriber_handler.h"
29c29fa5a6Sopenharmony_ci#include "uds_server.h"
30c29fa5a6Sopenharmony_ci
31c29fa5a6Sopenharmony_ci#undef MMI_LOG_TAG
32c29fa5a6Sopenharmony_ci#define MMI_LOG_TAG "KeyGestureManagerTest"
33c29fa5a6Sopenharmony_ci
34c29fa5a6Sopenharmony_cinamespace OHOS {
35c29fa5a6Sopenharmony_cinamespace MMI {
36c29fa5a6Sopenharmony_cinamespace {
37c29fa5a6Sopenharmony_ciusing namespace testing::ext;
38c29fa5a6Sopenharmony_ciconstexpr int32_t INVALID_ENTITY_ID { -1 };
39c29fa5a6Sopenharmony_ciconstexpr size_t SINGLE_KEY_PRESSED { 1 };
40c29fa5a6Sopenharmony_ci} // namespace
41c29fa5a6Sopenharmony_ci
42c29fa5a6Sopenharmony_ciclass KeyGestureManagerTest : public testing::Test {
43c29fa5a6Sopenharmony_cipublic:
44c29fa5a6Sopenharmony_ci    static void SetUpTestCase(void) {}
45c29fa5a6Sopenharmony_ci    static void TearDownTestCase(void) {}
46c29fa5a6Sopenharmony_ci};
47c29fa5a6Sopenharmony_ci
48c29fa5a6Sopenharmony_ciclass MyKeyGesture : public KeyGestureManager::KeyGesture {
49c29fa5a6Sopenharmony_cipublic:
50c29fa5a6Sopenharmony_ci    MyKeyGesture() = default;
51c29fa5a6Sopenharmony_ci    ~MyKeyGesture() override = default;
52c29fa5a6Sopenharmony_ci
53c29fa5a6Sopenharmony_ci    bool IsWorking() override
54c29fa5a6Sopenharmony_ci    {
55c29fa5a6Sopenharmony_ci        return true;
56c29fa5a6Sopenharmony_ci    }
57c29fa5a6Sopenharmony_ci
58c29fa5a6Sopenharmony_ci    bool ShouldIntercept(std::shared_ptr<KeyOption> keyOption) const override
59c29fa5a6Sopenharmony_ci    {
60c29fa5a6Sopenharmony_ci        return true;
61c29fa5a6Sopenharmony_ci    }
62c29fa5a6Sopenharmony_ci
63c29fa5a6Sopenharmony_ci    bool Intercept(std::shared_ptr<KeyEvent> keyEvent) override
64c29fa5a6Sopenharmony_ci    {
65c29fa5a6Sopenharmony_ci        return true;
66c29fa5a6Sopenharmony_ci    }
67c29fa5a6Sopenharmony_ci
68c29fa5a6Sopenharmony_ci    void Dump(std::ostringstream &output) const override
69c29fa5a6Sopenharmony_ci    {
70c29fa5a6Sopenharmony_ci        output << "MyKeyGesture";
71c29fa5a6Sopenharmony_ci    }
72c29fa5a6Sopenharmony_ci};
73c29fa5a6Sopenharmony_ci
74c29fa5a6Sopenharmony_ci/**
75c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_Intercept_002
76c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation Intercept
77c29fa5a6Sopenharmony_ci * @tc.type: FUNC
78c29fa5a6Sopenharmony_ci * @tc.require:
79c29fa5a6Sopenharmony_ci */
80c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_Intercept_002, TestSize.Level1)
81c29fa5a6Sopenharmony_ci{
82c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
83c29fa5a6Sopenharmony_ci    KeyGestureManager keyGestureManager;
84c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
85c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
86c29fa5a6Sopenharmony_ci    auto keyGesture1 = std::make_unique<MyKeyGesture>();
87c29fa5a6Sopenharmony_ci    auto keyGesture2 = std::make_unique<MyKeyGesture>();
88c29fa5a6Sopenharmony_ci    auto keyGesture3 = std::make_unique<MyKeyGesture>();
89c29fa5a6Sopenharmony_ci    keyGestureManager.keyGestures_.push_back(std::move(keyGesture1));
90c29fa5a6Sopenharmony_ci    keyGestureManager.keyGestures_.push_back(std::move(keyGesture2));
91c29fa5a6Sopenharmony_ci    keyGestureManager.keyGestures_.push_back(std::move(keyGesture3));
92c29fa5a6Sopenharmony_ci    EXPECT_FALSE(EventLogHelper::IsBetaVersion());
93c29fa5a6Sopenharmony_ci    EXPECT_FALSE(keyEvent->HasFlag(InputEvent::EVENT_FLAG_PRIVACY_MODE));
94c29fa5a6Sopenharmony_ci    EXPECT_TRUE(keyGestureManager.Intercept(keyEvent));
95c29fa5a6Sopenharmony_ci}
96c29fa5a6Sopenharmony_ci
97c29fa5a6Sopenharmony_ci/**
98c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_TriggerHandlers_01
99c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation TriggerHandlers
100c29fa5a6Sopenharmony_ci * @tc.type: FUNC
101c29fa5a6Sopenharmony_ci * @tc.require:
102c29fa5a6Sopenharmony_ci */
103c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_TriggerHandlers_01, TestSize.Level1)
104c29fa5a6Sopenharmony_ci{
105c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
106c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
107c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler1(1, 10, 500, myCallback);
108c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler2(2, 20, 1000, myCallback);
109c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler3(3, 30, 1500, myCallback);
110c29fa5a6Sopenharmony_ci
111c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
112c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler1);
113c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler2);
114c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler3);
115c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
116c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
117c29fa5a6Sopenharmony_ci
118c29fa5a6Sopenharmony_ci    std::set<int32_t> foregroundPids = myKeyGesture->GetForegroundPids();
119c29fa5a6Sopenharmony_ci    bool haveForeground = myKeyGesture->HaveForegroundHandler(foregroundPids);
120c29fa5a6Sopenharmony_ci    EXPECT_FALSE(haveForeground);
121c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(myKeyGesture->TriggerHandlers(keyEvent));
122c29fa5a6Sopenharmony_ci}
123c29fa5a6Sopenharmony_ci
124c29fa5a6Sopenharmony_ci/**
125c29fa5a6Sopenharmony_ci * @tc.name: LongPressSingleKey_Dump_01
126c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation LongPressSingleKey_Dump
127c29fa5a6Sopenharmony_ci * @tc.type: FUNC
128c29fa5a6Sopenharmony_ci * @tc.require:
129c29fa5a6Sopenharmony_ci */
130c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, LongPressSingleKey_Dump_01, TestSize.Level1)
131c29fa5a6Sopenharmony_ci{
132c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
133c29fa5a6Sopenharmony_ci    int32_t keyCode = 1;
134c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressSingleKey longPressSingleKey(keyCode);
135c29fa5a6Sopenharmony_ci    std::ostringstream output;
136c29fa5a6Sopenharmony_ci    longPressSingleKey.keyCode_ = 2;
137c29fa5a6Sopenharmony_ci
138c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
139c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler1(1, 10, 500, myCallback);
140c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler2(2, 20, 1000, myCallback);
141c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler3(3, 30, 1500, myCallback);
142c29fa5a6Sopenharmony_ci
143c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
144c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler1);
145c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler2);
146c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler3);
147c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(longPressSingleKey.Dump(output));
148c29fa5a6Sopenharmony_ci}
149c29fa5a6Sopenharmony_ci
150c29fa5a6Sopenharmony_ci/**
151c29fa5a6Sopenharmony_ci * @tc.name: LongPressCombinationKey_Dump_01
152c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation LongPressCombinationKey_Dump
153c29fa5a6Sopenharmony_ci * @tc.type: FUNC
154c29fa5a6Sopenharmony_ci * @tc.require:
155c29fa5a6Sopenharmony_ci */
156c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, LongPressCombinationKey_Dump_01, TestSize.Level1)
157c29fa5a6Sopenharmony_ci{
158c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
159c29fa5a6Sopenharmony_ci    std::set<int32_t> keys = {1, 2, 3};
160c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressCombinationKey longPressCombinationKey(keys);
161c29fa5a6Sopenharmony_ci    std::ostringstream output;
162c29fa5a6Sopenharmony_ci    longPressCombinationKey.keys_ = {3, 4, 5, 6};
163c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(longPressCombinationKey.Dump(output));
164c29fa5a6Sopenharmony_ci
165c29fa5a6Sopenharmony_ci    longPressCombinationKey.keys_ = {};
166c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
167c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler1(1, 10, 500, myCallback);
168c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler2(2, 20, 1000, myCallback);
169c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler3(3, 30, 1500, myCallback);
170c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
171c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler1);
172c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler2);
173c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler3);
174c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(longPressCombinationKey.Dump(output));
175c29fa5a6Sopenharmony_ci}
176c29fa5a6Sopenharmony_ci
177c29fa5a6Sopenharmony_ci/**
178c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_Intercept_01
179c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation Intercept
180c29fa5a6Sopenharmony_ci * @tc.type: FUNC
181c29fa5a6Sopenharmony_ci * @tc.require:
182c29fa5a6Sopenharmony_ci */
183c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_Intercept_01, TestSize.Level1)
184c29fa5a6Sopenharmony_ci{
185c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
186c29fa5a6Sopenharmony_ci    KeyGestureManager keyGestureManager;
187c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
188c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
189c29fa5a6Sopenharmony_ci    bool ret = keyGestureManager.Intercept(keyEvent);
190c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
191c29fa5a6Sopenharmony_ci}
192c29fa5a6Sopenharmony_ci
193c29fa5a6Sopenharmony_ci/**
194c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RemoveKeyGesture_01
195c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RemoveKeyGesture
196c29fa5a6Sopenharmony_ci * @tc.type: FUNC
197c29fa5a6Sopenharmony_ci * @tc.require:
198c29fa5a6Sopenharmony_ci */
199c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RemoveKeyGesture_01, TestSize.Level1)
200c29fa5a6Sopenharmony_ci{
201c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
202c29fa5a6Sopenharmony_ci    KeyGestureManager keyGestureManager;
203c29fa5a6Sopenharmony_ci    int32_t id = 1;
204c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(keyGestureManager.RemoveKeyGesture(id));
205c29fa5a6Sopenharmony_ci}
206c29fa5a6Sopenharmony_ci
207c29fa5a6Sopenharmony_ci/**
208c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RemoveKeyGesture_02
209c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RemoveKeyGesture
210c29fa5a6Sopenharmony_ci * @tc.type: FUNC
211c29fa5a6Sopenharmony_ci * @tc.require:
212c29fa5a6Sopenharmony_ci */
213c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RemoveKeyGesture_02, TestSize.Level1)
214c29fa5a6Sopenharmony_ci{
215c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
216c29fa5a6Sopenharmony_ci    KeyGestureManager keyGestureManager;
217c29fa5a6Sopenharmony_ci    int32_t id = -2;
218c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(keyGestureManager.RemoveKeyGesture(id));
219c29fa5a6Sopenharmony_ci}
220c29fa5a6Sopenharmony_ci
221c29fa5a6Sopenharmony_ci/**
222c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_AddKeyGesture_01
223c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation AddKeyGesture
224c29fa5a6Sopenharmony_ci * @tc.type: FUNC
225c29fa5a6Sopenharmony_ci * @tc.require:
226c29fa5a6Sopenharmony_ci */
227c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_AddKeyGesture_01, TestSize.Level1)
228c29fa5a6Sopenharmony_ci{
229c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
230c29fa5a6Sopenharmony_ci    KeyGestureManager keyGestureManager;
231c29fa5a6Sopenharmony_ci    int32_t pid = 1;
232c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyOption> keyOption = nullptr;
233c29fa5a6Sopenharmony_ci    auto callback = [](std::shared_ptr<KeyEvent> event) {};
234c29fa5a6Sopenharmony_ci    int32_t result = keyGestureManager.AddKeyGesture(pid, keyOption, callback);
235c29fa5a6Sopenharmony_ci    EXPECT_EQ(result, INVALID_ENTITY_ID);
236c29fa5a6Sopenharmony_ci}
237c29fa5a6Sopenharmony_ci
238c29fa5a6Sopenharmony_ci/**
239c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_ShouldIntercept_01
240c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
241c29fa5a6Sopenharmony_ci * @tc.type: FUNC
242c29fa5a6Sopenharmony_ci * @tc.require:
243c29fa5a6Sopenharmony_ci */
244c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_ShouldIntercept_01, TestSize.Level1)
245c29fa5a6Sopenharmony_ci{
246c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
247c29fa5a6Sopenharmony_ci    KeyGestureManager keyGestureManager;
248c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyOption> keyOption = nullptr;
249c29fa5a6Sopenharmony_ci    bool result = keyGestureManager.ShouldIntercept(keyOption);
250c29fa5a6Sopenharmony_ci    EXPECT_FALSE(result);
251c29fa5a6Sopenharmony_ci}
252c29fa5a6Sopenharmony_ci
253c29fa5a6Sopenharmony_ci/**
254c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_Intercept_02
255c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
256c29fa5a6Sopenharmony_ci * @tc.type: FUNC
257c29fa5a6Sopenharmony_ci * @tc.require:
258c29fa5a6Sopenharmony_ci */
259c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_Intercept_02, TestSize.Level1)
260c29fa5a6Sopenharmony_ci{
261c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
262c29fa5a6Sopenharmony_ci    int32_t keyCode = 1;
263c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressSingleKey longPressSingleKey(keyCode);
264c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
265c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
266c29fa5a6Sopenharmony_ci    keyEvent->keyCode_ = 2;
267c29fa5a6Sopenharmony_ci    longPressSingleKey.keyCode_ = 2;
268c29fa5a6Sopenharmony_ci    keyEvent->keyAction_ = KeyEvent::KEY_ACTION_DOWN;
269c29fa5a6Sopenharmony_ci
270c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
271c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = true;
272c29fa5a6Sopenharmony_ci    bool ret = longPressSingleKey.Intercept(keyEvent);
273c29fa5a6Sopenharmony_ci    EXPECT_TRUE(ret);
274c29fa5a6Sopenharmony_ci
275c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = true;
276c29fa5a6Sopenharmony_ci    bool ret2 = longPressSingleKey.Intercept(keyEvent);
277c29fa5a6Sopenharmony_ci    EXPECT_TRUE(ret2);
278c29fa5a6Sopenharmony_ci}
279c29fa5a6Sopenharmony_ci
280c29fa5a6Sopenharmony_ci/**
281c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_Intercept_03
282c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
283c29fa5a6Sopenharmony_ci * @tc.type: FUNC
284c29fa5a6Sopenharmony_ci * @tc.require:
285c29fa5a6Sopenharmony_ci */
286c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_Intercept_03, TestSize.Level1)
287c29fa5a6Sopenharmony_ci{
288c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
289c29fa5a6Sopenharmony_ci    int32_t keyCode = 1;
290c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressSingleKey longPressSingleKey(keyCode);
291c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
292c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
293c29fa5a6Sopenharmony_ci    keyEvent->keyCode_ = 3;
294c29fa5a6Sopenharmony_ci    longPressSingleKey.keyCode_ = 2;
295c29fa5a6Sopenharmony_ci    keyEvent->keyAction_ = KeyEvent::KEY_ACTION_DOWN;
296c29fa5a6Sopenharmony_ci    bool ret = longPressSingleKey.Intercept(keyEvent);
297c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
298c29fa5a6Sopenharmony_ci}
299c29fa5a6Sopenharmony_ci
300c29fa5a6Sopenharmony_ci/**
301c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_Intercept_04
302c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
303c29fa5a6Sopenharmony_ci * @tc.type: FUNC
304c29fa5a6Sopenharmony_ci * @tc.require:
305c29fa5a6Sopenharmony_ci */
306c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_Intercept_04, TestSize.Level1)
307c29fa5a6Sopenharmony_ci{
308c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
309c29fa5a6Sopenharmony_ci    int32_t keyCode = 1;
310c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressSingleKey longPressSingleKey(keyCode);
311c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
312c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
313c29fa5a6Sopenharmony_ci    keyEvent->keyCode_ = 2;
314c29fa5a6Sopenharmony_ci    longPressSingleKey.keyCode_ = 2;
315c29fa5a6Sopenharmony_ci    keyEvent->keyAction_ = KeyEvent::KEY_ACTION_UP;
316c29fa5a6Sopenharmony_ci    bool ret = longPressSingleKey.Intercept(keyEvent);
317c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
318c29fa5a6Sopenharmony_ci}
319c29fa5a6Sopenharmony_ci
320c29fa5a6Sopenharmony_ci/**
321c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_Intercept_05
322c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
323c29fa5a6Sopenharmony_ci * @tc.type: FUNC
324c29fa5a6Sopenharmony_ci * @tc.require:
325c29fa5a6Sopenharmony_ci */
326c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_Intercept_05, TestSize.Level1)
327c29fa5a6Sopenharmony_ci{
328c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
329c29fa5a6Sopenharmony_ci    int32_t keyCode = 1;
330c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressSingleKey longPressSingleKey(keyCode);
331c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
332c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
333c29fa5a6Sopenharmony_ci    keyEvent->keyCode_ = 3;
334c29fa5a6Sopenharmony_ci    longPressSingleKey.keyCode_ = 2;
335c29fa5a6Sopenharmony_ci    keyEvent->keyAction_ = KeyEvent::KEY_ACTION_UP;
336c29fa5a6Sopenharmony_ci    bool ret = longPressSingleKey.Intercept(keyEvent);
337c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
338c29fa5a6Sopenharmony_ci}
339c29fa5a6Sopenharmony_ci
340c29fa5a6Sopenharmony_ci/**
341c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_Intercept_06
342c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
343c29fa5a6Sopenharmony_ci * @tc.type: FUNC
344c29fa5a6Sopenharmony_ci * @tc.require:
345c29fa5a6Sopenharmony_ci */
346c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_Intercept_06, TestSize.Level1)
347c29fa5a6Sopenharmony_ci{
348c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
349c29fa5a6Sopenharmony_ci    int32_t keyCode = 1;
350c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressSingleKey longPressSingleKey(keyCode);
351c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
352c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
353c29fa5a6Sopenharmony_ci    keyEvent->keyCode_ = 3;
354c29fa5a6Sopenharmony_ci    longPressSingleKey.keyCode_ = 2;
355c29fa5a6Sopenharmony_ci    keyEvent->keyAction_ = KeyEvent::KEY_ACTION_UP;
356c29fa5a6Sopenharmony_ci
357c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
358c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = true;
359c29fa5a6Sopenharmony_ci    bool ret = longPressSingleKey.Intercept(keyEvent);
360c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
361c29fa5a6Sopenharmony_ci
362c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = false;
363c29fa5a6Sopenharmony_ci    bool ret2 = longPressSingleKey.Intercept(keyEvent);
364c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret2);
365c29fa5a6Sopenharmony_ci}
366c29fa5a6Sopenharmony_ci
367c29fa5a6Sopenharmony_ci/**
368c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_IsWorking_01
369c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
370c29fa5a6Sopenharmony_ci * @tc.type: FUNC
371c29fa5a6Sopenharmony_ci * @tc.require:
372c29fa5a6Sopenharmony_ci */
373c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_IsWorking_01, TestSize.Level1)
374c29fa5a6Sopenharmony_ci{
375c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
376c29fa5a6Sopenharmony_ci    KeyGestureManager::PullUpAccessibility pullUpAccessibility;
377c29fa5a6Sopenharmony_ci    DISPLAY_MONITOR->screenStatus_ = EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_OFF;
378c29fa5a6Sopenharmony_ci    bool ret = pullUpAccessibility.IsWorking();
379c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
380c29fa5a6Sopenharmony_ci}
381c29fa5a6Sopenharmony_ci
382c29fa5a6Sopenharmony_ci/**
383c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_IsWorking_02
384c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
385c29fa5a6Sopenharmony_ci * @tc.type: FUNC
386c29fa5a6Sopenharmony_ci * @tc.require:
387c29fa5a6Sopenharmony_ci */
388c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_IsWorking_02, TestSize.Level1)
389c29fa5a6Sopenharmony_ci{
390c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
391c29fa5a6Sopenharmony_ci    KeyGestureManager::PullUpAccessibility pullUpAccessibility;
392c29fa5a6Sopenharmony_ci    DISPLAY_MONITOR->screenStatus_ = EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_ON;
393c29fa5a6Sopenharmony_ci    DISPLAY_MONITOR->isScreenLocked_ = true;
394c29fa5a6Sopenharmony_ci    bool ret = pullUpAccessibility.IsWorking();
395c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
396c29fa5a6Sopenharmony_ci}
397c29fa5a6Sopenharmony_ci
398c29fa5a6Sopenharmony_ci/**
399c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_IsWorking_03
400c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ShouldIntercept
401c29fa5a6Sopenharmony_ci * @tc.type: FUNC
402c29fa5a6Sopenharmony_ci * @tc.require:
403c29fa5a6Sopenharmony_ci */
404c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_IsWorking_03, TestSize.Level1)
405c29fa5a6Sopenharmony_ci{
406c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
407c29fa5a6Sopenharmony_ci    KeyGestureManager::PullUpAccessibility pullUpAccessibility;
408c29fa5a6Sopenharmony_ci    DISPLAY_MONITOR->screenStatus_ = EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_ON;
409c29fa5a6Sopenharmony_ci    DISPLAY_MONITOR->isScreenLocked_ = false;
410c29fa5a6Sopenharmony_ci    bool ret = pullUpAccessibility.IsWorking();
411c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
412c29fa5a6Sopenharmony_ci}
413c29fa5a6Sopenharmony_ci
414c29fa5a6Sopenharmony_ci/**
415c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_OnTriggerAll_01
416c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation OnTriggerAll
417c29fa5a6Sopenharmony_ci * @tc.type: FUNC
418c29fa5a6Sopenharmony_ci * @tc.require:
419c29fa5a6Sopenharmony_ci */
420c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_OnTriggerAll_01, TestSize.Level1)
421c29fa5a6Sopenharmony_ci{
422c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
423c29fa5a6Sopenharmony_ci    KeyGestureManager::PullUpAccessibility pullUpAccessibility;
424c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
425c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
426c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(pullUpAccessibility.OnTriggerAll(keyEvent));
427c29fa5a6Sopenharmony_ci}
428c29fa5a6Sopenharmony_ci
429c29fa5a6Sopenharmony_ci/**
430c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RecognizeGesture_01
431c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RecognizeGesture
432c29fa5a6Sopenharmony_ci * @tc.type: FUNC
433c29fa5a6Sopenharmony_ci * @tc.require:
434c29fa5a6Sopenharmony_ci */
435c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RecognizeGesture_01, TestSize.Level1)
436c29fa5a6Sopenharmony_ci{
437c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
438c29fa5a6Sopenharmony_ci    std::set<int32_t> keys = {1, 2, 3};
439c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressCombinationKey longPressCombinationKey(keys);
440c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
441c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
442c29fa5a6Sopenharmony_ci
443c29fa5a6Sopenharmony_ci    std::vector<int32_t> pressedKeys = {1};
444c29fa5a6Sopenharmony_ci    EXPECT_TRUE(pressedKeys.size() == SINGLE_KEY_PRESSED);
445c29fa5a6Sopenharmony_ci    bool ret = longPressCombinationKey.RecognizeGesture(keyEvent);
446c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
447c29fa5a6Sopenharmony_ci}
448c29fa5a6Sopenharmony_ci
449c29fa5a6Sopenharmony_ci/**
450c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RecognizeGesture_02
451c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RecognizeGesture
452c29fa5a6Sopenharmony_ci * @tc.type: FUNC
453c29fa5a6Sopenharmony_ci * @tc.require:
454c29fa5a6Sopenharmony_ci */
455c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RecognizeGesture_02, TestSize.Level1)
456c29fa5a6Sopenharmony_ci{
457c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
458c29fa5a6Sopenharmony_ci    std::set<int32_t> keys = { 1, 2, 3 };
459c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressCombinationKey longPressCombinationKey(keys);
460c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
461c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
462c29fa5a6Sopenharmony_ci
463c29fa5a6Sopenharmony_ci    std::vector<int32_t> pressedKeys = { 2, 3, 4 };
464c29fa5a6Sopenharmony_ci    EXPECT_FALSE(pressedKeys.size() == SINGLE_KEY_PRESSED);
465c29fa5a6Sopenharmony_ci    bool ret = longPressCombinationKey.RecognizeGesture(keyEvent);
466c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
467c29fa5a6Sopenharmony_ci}
468c29fa5a6Sopenharmony_ci
469c29fa5a6Sopenharmony_ci/**
470c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_TriggerAll_01
471c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation TriggerAll
472c29fa5a6Sopenharmony_ci * @tc.type: FUNC
473c29fa5a6Sopenharmony_ci * @tc.require:
474c29fa5a6Sopenharmony_ci */
475c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_TriggerAll_01, TestSize.Level1)
476c29fa5a6Sopenharmony_ci{
477c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
478c29fa5a6Sopenharmony_ci    std::set<int32_t> keys = { 1, 2, 3 };
479c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressCombinationKey longPressCombinationKey(keys);
480c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
481c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
482c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(longPressCombinationKey.TriggerAll(keyEvent));
483c29fa5a6Sopenharmony_ci}
484c29fa5a6Sopenharmony_ci
485c29fa5a6Sopenharmony_ci/**
486c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RunPending_01
487c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RunPending
488c29fa5a6Sopenharmony_ci * @tc.type: FUNC
489c29fa5a6Sopenharmony_ci * @tc.require:
490c29fa5a6Sopenharmony_ci */
491c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RunPending_01, TestSize.Level1)
492c29fa5a6Sopenharmony_ci{
493c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
494c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
495c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler(1, 2, 3000, myCallback);
496c29fa5a6Sopenharmony_ci
497c29fa5a6Sopenharmony_ci    handler.keyEvent_ = nullptr;
498c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(handler.RunPending());
499c29fa5a6Sopenharmony_ci}
500c29fa5a6Sopenharmony_ci
501c29fa5a6Sopenharmony_ci/**
502c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RunPending_02
503c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RunPending
504c29fa5a6Sopenharmony_ci * @tc.type: FUNC
505c29fa5a6Sopenharmony_ci * @tc.require:
506c29fa5a6Sopenharmony_ci */
507c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RunPending_02, TestSize.Level1)
508c29fa5a6Sopenharmony_ci{
509c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
510c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
511c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler(1, 2, 3000, myCallback);
512c29fa5a6Sopenharmony_ci
513c29fa5a6Sopenharmony_ci    handler.keyEvent_ = KeyEvent::Create();
514c29fa5a6Sopenharmony_ci    ASSERT_NE(handler.keyEvent_, nullptr);
515c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(handler.RunPending());
516c29fa5a6Sopenharmony_ci}
517c29fa5a6Sopenharmony_ci
518c29fa5a6Sopenharmony_ci/**
519c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_ResetTimer_01
520c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ResetTimer
521c29fa5a6Sopenharmony_ci * @tc.type: FUNC
522c29fa5a6Sopenharmony_ci * @tc.require:
523c29fa5a6Sopenharmony_ci */
524c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_ResetTimer_01, TestSize.Level1)
525c29fa5a6Sopenharmony_ci{
526c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
527c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
528c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler(1, 2, 3000, myCallback);
529c29fa5a6Sopenharmony_ci    handler.timerId_ = 1;
530c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(handler.ResetTimer());
531c29fa5a6Sopenharmony_ci}
532c29fa5a6Sopenharmony_ci
533c29fa5a6Sopenharmony_ci/**
534c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_ResetTimer_02
535c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation ResetTimer
536c29fa5a6Sopenharmony_ci * @tc.type: FUNC
537c29fa5a6Sopenharmony_ci * @tc.require:
538c29fa5a6Sopenharmony_ci */
539c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_ResetTimer_02, TestSize.Level1)
540c29fa5a6Sopenharmony_ci{
541c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
542c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
543c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler(1, 2, 3000, myCallback);
544c29fa5a6Sopenharmony_ci    handler.timerId_ = -2;
545c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(handler.ResetTimer());
546c29fa5a6Sopenharmony_ci}
547c29fa5a6Sopenharmony_ci
548c29fa5a6Sopenharmony_ci/**
549c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RunPendingHandlers_01
550c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RunPendingHandlers
551c29fa5a6Sopenharmony_ci * @tc.type: FUNC
552c29fa5a6Sopenharmony_ci * @tc.require:
553c29fa5a6Sopenharmony_ci */
554c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RunPendingHandlers_01, TestSize.Level1)
555c29fa5a6Sopenharmony_ci{
556c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
557c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
558c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler1(1, 10, 500, myCallback);
559c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler2(2, 20, 1000, myCallback);
560c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler3(3, 30, 1500, myCallback);
561c29fa5a6Sopenharmony_ci
562c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
563c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler1);
564c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler2);
565c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler3);
566c29fa5a6Sopenharmony_ci
567c29fa5a6Sopenharmony_ci    std::set<int32_t> foregroundPids = myKeyGesture->GetForegroundPids();
568c29fa5a6Sopenharmony_ci    bool haveForeground = myKeyGesture->HaveForegroundHandler(foregroundPids);
569c29fa5a6Sopenharmony_ci    EXPECT_FALSE(haveForeground);
570c29fa5a6Sopenharmony_ci
571c29fa5a6Sopenharmony_ci    int32_t keyCode = 1;
572c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressSingleKey longPressSingleKey(keyCode);
573c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(longPressSingleKey.RunPendingHandlers());
574c29fa5a6Sopenharmony_ci}
575c29fa5a6Sopenharmony_ci
576c29fa5a6Sopenharmony_ci/**
577c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_RunHandler_01
578c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RunHandler
579c29fa5a6Sopenharmony_ci * @tc.type: FUNC
580c29fa5a6Sopenharmony_ci * @tc.require:
581c29fa5a6Sopenharmony_ci */
582c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_RunHandler_01, TestSize.Level1)
583c29fa5a6Sopenharmony_ci{
584c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
585c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
586c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler1(1, 10, 500, myCallback);
587c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler2(2, 20, 1000, myCallback);
588c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler3(3, 30, 1500, myCallback);
589c29fa5a6Sopenharmony_ci
590c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
591c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler1);
592c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler2);
593c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler3);
594c29fa5a6Sopenharmony_ci
595c29fa5a6Sopenharmony_ci    int32_t handlerId = 1;
596c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
597c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
598c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(myKeyGesture->RunHandler(handlerId, keyEvent));
599c29fa5a6Sopenharmony_ci
600c29fa5a6Sopenharmony_ci    handlerId = 5;
601c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(myKeyGesture->RunHandler(handlerId, keyEvent));
602c29fa5a6Sopenharmony_ci}
603c29fa5a6Sopenharmony_ci
604c29fa5a6Sopenharmony_ci/**
605c29fa5a6Sopenharmony_ci * @tc.name: LongPressCombinationKey_Intercept_01
606c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RecognizeGesture
607c29fa5a6Sopenharmony_ci * @tc.type: FUNC
608c29fa5a6Sopenharmony_ci * @tc.require:
609c29fa5a6Sopenharmony_ci */
610c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, LongPressCombinationKey_Intercept_01, TestSize.Level1)
611c29fa5a6Sopenharmony_ci{
612c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
613c29fa5a6Sopenharmony_ci    std::set<int32_t> keys = {1, 2, 3};
614c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressCombinationKey longPressCombinationKey(keys);
615c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
616c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
617c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
618c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
619c29fa5a6Sopenharmony_ci
620c29fa5a6Sopenharmony_ci    keyEvent->keyCode_ = 3;
621c29fa5a6Sopenharmony_ci    longPressCombinationKey.keys_ = {2, 3, 4};
622c29fa5a6Sopenharmony_ci    keyEvent->keyAction_ = KeyEvent::KEY_ACTION_DOWN;
623c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = true;
624c29fa5a6Sopenharmony_ci    EXPECT_FALSE(EventLogHelper::IsBetaVersion());
625c29fa5a6Sopenharmony_ci    EXPECT_FALSE(keyEvent->HasFlag(InputEvent::EVENT_FLAG_PRIVACY_MODE));
626c29fa5a6Sopenharmony_ci    bool ret = longPressCombinationKey.Intercept(keyEvent);
627c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
628c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = false;
629c29fa5a6Sopenharmony_ci    EXPECT_TRUE(myKeyGesture->IsWorking());
630c29fa5a6Sopenharmony_ci
631c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler1(1, 10, 500, myCallback);
632c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler2(2, 20, 1000, myCallback);
633c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler3(3, 30, 1500, myCallback);
634c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler1);
635c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler2);
636c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler3);
637c29fa5a6Sopenharmony_ci    EXPECT_FALSE(myKeyGesture->handlers_.empty());
638c29fa5a6Sopenharmony_ci    bool ret2 = longPressCombinationKey.Intercept(keyEvent);
639c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret2);
640c29fa5a6Sopenharmony_ci}
641c29fa5a6Sopenharmony_ci
642c29fa5a6Sopenharmony_ci/**
643c29fa5a6Sopenharmony_ci * @tc.name: LongPressCombinationKey_Intercept_02
644c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation RecognizeGesture
645c29fa5a6Sopenharmony_ci * @tc.type: FUNC
646c29fa5a6Sopenharmony_ci * @tc.require:
647c29fa5a6Sopenharmony_ci */
648c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, LongPressCombinationKey_Intercept_02, TestSize.Level1)
649c29fa5a6Sopenharmony_ci{
650c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
651c29fa5a6Sopenharmony_ci    std::set<int32_t> keys = {1, 2, 3};
652c29fa5a6Sopenharmony_ci    KeyGestureManager::LongPressCombinationKey longPressCombinationKey(keys);
653c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
654c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
655c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
656c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
657c29fa5a6Sopenharmony_ci
658c29fa5a6Sopenharmony_ci    keyEvent->keyCode_ = 5;
659c29fa5a6Sopenharmony_ci    longPressCombinationKey.keys_ = {2, 3, 4};
660c29fa5a6Sopenharmony_ci    keyEvent->keyAction_ = KeyEvent::KEY_ACTION_UP;
661c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = true;
662c29fa5a6Sopenharmony_ci    bool ret = longPressCombinationKey.Intercept(keyEvent);
663c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret);
664c29fa5a6Sopenharmony_ci
665c29fa5a6Sopenharmony_ci    myKeyGesture->active_ = false;
666c29fa5a6Sopenharmony_ci    bool ret2 = longPressCombinationKey.Intercept(keyEvent);
667c29fa5a6Sopenharmony_ci    EXPECT_FALSE(ret2);
668c29fa5a6Sopenharmony_ci}
669c29fa5a6Sopenharmony_ci
670c29fa5a6Sopenharmony_ci/**
671c29fa5a6Sopenharmony_ci * @tc.name: KeyGestureManagerTest_NotifyHandlers_01
672c29fa5a6Sopenharmony_ci * @tc.desc: Test the funcation NotifyHandlers
673c29fa5a6Sopenharmony_ci * @tc.type: FUNC
674c29fa5a6Sopenharmony_ci * @tc.require:
675c29fa5a6Sopenharmony_ci */
676c29fa5a6Sopenharmony_ciHWTEST_F(KeyGestureManagerTest, KeyGestureManagerTest_NotifyHandlers_01, TestSize.Level1)
677c29fa5a6Sopenharmony_ci{
678c29fa5a6Sopenharmony_ci    CALL_TEST_DEBUG;
679c29fa5a6Sopenharmony_ci    std::shared_ptr<KeyEvent> keyEvent = KeyEvent::Create();
680c29fa5a6Sopenharmony_ci    ASSERT_NE(keyEvent, nullptr);
681c29fa5a6Sopenharmony_ci    std::function<void(std::shared_ptr<KeyEvent>)> myCallback;
682c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler1(1, 10, 500, myCallback);
683c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler2(2, 20, 1000, myCallback);
684c29fa5a6Sopenharmony_ci    KeyGestureManager::Handler handler3(3, 30, 1500, myCallback);
685c29fa5a6Sopenharmony_ci
686c29fa5a6Sopenharmony_ci    std::shared_ptr<MyKeyGesture> myKeyGesture = std::make_shared<MyKeyGesture>();
687c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler1);
688c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler2);
689c29fa5a6Sopenharmony_ci    myKeyGesture->handlers_.push_back(handler3);
690c29fa5a6Sopenharmony_ci
691c29fa5a6Sopenharmony_ci    std::set<int32_t> foregroundPids = myKeyGesture->GetForegroundPids();
692c29fa5a6Sopenharmony_ci    bool haveForeground = myKeyGesture->HaveForegroundHandler(foregroundPids);
693c29fa5a6Sopenharmony_ci    EXPECT_FALSE(haveForeground);
694c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(myKeyGesture->NotifyHandlers(keyEvent));
695c29fa5a6Sopenharmony_ci}
696c29fa5a6Sopenharmony_ci} // namespace MMI
697c29fa5a6Sopenharmony_ci} // namespace OHOS