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