• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #include <limits>
18 #include <test_header.h>
19 
20 #include "hgm_core.h"
21 #include "hgm_frame_rate_manager.h"
22 
23 using namespace testing;
24 using namespace testing::ext;
25 
26 namespace OHOS {
27 namespace Rosen {
28 namespace {
29     constexpr int32_t waitTaskFinishNs = 100000;
30 }
31 class HgmTouchManagerTest : public testing::Test {
32 public:
SetUpTestCase()33     static void SetUpTestCase() {}
TearDownTestCase()34     static void TearDownTestCase() {}
SetUp()35     void SetUp() {}
TearDown()36     void TearDown() {}
37 };
38 
39 /**
40  * @tc.name: QuickTouch
41  * @tc.desc: Verify the result of QuickTouch function
42  * @tc.type: FUNC
43  * @tc.require:
44  */
45 HWTEST_F(HgmTouchManagerTest, QuickTouch, Function | SmallTest | Level1)
46 {
47     int32_t clickNum = 100;
48     auto touchManager = HgmTouchManager();
49     for (int i = 0; i < clickNum; i++) {
50         touchManager.ChangeState(TouchState::DOWN_STATE);
51         touchManager.ChangeState(TouchState::UP_STATE);
52     }
53     touchManager.ChangeState(TouchState::IDLE_STATE);
54     sleep(1); // wait for 1s for the async task to complete
55     ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE);
56 }
57 
58 /**
59  * @tc.name: ChangeState
60  * @tc.desc: Verify the result of ChangeState function
61  * @tc.type: FUNC
62  * @tc.require:
63  */
64 HWTEST_F(HgmTouchManagerTest, ChangeState, Function | SmallTest | Level1)
65 {
66     PART("CaseDescription") {
67         auto touchManager = HgmTouchManager();
68         ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE);
69 
70         touchManager.ChangeState(TouchState::UP_STATE);
71         ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE);
72 
73         touchManager.ChangeState(TouchState::DOWN_STATE);
74         usleep(waitTaskFinishNs);
75         ASSERT_EQ(touchManager.GetState(), TouchState::DOWN_STATE);
76 
77         touchManager.ChangeState(TouchState::IDLE_STATE);
78         ASSERT_EQ(touchManager.GetState(), TouchState::DOWN_STATE);
79 
80         touchManager.ChangeState(TouchState::UP_STATE);
81         usleep(waitTaskFinishNs);
82         ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE);
83 
84         touchManager.ChangeState(TouchState::DOWN_STATE);
85         usleep(waitTaskFinishNs);
86         ASSERT_EQ(touchManager.GetState(), TouchState::DOWN_STATE);
87 
88         touchManager.ChangeState(TouchState::UP_STATE);
89         usleep(waitTaskFinishNs);
90         ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE);
91 
92         touchManager.ChangeState(TouchState::IDLE_STATE);
93         usleep(waitTaskFinishNs);
94         ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE);
95     }
96 }
97 
98 /**
99  * @tc.name: Up2IdleState
100  * @tc.desc: Verify the result of Up2IdleState function
101  * @tc.type: FUNC
102  * @tc.require:
103  */
104 HWTEST_F(HgmTouchManagerTest, Up2IdleState, Function | SmallTest | Level1)
105 {
106     auto touchManager = HgmTouchManager();
107     const int32_t rsTimeoutUs = 610000;
108     const int32_t handleRsFrameTimeUs = 150000;
109     const int32_t handleRsFrameNum = 20;
110     const int32_t skipTimeUs = 2600000;
111     const int32_t upOffsetTimeUs = 400000;
112 
113     // 1. 600ms timeout
114     touchManager.ChangeState(TouchState::DOWN_STATE);
115     touchManager.ChangeState(TouchState::UP_STATE);
116     usleep(waitTaskFinishNs);
117     ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE);
118 
119     usleep(rsTimeoutUs);
120     ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE);
121 
122     // 2. 3s timeout
123     touchManager.ChangeState(TouchState::DOWN_STATE);
124     touchManager.ChangeState(TouchState::UP_STATE);
125     auto start  = std::chrono::steady_clock::now();
126     usleep(waitTaskFinishNs);
127     ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE);
128 
129     for (int i = 0; i < handleRsFrameNum; i++) {
130         touchManager.HandleRsFrame();
131         usleep(handleRsFrameTimeUs);
132         auto end  = std::chrono::steady_clock::now();
133         if (std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() > skipTimeUs) {
134             break;
135         }
136         ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE);
137     }
138     touchManager.HandleRsFrame();
139     usleep(upOffsetTimeUs);
140     touchManager.HandleRsFrame();
141     usleep(upOffsetTimeUs);
142     ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE);
143 }
144 
145 /**
146  * @tc.name: Up2IdleState001
147  * @tc.desc: Verify the result of Up2IdleState001 function
148  * @tc.type: FUNC
149  * @tc.require:
150  */
151 HWTEST_F(HgmTouchManagerTest, Up2IdleState001, Function | SmallTest | Level1)
152 {
153     PART("CaseDescription") {
154         auto touchManager = HgmTouchManager();
155         const int32_t rsTimeoutUs = 610000;
156         const int32_t handleRsFrameTimeUs = 510000;
157         const int32_t handleRsFrameNum = 5;
158         const TouchState undefinedState = static_cast<TouchState>(100);
159 
160         STEP("3s timeout") {
161             touchManager.ChangeState(TouchState::DOWN_STATE);
162             touchManager.ChangeState(TouchState::UP_STATE);
163             usleep(waitTaskFinishNs);
164             ASSERT_EQ(touchManager.GetState(), TouchState::UP_STATE);
165 
166             touchManager.OnEvent(TouchEvent::UP_TIMEOUT_EVENT);
167             usleep(rsTimeoutUs);
168             ASSERT_EQ(touchManager.GetState(), TouchState::IDLE_STATE);
169         }
170         STEP("State2String") {
171             touchManager.State2String(undefinedState);
172         }
173         STEP("CheckChangeStateValid") {
174             touchManager.CheckChangeStateValid(TouchState::IDLE_STATE, TouchState::UP_STATE);
175             touchManager.CheckChangeStateValid(TouchState::IDLE_STATE, undefinedState);
176             touchManager.CheckChangeStateValid(undefinedState, TouchState::IDLE_STATE);
177         }
178         STEP("ExecuteCallback") {
179             touchManager.ExecuteCallback(nullptr);
__anon2ab8d5080202() 180             touchManager.ExecuteCallback([] () { usleep(1); });
181             touchManager.ExecuteCallback(nullptr);
182         }
183     }
184     sleep(1); // wait for task finished
185 }
186 } // namespace Rosen
187 } // namespace OHOS