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 "screen_session_manager/include/fold_screen_controller/sensor_fold_state_manager/single_display_sensor_pocket_fold_state_manager.h"
19
20 using namespace testing;
21 using namespace testing::ext;
22
23 namespace OHOS {
24 namespace Rosen {
25 namespace {
26 constexpr uint32_t SLEEP_TIME_IN_US = 100000; // 100ms
27 }
28
29 class SingleDisplaySensorPocketFoldStateManagerTest : public testing::Test {
30 public:
31 static void SetUpTestCase();
32 static void TearDownTestCase();
33 void SetUp() override;
34 void TearDown() override;
35 };
36
SetUpTestCase()37 void SingleDisplaySensorPocketFoldStateManagerTest::SetUpTestCase()
38 {
39 }
40
TearDownTestCase()41 void SingleDisplaySensorPocketFoldStateManagerTest::TearDownTestCase()
42 {
43 usleep(SLEEP_TIME_IN_US);
44 }
45
SetUp()46 void SingleDisplaySensorPocketFoldStateManagerTest::SetUp()
47 {
48 }
49
TearDown()50 void SingleDisplaySensorPocketFoldStateManagerTest::TearDown()
51 {
52 }
53
54 namespace {
55 /**
56 * @tc.name: HandleAngleChange
57 * @tc.desc: test function : HandleAngleChange
58 * @tc.type: FUNC
59 */
60 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, HandleAngleChange, Function | SmallTest | Level1)
61 {
62 float angel = 0;
63 int hall = 0;
64 sptr<FoldScreenPolicy> foldScreenPolicy = nullptr;
65 SingleDisplaySensorPocketFoldStateManager manager;
66 manager.HandleAngleChange(angel, hall, foldScreenPolicy);
67 EXPECT_TRUE(true);
68 }
69
70 /**
71 * @tc.name: HandleHallChange
72 * @tc.desc: test function : HandleHallChange
73 * @tc.type: FUNC
74 */
75 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, HandleHallChange, Function | SmallTest | Level1)
76 {
77 float angel = 0;
78 int hall = 0;
79 sptr<FoldScreenPolicy> foldScreenPolicy = nullptr;
80 SingleDisplaySensorPocketFoldStateManager manager;
81 manager.HandleHallChange(angel, hall, foldScreenPolicy);
82 EXPECT_TRUE(true);
83 }
84
85 /**
86 * @tc.name: UpdateSwitchScreenBoundaryForLargeFoldDevice
87 * @tc.desc: test function : UpdateSwitchScreenBoundaryForLargeFoldDevice
88 * @tc.type: FUNC
89 */
90 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, UpdateSwitchScreenBoundaryForLargeFoldDevice,
91 Function | SmallTest | Level1)
92 {
93 float angel = 0;
94 int hall = 0;
95 SingleDisplaySensorPocketFoldStateManager manager;
96 manager.UpdateSwitchScreenBoundaryForLargeFoldDevice(angel, hall);
97 EXPECT_TRUE(true);
98
99 angel = 91.0F;
100 hall = 1;
101 manager.UpdateSwitchScreenBoundaryForLargeFoldDevice(angel, hall);
102 EXPECT_TRUE(true);
103 }
104
105 /**
106 * @tc.name: GetNextFoldState01
107 * @tc.desc: test function : GetNextFoldState
108 * @tc.type: FUNC
109 */
110 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, GetNextFoldState01, Function | SmallTest | Level1)
111 {
112 float angel = -0.1;
113 int hall = 0;
114 SingleDisplaySensorPocketFoldStateManager manager;
115 auto result1 = manager.GetNextFoldState(angel, hall);
116 EXPECT_EQ(static_cast<int>(result1), 0);
117
118 manager.allowUserSensorForLargeFoldDevice = 0;
119 angel = 90.0F;
120 hall = 1;
121 auto result2 = manager.GetNextFoldState(angel, hall);
122 EXPECT_EQ(static_cast<int>(result2), 3);
123
124 angel = 130.0F - 0.1;
125 hall = 1;
126 auto result3 = manager.GetNextFoldState(angel, hall);
127 EXPECT_EQ(static_cast<int>(result3), 3);
128
129 angel = 130.0F - 0.1;
130 hall = 0;
131 auto result4 = manager.GetNextFoldState(angel, hall);
132 EXPECT_EQ(static_cast<int>(result4), 3);
133
134 angel = 130.0F + 0.1;
135 hall = 0;
136 auto result5 = manager.GetNextFoldState(angel, hall);
137 EXPECT_EQ(static_cast<int>(result5), 3);
138
139 angel = 140.0F + 0.1;
140 hall = 0;
141 auto result6 = manager.GetNextFoldState(angel, hall);
142 EXPECT_EQ(static_cast<int>(result6), 3);
143
144 angel = 140.0F + 0.1;
145 hall = 1;
146 auto result7 = manager.GetNextFoldState(angel, hall);
147 EXPECT_EQ(static_cast<int>(result7), 1);
148 }
149
150 /**
151 * @tc.name: GetNextFoldState02
152 * @tc.desc: test function : GetNextFoldState
153 * @tc.type: FUNC
154 */
155 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, GetNextFoldState02, Function | SmallTest | Level1)
156 {
157 SingleDisplaySensorPocketFoldStateManager manager;
158 manager.allowUserSensorForLargeFoldDevice = 1;
159 float angel = 25.0F;
160 int hall = 1;
161 auto result1 = manager.GetNextFoldState(angel, hall);
162 EXPECT_EQ(static_cast<int>(result1), 0);
163
164 angel = 70.0F - 0.1;
165 auto result2 = manager.GetNextFoldState(angel, hall);
166 EXPECT_EQ(static_cast<int>(result2), 2);
167
168 angel = 70.0F + 0.1;
169 auto result3 = manager.GetNextFoldState(angel, hall);
170 EXPECT_EQ(static_cast<int>(result3), 3);
171
172 angel = 130.0F - 0.1;
173 auto result4 = manager.GetNextFoldState(angel, hall);
174 EXPECT_EQ(static_cast<int>(result4), 3);
175
176 angel = 130.0F + 0.1;
177 auto result5 = manager.GetNextFoldState(angel, hall);
178 EXPECT_EQ(static_cast<int>(result5), 3);
179
180 angel = 80.0F - 0.1;
181 auto result6 = manager.GetNextFoldState(angel, hall);
182 EXPECT_EQ(static_cast<int>(result6), 3);
183
184 angel = 70.0F + 0.1;
185 hall = 0;
186 auto result7 = manager.GetNextFoldState(angel, hall);
187 EXPECT_EQ(static_cast<int>(result7), 3);
188
189 angel = 130.0F + 0.1;
190 auto result8 = manager.GetNextFoldState(angel, hall);
191 EXPECT_EQ(static_cast<int>(result8), 3);
192 }
193
194 /**
195 * @tc.name: TriggerTentExit
196 * @tc.desc: test function : TriggerTentExit
197 * @tc.type: FUNC
198 */
199 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, TriggerTentExit, Function | SmallTest | Level1)
200 {
201 float angle = 0.0F;
202 int hall;
203 bool result;
204 SingleDisplaySensorPocketFoldStateManager mgr;
205
206 hall = 0;
207 result = mgr.TriggerTentExit(angle, hall);
208 EXPECT_EQ(result, true);
209
210 hall = 1;
211 angle = 176.0F;
212 result = mgr.TriggerTentExit(angle, hall);
213 EXPECT_EQ(result, true);
214
215 hall = 1;
216 angle = 4.0F;
217 result = mgr.TriggerTentExit(angle, hall);
218 EXPECT_EQ(result, true);
219
220 hall = 1;
221 angle = 90.0F;
222 result = mgr.TriggerTentExit(angle, hall);
223 EXPECT_EQ(result, false);
224 }
225
226 /**
227 * @tc.name: HandleTentChange
228 * @tc.desc: test function : HandleTentChange
229 * @tc.type: FUNC
230 */
231 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, HandleTentChange, Function | SmallTest | Level1)
232 {
233 SingleDisplaySensorPocketFoldStateManager mgr;
234
235 ASSERT_EQ(mgr.IsTentMode(), false);
236
237 mgr.HandleTentChange(true, nullptr);
238 ASSERT_EQ(mgr.IsTentMode(), true);
239
240 mgr.HandleTentChange(true, nullptr);
241 ASSERT_EQ(mgr.IsTentMode(), true);
242
243 mgr.HandleTentChange(false, nullptr);
244 ASSERT_EQ(mgr.IsTentMode(), false);
245
246 mgr.HandleTentChange(false, nullptr);
247 ASSERT_EQ(mgr.IsTentMode(), false);
248 }
249
250 /**
251 * @tc.name: TentModeHandleSensorChange
252 * @tc.desc: test function : TentModeHandleSensorChange
253 * @tc.type: FUNC
254 */
255 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, TentModeHandleSensorChange, Function | SmallTest | Level1)
256 {
257 SingleDisplaySensorPocketFoldStateManager stateManager;
258
259 stateManager.SetTentMode(true);
260 stateManager.TentModeHandleSensorChange(4.0F, 0, nullptr);
261 ASSERT_EQ(stateManager.IsTentMode(), false);
262 }
263
264 /**
265 * @tc.name: ReportTentStatusChange
266 * @tc.desc: test function : ReportTentStatusChange
267 * @tc.type: FUNC
268 */
269 HWTEST_F(SingleDisplaySensorPocketFoldStateManagerTest, ReportTentStatusChange, Function | SmallTest | Level1)
270 {
271 SingleDisplaySensorPocketFoldStateManager stateManager;
272 ReportTentModeStatus tentStatus = ReportTentModeStatus::NORMAL_ENTER_TENT_MODE;
273 stateManager.ReportTentStatusChange(tentStatus);
274 ASSERT_EQ(tentStatus, ReportTentModeStatus::NORMAL_ENTER_TENT_MODE);
275 }
276 }
277 } // namespace Rosen
278 } // namespace OHOS