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