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 <system_ability_definition.h>
19
20 #include "fold_screen_controller/super_fold_state_manager.h"
21 #include "fold_screen_state_internel.h"
22
23 using namespace testing;
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace Rosen {
28
29 namespace {
30 #define ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE if (!FoldScreenStateInternel::IsSuperFoldDisplayDevice()) {return;}
31 }
32
33 class SuperFoldStateManagerTest : public testing::Test {
34 public:
35 static void SetUpTestCase();
36 static void TearDownTestCase();
37 void SetUp() override;
38 void TearDown() override;
39 };
40
SetUpTestCase()41 void SuperFoldStateManagerTest::SetUpTestCase()
42 {
43 }
44
TearDownTestCase()45 void SuperFoldStateManagerTest::TearDownTestCase()
46 {
47 }
48
SetUp()49 void SuperFoldStateManagerTest::SetUp()
50 {
51 }
52
TearDown()53 void SuperFoldStateManagerTest::TearDown()
54 {
55 }
56
57 namespace {
58
59 /**
60 * @tc.name: HandleSuperFoldStatusChange
61 * @tc.desc: test function : ANGLE_CHANGE_EXPANDED
62 * @tc.type: FUNC
63 */
64 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange01, Function | SmallTest | Level1)
65 {
66 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
67 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::ANGLE_CHANGE_EXPANDED;
68 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::HALF_FOLDED);
69 std::function<void()> func = [&]()
__anonfdcf13890302() 70 {
71 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
72 };
73
74 func();
75 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
76 SuperFoldStatus expState = SuperFoldStatus::EXPANDED;
77
78 EXPECT_EQ(curState, expState);
79 }
80
81 /**
82 * @tc.name: HandleSuperFoldStatusChange
83 * @tc.desc: test function : ANGLE_CHANGE_HALF_FOLDED
84 * @tc.type: FUNC
85 */
86 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange02, Function | SmallTest | Level1)
87 {
88 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
89 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::ANGLE_CHANGE_HALF_FOLDED;
90 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::FOLDED);
91 std::function<void()> func = [&]()
__anonfdcf13890402() 92 {
93 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
94 };
95
96 func();
97 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
98 SuperFoldStatus expState = SuperFoldStatus::HALF_FOLDED;
99
100 EXPECT_EQ(curState, expState);
101 }
102
103 /**
104 * @tc.name: HandleSuperFoldStatusChange
105 * @tc.desc: test function : ANGLE_CHANGE_HALF_FOLDED
106 * @tc.type: FUNC
107 */
108 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange03, Function | SmallTest | Level1)
109 {
110 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
111 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::ANGLE_CHANGE_HALF_FOLDED;
112 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::EXPANDED);
113 std::function<void()> func = [&]()
__anonfdcf13890502() 114 {
115 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
116 };
117
118 func();
119 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
120 SuperFoldStatus expState = SuperFoldStatus::HALF_FOLDED;
121
122 EXPECT_EQ(curState, expState);
123 }
124
125 /**
126 * @tc.name: HandleSuperFoldStatusChange
127 * @tc.desc: test function : ANGLE_CHANGE_FOLDED
128 * @tc.type: FUNC
129 */
130 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange04, Function | SmallTest | Level1)
131 {
132 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
133 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::ANGLE_CHANGE_FOLDED;
134 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::HALF_FOLDED);
135 std::function<void()> func = [&]()
__anonfdcf13890602() 136 {
137 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
138 };
139
140 func();
141 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
142 SuperFoldStatus expState = SuperFoldStatus::FOLDED;
143
144 EXPECT_EQ(curState, expState);
145 }
146
147 /**
148 * @tc.name: HandleSuperFoldStatusChange
149 * @tc.desc: test function : KEYBOARD_ON
150 * @tc.type: FUNC
151 */
152 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange05, Function | SmallTest | Level1)
153 {
154 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
155 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::KEYBOARD_ON;
156 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::HALF_FOLDED);
157 std::function<void()> func = [&]()
__anonfdcf13890702() 158 {
159 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
160 };
161
162 func();
163 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
164 SuperFoldStatus expState = SuperFoldStatus::KEYBOARD;
165
166 EXPECT_EQ(curState, expState);
167 }
168
169 /**
170 * @tc.name: HandleSuperFoldStatusChange
171 * @tc.desc: test function : KEYBOARD_ON
172 * @tc.type: FUNC
173 */
174 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange06, Function | SmallTest | Level1)
175 {
176 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
177 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::KEYBOARD_ON;
178 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::EXPANDED);
179 std::function<void()> func = [&]()
__anonfdcf13890802() 180 {
181 SuperFoldStateManager::GetInstance().
182 HandleSuperFoldStatusChange(SuperFoldStatusChangeEvents::ANGLE_CHANGE_HALF_FOLDED);
183 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
184 };
185
186 func();
187 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
188 SuperFoldStatus expState = SuperFoldStatus::KEYBOARD;
189
190 EXPECT_EQ(curState, expState);
191 }
192
193 /**
194 * @tc.name: HandleSuperFoldStatusChange
195 * @tc.desc: test function : KEYBOARD_OFF
196 * @tc.type: FUNC
197 */
198 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange07, Function | SmallTest | Level1)
199 {
200 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
201 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::KEYBOARD_OFF;
202 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::KEYBOARD);
203 std::function<void()> func = [&]()
__anonfdcf13890902() 204 {
205 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
206 };
207
208 func();
209 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
210 SuperFoldStatus expState = SuperFoldStatus::HALF_FOLDED;
211
212 EXPECT_EQ(curState, expState);
213 }
214
215 /**
216 * @tc.name: HandleSuperFoldStatusChange
217 * @tc.desc: test function : SYSTEM_KEYBOARD_ON
218 * @tc.type: FUNC
219 */
220 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange08, Function | SmallTest | Level1)
221 {
222 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
223 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::SYSTEM_KEYBOARD_ON;
224 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::HALF_FOLDED);
225 std::function<void()> func = [&]()
__anonfdcf13890a02() 226 {
227 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
228 };
229
230 func();
231 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
232 SuperFoldStatus expState = SuperFoldStatus::HALF_FOLDED;
233
234 EXPECT_EQ(curState, expState);
235 }
236
237 /**
238 * @tc.name: HandleSuperFoldStatusChange
239 * @tc.desc: test function : SYSTEM_KEYBOARD_OFF
240 * @tc.type: FUNC
241 */
242 HWTEST_F(SuperFoldStateManagerTest, HandleSuperFoldStatusChange09, Function | SmallTest | Level1)
243 {
244 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
245 SuperFoldStatusChangeEvents events = SuperFoldStatusChangeEvents::SYSTEM_KEYBOARD_OFF;
246 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::HALF_FOLDED);
247 std::function<void()> func = [&]()
__anonfdcf13890b02() 248 {
249 SuperFoldStateManager::GetInstance().HandleSuperFoldStatusChange(events);
250 };
251
252 func();
253 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
254 SuperFoldStatus expState = SuperFoldStatus::HALF_FOLDED;
255
256 EXPECT_EQ(curState, expState);
257 }
258
259 /**
260 * @tc.name: MatchSuperFoldStatusToFoldStatus
261 * @tc.desc: test function : EXPANDED
262 * @tc.type: FUNC
263 */
264 HWTEST_F(SuperFoldStateManagerTest, MatchSuperFoldStatusToFoldStatus01, Function | SmallTest | Level1)
265 {
266 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
267 SuperFoldStatus superFoldStatus = SuperFoldStatus::EXPANDED;
268 FoldStatus foldStatus;
269 std::function<void()> func = [&]()
__anonfdcf13890c02() 270 {
271 foldStatus = SuperFoldStateManager::GetInstance().MatchSuperFoldStatusToFoldStatus(superFoldStatus);
272 };
273
274 func();
275 FoldStatus foldStatusExp = FoldStatus::EXPAND;
276 EXPECT_EQ(foldStatus, foldStatusExp);
277 }
278
279 /**
280 * @tc.name: MatchSuperFoldStatusToFoldStatus
281 * @tc.desc: test function : HALF_FOLDED
282 * @tc.type: FUNC
283 */
284 HWTEST_F(SuperFoldStateManagerTest, MatchSuperFoldStatusToFoldStatus02, Function | SmallTest | Level1)
285 {
286 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
287 SuperFoldStatus superFoldStatus = SuperFoldStatus::HALF_FOLDED;
288 FoldStatus foldStatus;
289 std::function<void()> func = [&]()
__anonfdcf13890d02() 290 {
291 foldStatus = SuperFoldStateManager::GetInstance().MatchSuperFoldStatusToFoldStatus(superFoldStatus);
292 };
293
294 func();
295 FoldStatus foldStatusExp = FoldStatus::HALF_FOLD;
296 EXPECT_EQ(foldStatus, foldStatusExp);
297 }
298
299 /**
300 * @tc.name: MatchSuperFoldStatusToFoldStatus
301 * @tc.desc: test function : FOLDED
302 * @tc.type: FUNC
303 */
304 HWTEST_F(SuperFoldStateManagerTest, MatchSuperFoldStatusToFoldStatus03, Function | SmallTest | Level1)
305 {
306 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
307 SuperFoldStatus superFoldStatus = SuperFoldStatus::FOLDED;
308 FoldStatus foldStatus;
309 std::function<void()> func = [&]()
__anonfdcf13890e02() 310 {
311 foldStatus = SuperFoldStateManager::GetInstance().MatchSuperFoldStatusToFoldStatus(superFoldStatus);
312 };
313
314 func();
315 FoldStatus foldStatusExp = FoldStatus::FOLDED;
316 EXPECT_EQ(foldStatus, foldStatusExp);
317 }
318
319 /**
320 * @tc.name: MatchSuperFoldStatusToFoldStatus
321 * @tc.desc: test function : KEYBOARD
322 * @tc.type: FUNC
323 */
324 HWTEST_F(SuperFoldStateManagerTest, MatchSuperFoldStatusToFoldStatus04, Function | SmallTest | Level1)
325 {
326 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
327 SuperFoldStatus superFoldStatus = SuperFoldStatus::KEYBOARD;
328 FoldStatus foldStatus;
329 std::function<void()> func = [&]()
__anonfdcf13890f02() 330 {
331 foldStatus = SuperFoldStateManager::GetInstance().MatchSuperFoldStatusToFoldStatus(superFoldStatus);
332 };
333
334 func();
335 FoldStatus foldStatusExp = FoldStatus::HALF_FOLD;
336 EXPECT_EQ(foldStatus, foldStatusExp);
337 }
338
339 /**
340 * @tc.name: MatchSuperFoldStatusToFoldStatus
341 * @tc.desc: test function : UNKNOWN
342 * @tc.type: FUNC
343 */
344 HWTEST_F(SuperFoldStateManagerTest, MatchSuperFoldStatusToFoldStatus05, Function | SmallTest | Level1)
345 {
346 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
347 SuperFoldStatus superFoldStatus = SuperFoldStatus::UNKNOWN;
348 FoldStatus foldStatus;
349 std::function<void()> func = [&]()
__anonfdcf13891002() 350 {
351 foldStatus = SuperFoldStateManager::GetInstance().MatchSuperFoldStatusToFoldStatus(superFoldStatus);
352 };
353
354 func();
355 FoldStatus foldStatusExp = FoldStatus::UNKNOWN;
356 EXPECT_EQ(foldStatus, foldStatusExp);
357 }
358
359 /**
360 * @tc.name: SetSystemKeyboardStatus
361 * @tc.desc: SetSystemKeyboardStatus with true as parameter
362 * @tc.type: FUNC
363 */
364 HWTEST_F(SuperFoldStateManagerTest, SetSystemKeyboardStatus01, Function | SmallTest | Level1)
365 {
366 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
367 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::HALF_FOLDED);
368 std::function<void()> func = [&]()
__anonfdcf13891102() 369 {
370 SuperFoldStateManager::GetInstance().SetSystemKeyboardStatus(true);
371 };
372
373 func();
374 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
375 SuperFoldStatus expState = SuperFoldStatus::HALF_FOLDED;
376
377 EXPECT_EQ(curState, expState);
378 }
379
380 /**
381 * @tc.name: SetSystemKeyboardStatus
382 * @tc.desc: SetSystemKeyboardStatus with false as parameter
383 * @tc.type: FUNC
384 */
385 HWTEST_F(SuperFoldStateManagerTest, SetSystemKeyboardStatus02, Function | SmallTest | Level1)
386 {
387 ONLY_FOR_SUPERFOLD_DISPLAY_DEVICE
388 SuperFoldStateManager::GetInstance().SetCurrentStatus(SuperFoldStatus::HALF_FOLDED);
389 std::function<void()> func = [&]()
__anonfdcf13891202() 390 {
391 SuperFoldStateManager::GetInstance().SetSystemKeyboardStatus(false);
392 };
393
394 func();
395 SuperFoldStatus curState = SuperFoldStateManager::GetInstance().GetCurrentStatus();
396 SuperFoldStatus expState = SuperFoldStatus::HALF_FOLDED;
397
398 EXPECT_EQ(curState, expState);
399 }
400 }
401 }
402 }