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_fold_state_manager.h"
19 #include "scene_board_judgement.h"
20
21 using namespace testing;
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace Rosen {
26 namespace {
27 constexpr uint32_t SLEEP_TIME_IN_US = 100000; // 100ms
28 }
29 class SingleDisplaySensorFoldStateManagerTest : 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 SingleDisplaySensorFoldStateManagerTest::SetUpTestCase()
38 {
39 }
40
TearDownTestCase()41 void SingleDisplaySensorFoldStateManagerTest::TearDownTestCase()
42 {
43 usleep(SLEEP_TIME_IN_US);
44 }
45
SetUp()46 void SingleDisplaySensorFoldStateManagerTest::SetUp()
47 {
48 }
49
TearDown()50 void SingleDisplaySensorFoldStateManagerTest::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(SingleDisplaySensorFoldStateManagerTest, HandleAngleChange, Function | SmallTest | Level1)
61 {
62 if (!SceneBoardJudgement::IsSceneBoardEnabled()) {
63 GTEST_SKIP() << "SceneBoard is not enabled, skipping test.";
64 }
65 float angel = 0;
66 int hall = 0;
67 sptr<FoldScreenPolicy> foldScreenPolicy = nullptr;
68 SingleDisplaySensorFoldStateManager manager;
69 manager.HandleAngleChange(angel, hall, foldScreenPolicy);
70 EXPECT_TRUE(true);
71 }
72
73 /**
74 * @tc.name: HandleHallChange
75 * @tc.desc: test function : HandleHallChange
76 * @tc.type: FUNC
77 */
78 HWTEST_F(SingleDisplaySensorFoldStateManagerTest, HandleHallChange, Function | SmallTest | Level1)
79 {
80 if (!SceneBoardJudgement::IsSceneBoardEnabled()) {
81 GTEST_SKIP() << "SceneBoard is not enabled, skipping test.";
82 }
83 float angel = 0;
84 int hall = 0;
85 sptr<FoldScreenPolicy> foldScreenPolicy = nullptr;
86 SingleDisplaySensorFoldStateManager manager;
87 manager.HandleHallChange(angel, hall, foldScreenPolicy);
88 EXPECT_TRUE(true);
89 }
90
91 /**
92 * @tc.name: UpdateSwitchScreenBoundaryForLargeFoldDevice
93 * @tc.desc: test function : UpdateSwitchScreenBoundaryForLargeFoldDevice
94 * @tc.type: FUNC
95 */
96 HWTEST_F(SingleDisplaySensorFoldStateManagerTest, UpdateSwitchScreenBoundaryForLargeFoldDevice,
97 Function | SmallTest | Level1)
98 {
99 if (!SceneBoardJudgement::IsSceneBoardEnabled()) {
100 GTEST_SKIP() << "SceneBoard is not enabled, skipping test.";
101 }
102 float angel = 0;
103 int hall = 0;
104 SingleDisplaySensorFoldStateManager manager;
105 manager.UpdateSwitchScreenBoundaryForLargeFoldDevice(angel, hall);
106 EXPECT_TRUE(true);
107
108 angel = 91.0F;
109 hall = 1;
110 manager.UpdateSwitchScreenBoundaryForLargeFoldDevice(angel, hall);
111 EXPECT_TRUE(true);
112 }
113
114 /**
115 * @tc.name: GetNextFoldState01
116 * @tc.desc: test function : GetNextFoldState
117 * @tc.type: FUNC
118 */
119 HWTEST_F(SingleDisplaySensorFoldStateManagerTest, GetNextFoldState01, Function | SmallTest | Level1)
120 {
121 if (!SceneBoardJudgement::IsSceneBoardEnabled()) {
122 GTEST_SKIP() << "SceneBoard is not enabled, skipping test.";
123 }
124 float angel = -0.1;
125 int hall = 0;
126 SingleDisplaySensorFoldStateManager manager;
127 auto result1 = manager.GetNextFoldState(angel, hall);
128 EXPECT_EQ(static_cast<int>(result1), 0);
129
130 manager.allowUserSensorForLargeFoldDevice = 0;
131 angel = 90.0F;
132 hall = 1;
133 auto result2 = manager.GetNextFoldState(angel, hall);
134 EXPECT_EQ(static_cast<int>(result2), 3);
135
136 angel = 130.0F - 0.1;
137 hall = 1;
138 auto result3 = manager.GetNextFoldState(angel, hall);
139 EXPECT_EQ(static_cast<int>(result3), 3);
140
141 angel = 130.0F - 0.1;
142 hall = 0;
143 auto result4 = manager.GetNextFoldState(angel, hall);
144 EXPECT_EQ(static_cast<int>(result4), 3);
145
146 angel = 130.0F + 0.1;
147 hall = 0;
148 auto result5 = manager.GetNextFoldState(angel, hall);
149 EXPECT_EQ(static_cast<int>(result5), 2);
150
151 angel = 140.0F + 0.1;
152 hall = 0;
153 auto result6 = manager.GetNextFoldState(angel, hall);
154 EXPECT_EQ(static_cast<int>(result6), 2);
155
156 angel = 140.0F + 0.1;
157 hall = 1;
158 auto result7 = manager.GetNextFoldState(angel, hall);
159 EXPECT_EQ(static_cast<int>(result7), 1);
160 }
161
162 /**
163 * @tc.name: GetNextFoldState02
164 * @tc.desc: test function : GetNextFoldState
165 * @tc.type: FUNC
166 */
167 HWTEST_F(SingleDisplaySensorFoldStateManagerTest, GetNextFoldState02, Function | SmallTest | Level1)
168 {
169 if (!SceneBoardJudgement::IsSceneBoardEnabled()) {
170 GTEST_SKIP() << "SceneBoard is not enabled, skipping test.";
171 }
172 SingleDisplaySensorFoldStateManager manager;
173 manager.allowUserSensorForLargeFoldDevice = 1;
174 float angel = 25.0F;
175 int hall = 1;
176 auto result1 = manager.GetNextFoldState(angel, hall);
177 EXPECT_EQ(static_cast<int>(result1), 0);
178
179 angel = 70.0F - 0.1;
180 auto result2 = manager.GetNextFoldState(angel, hall);
181 EXPECT_EQ(static_cast<int>(result2), 2);
182
183 angel = 70.0F + 0.1;
184 auto result3 = manager.GetNextFoldState(angel, hall);
185 EXPECT_EQ(static_cast<int>(result3), 3);
186
187 angel = 130.0F - 0.1;
188 auto result4 = manager.GetNextFoldState(angel, hall);
189 EXPECT_EQ(static_cast<int>(result4), 3);
190
191 angel = 130.0F + 0.1;
192 auto result5 = manager.GetNextFoldState(angel, hall);
193 EXPECT_EQ(static_cast<int>(result5), 3);
194
195 angel = 80.0F - 0.1;
196 auto result6 = manager.GetNextFoldState(angel, hall);
197 EXPECT_EQ(static_cast<int>(result6), 3);
198
199 angel = 70.0F + 0.1;
200 hall = 0;
201 auto result7 = manager.GetNextFoldState(angel, hall);
202 EXPECT_EQ(static_cast<int>(result7), 3);
203
204 angel = 130.0F + 0.1;
205 auto result8 = manager.GetNextFoldState(angel, hall);
206 EXPECT_EQ(static_cast<int>(result8), 2);
207 }
208 }
209 }
210 }