1 /*
2 * Copyright (c) 2021 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 <climits>
17 #include <gtest/gtest.h>
18
19 #include "components/ui_arc_scroll_bar.h"
20 #include "components/ui_box_scroll_bar.h"
21 #include "components/ui_list.h"
22 #include "components/ui_scroll_view.h"
23 #include "engines/gfx/gfx_engine_manager.h"
24
25 using namespace testing::ext;
26
27 namespace OHOS {
28 class ScrollBarTest : public testing::Test {
29 public:
30 static void SetUpTestCase();
31 static void TearDownTestCase();
32 };
33
SetUpTestCase()34 void ScrollBarTest::SetUpTestCase() {}
35
TearDownTestCase()36 void ScrollBarTest::TearDownTestCase() {}
37
38 class TestArcScrollBarTest : public UIArcScrollBar {
39 public:
GetWidth() const40 int16_t GetWidth() const
41 {
42 return width_;
43 }
44
GetRadius() const45 int16_t GetRadius() const
46 {
47 return radius_;
48 }
49
GetBackStyle() const50 const Style* GetBackStyle() const
51 {
52 return backgroundStyle_;
53 }
54
GetForeStyle() const55 const Style* GetForeStyle() const
56 {
57 return foregroundStyle_;
58 }
59
GetProportion() const60 float GetProportion() const
61 {
62 return foregroundProportion_;
63 }
64
GetOpacity() const65 uint8_t GetOpacity() const
66 {
67 return opacity_;
68 }
69 };
70
71 class TestBoxScrollBarTest : public UIBoxScrollBar {
72 public:
GetWidth() const73 int16_t GetWidth() const
74 {
75 return backgroundRect_.GetWidth();
76 }
77
GetHeight() const78 int16_t GetHeight() const
79 {
80 return backgroundRect_.GetHeight();
81 }
82
GetBackStyle() const83 const Style* GetBackStyle() const
84 {
85 return backgroundStyle_;
86 }
87
GetForeStyle() const88 const Style* GetForeStyle() const
89 {
90 return foregroundStyle_;
91 }
92
GetProportion() const93 float GetProportion() const
94 {
95 return foregroundProportion_;
96 }
97
GetOpacity() const98 uint8_t GetOpacity() const
99 {
100 return opacity_;
101 }
102 };
103
104 class TestUIScrollView : public UIScrollView {
105 public:
GetXScrollBarVisible() const106 bool GetXScrollBarVisible() const
107 {
108 return xScrollBarVisible_;
109 }
110
GetYScrollBarVisible() const111 bool GetYScrollBarVisible() const
112 {
113 return yScrollBarVisible_;
114 }
115 };
116
117 class TestUIList : public UIList {
118 public:
GetXScrollBarVisible() const119 bool GetXScrollBarVisible() const
120 {
121 return xScrollBarVisible_;
122 }
123
GetYScrollBarVisible() const124 bool GetYScrollBarVisible() const
125 {
126 return yScrollBarVisible_;
127 }
128 };
129
130 HWTEST_F(ScrollBarTest, UIScrollBarSetXScrollBarVisible, TestSize.Level0)
131 {
132 TestUIScrollView scrollView;
133 TestUIList uiList;
134
135 EXPECT_FALSE(scrollView.GetXScrollBarVisible());
136 EXPECT_FALSE(uiList.GetXScrollBarVisible());
137 BaseGfxEngine::GetInstance()->SetScreenShape(ScreenShape::CIRCLE);
138 scrollView.SetXScrollBarVisible(true);
139 uiList.SetXScrollBarVisible(true);
140 EXPECT_FALSE(scrollView.GetXScrollBarVisible());
141 EXPECT_FALSE(uiList.GetXScrollBarVisible());
142
143 BaseGfxEngine::GetInstance()->SetScreenShape(ScreenShape::RECTANGLE);
144 scrollView.SetXScrollBarVisible(true);
145 uiList.SetXScrollBarVisible(true);
146 EXPECT_TRUE(scrollView.GetXScrollBarVisible());
147 EXPECT_TRUE(uiList.GetXScrollBarVisible());
148 }
149
150 HWTEST_F(ScrollBarTest, UIScrollBarSetYScrollBarVisible, TestSize.Level0)
151 {
152 TestUIScrollView scrollView;
153 TestUIList uiList;
154
155 EXPECT_FALSE(scrollView.GetYScrollBarVisible());
156 EXPECT_FALSE(uiList.GetYScrollBarVisible());
157 scrollView.SetYScrollBarVisible(true);
158 uiList.SetYScrollBarVisible(true);
159 EXPECT_TRUE(scrollView.GetYScrollBarVisible());
160 EXPECT_TRUE(uiList.GetYScrollBarVisible());
161 }
162
163 HWTEST_F(ScrollBarTest, UIScrollBarSetPosition, TestSize.Level0)
164 {
165 constexpr int16_t VALID_POSITION = 5;
166 constexpr int16_t VALID_LEN = 5;
167 constexpr int16_t NEGATIVE_LEN = -5;
168 constexpr int16_t ZERO_LEN = 0;
169
170 TestArcScrollBarTest arcBar;
171 arcBar.SetPosition(VALID_POSITION, VALID_POSITION, VALID_LEN, VALID_LEN);
172 EXPECT_EQ(arcBar.GetWidth(), VALID_LEN);
173 EXPECT_EQ(arcBar.GetRadius(), VALID_LEN);
174
175 TestBoxScrollBarTest boxBar;
176 boxBar.SetPosition(VALID_POSITION, VALID_POSITION, VALID_LEN, VALID_LEN);
177 EXPECT_EQ(boxBar.GetWidth(), VALID_LEN);
178 EXPECT_EQ(boxBar.GetHeight(), VALID_LEN);
179
180 arcBar.SetPosition(VALID_POSITION, VALID_POSITION, VALID_LEN, NEGATIVE_LEN);
181 EXPECT_NE(arcBar.GetRadius(), NEGATIVE_LEN);
182
183 boxBar.SetPosition(VALID_POSITION, VALID_POSITION, VALID_LEN, NEGATIVE_LEN);
184 EXPECT_NE(boxBar.GetHeight(), NEGATIVE_LEN);
185
186 arcBar.SetPosition(VALID_POSITION, VALID_POSITION, ZERO_LEN, VALID_LEN);
187 EXPECT_NE(arcBar.GetWidth(), ZERO_LEN);
188
189 boxBar.SetPosition(VALID_POSITION, VALID_POSITION, ZERO_LEN, VALID_LEN);
190 EXPECT_NE(boxBar.GetWidth(), ZERO_LEN);
191 }
192
193 HWTEST_F(ScrollBarTest, UIScrollBarGetBarStyle, TestSize.Level0)
194 {
195 Style& defaultBackStyle = StyleDefault::GetScrollBarBackgroundStyle();
196 Style& defaultForeStyle = StyleDefault::GetScrollBarForegroundStyle();
197
198 TestArcScrollBarTest arcBar;
199 TestBoxScrollBarTest boxBar;
200
201 EXPECT_EQ(arcBar.GetBackStyle()->GetStyle(STYLE_LINE_COLOR), defaultBackStyle.GetStyle(STYLE_LINE_COLOR));
202 EXPECT_EQ(arcBar.GetForeStyle()->GetStyle(STYLE_LINE_COLOR), defaultForeStyle.GetStyle(STYLE_LINE_COLOR));
203
204 EXPECT_EQ(arcBar.GetBackStyle()->GetStyle(STYLE_LINE_OPA), defaultBackStyle.GetStyle(STYLE_LINE_OPA));
205 EXPECT_EQ(arcBar.GetForeStyle()->GetStyle(STYLE_LINE_OPA), defaultForeStyle.GetStyle(STYLE_LINE_OPA));
206
207 EXPECT_EQ(boxBar.GetBackStyle()->GetStyle(STYLE_BACKGROUND_COLOR),
208 defaultBackStyle.GetStyle(STYLE_BACKGROUND_COLOR));
209 EXPECT_EQ(boxBar.GetForeStyle()->GetStyle(STYLE_BACKGROUND_COLOR),
210 defaultForeStyle.GetStyle(STYLE_BACKGROUND_COLOR));
211
212 EXPECT_EQ(boxBar.GetBackStyle()->GetStyle(STYLE_BACKGROUND_OPA), defaultBackStyle.GetStyle(STYLE_BACKGROUND_OPA));
213 EXPECT_EQ(boxBar.GetForeStyle()->GetStyle(STYLE_BACKGROUND_OPA), defaultForeStyle.GetStyle(STYLE_BACKGROUND_OPA));
214 }
215
216 HWTEST_F(ScrollBarTest, UIScrollBarSetForegroundProportion, TestSize.Level0)
217 {
218 TestArcScrollBarTest arcBar;
219 TestBoxScrollBarTest boxBar;
220
221 float proportion[] = {0, 0.5, 1};
222 for (int8_t i = 0; i < sizeof(proportion) / sizeof(float); i++) {
223 arcBar.SetForegroundProportion(proportion[i]);
224 EXPECT_EQ(arcBar.GetProportion(), proportion[i]);
225
226 boxBar.SetForegroundProportion(proportion[i]);
227 EXPECT_EQ(boxBar.GetProportion(), proportion[i]);
228 }
229
230 float invalidProportion[] = {1.5, -0.5};
231 for (int8_t i = 0; i < sizeof(invalidProportion) / sizeof(float); i++) {
232 arcBar.SetForegroundProportion(invalidProportion[i]);
233 EXPECT_NE(arcBar.GetProportion(), invalidProportion[i]);
234
235 boxBar.SetForegroundProportion(invalidProportion[i]);
236 EXPECT_NE(boxBar.GetProportion(), invalidProportion[i]);
237 }
238 }
239
240 HWTEST_F(ScrollBarTest, UIScrollBarSetOpacity, TestSize.Level0)
241 {
242 TestArcScrollBarTest arcBar;
243 TestBoxScrollBarTest boxBar;
244
245 uint8_t opa[] = {0, 255};
246 for (int8_t i = 0; i < sizeof(opa) / sizeof(uint8_t); i++) {
247 arcBar.SetOpacity(opa[i]);
248 EXPECT_EQ(arcBar.GetOpacity(), opa[i]);
249
250 boxBar.SetOpacity(opa[i]);
251 EXPECT_EQ(boxBar.GetOpacity(), opa[i]);
252 }
253 }
254 } // namespace OHOS
255