1 /*
2  * Copyright (c) 2020-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 "components/ui_label.h"
17 
18 #include <climits>
19 #include <gtest/gtest.h>
20 #include "font/ui_font.h"
21 
22 using namespace testing::ext;
23 namespace OHOS {
24 namespace {
25     const int16_t INIT_WIDTH = 100;
26     const int16_t INIT_HEIGHT = 150;
27 }
28 
29 class UILabelTest : public testing::Test {
30 public:
31     static void SetUpTestCase(void);
32     static void TearDownTestCase(void);
33     static UILabel* label_;
34 };
35 
36 UILabel* UILabelTest::label_ = nullptr;
37 
SetUpTestCase(void)38 void UILabelTest::SetUpTestCase(void)
39 {
40     if (label_ == nullptr) {
41         label_ = new UILabel();
42     }
43 }
44 
TearDownTestCase(void)45 void UILabelTest::TearDownTestCase(void)
46 {
47     if (label_ != nullptr) {
48         delete label_;
49         label_ = nullptr;
50     }
51 }
52 
53 /**
54  * @tc.name: UILabelGetViewType_001
55  * @tc.desc: Verify GetViewType and GetHeight function.
56  * @tc.type: FUNC
57  * @tc.require: AR000DSMQ1
58  */
59 HWTEST_F(UILabelTest, UILabelGetViewType_001, TestSize.Level1)
60 {
61     if (label_ == nullptr) {
62         EXPECT_EQ(1, 0);
63         return;
64     }
65     EXPECT_EQ(label_->GetViewType(), UI_LABEL);
66 }
67 
68 /**
69  * @tc.name: UILabelResize_001
70  * @tc.desc: Verify Resize function.
71  * @tc.type: FUNC
72  * @tc.require: AR000DSMQ1
73  */
74 HWTEST_F(UILabelTest, UILabelResize_001, TestSize.Level1)
75 {
76     if (label_ == nullptr) {
77         EXPECT_EQ(1, 0);
78         return;
79     }
80     label_->Resize(INIT_WIDTH, INIT_HEIGHT);
81     EXPECT_EQ(label_->GetWidth(), INIT_WIDTH);
82     EXPECT_EQ(label_->GetHeight(), INIT_HEIGHT);
83 }
84 
85 /**
86  * @tc.name: UILabelSetText_001
87  * @tc.desc: Verify SetText function.
88  * @tc.type: FUNC
89  * @tc.require: AR000DSMQ1
90  */
91 HWTEST_F(UILabelTest, UILabelSetText_001, TestSize.Level1)
92 {
93     if (label_ == nullptr) {
94         EXPECT_EQ(1, 0);
95         return;
96     }
97     const char* text = "abc";
98     label_->Resize(INIT_WIDTH, INIT_HEIGHT);
99     label_->SetText(text);
100 
101     const char* text0 = label_->GetText();
102     ASSERT_TRUE(text0);
103     EXPECT_EQ(strcmp(text0, text), 0);
104 }
105 
106 /**
107  * @tc.name: UILabelSetLineBreakMode_001
108  * @tc.desc: Verify SetLineBreakMode function.
109  * @tc.type: FUNC
110  * @tc.require: AR000DSMQ1
111  */
112 HWTEST_F(UILabelTest, UILabelSetLineBreakMode_001, TestSize.Level0)
113 {
114     if (label_ == nullptr) {
115         EXPECT_EQ(1, 0);
116         return;
117     }
118     const uint8_t lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS;
119 
120     label_->SetLineBreakMode(lineBreakMode);
121     EXPECT_EQ(label_->GetLineBreakMode(), lineBreakMode);
122 }
123 
124 /**
125  * @tc.name: UILabelSetTextColor_001
126  * @tc.desc: Verify SetTextColor function.
127  * @tc.type: FUNC
128  * @tc.require: AR000DSMQ1
129  */
130 HWTEST_F(UILabelTest, UILabelSetTextColor_001, TestSize.Level1)
131 {
132     if (label_ == nullptr) {
133         EXPECT_EQ(1, 0);
134         return;
135     }
136     ColorType color = Color::White();
137 
138     label_->SetTextColor(color);
139     EXPECT_EQ(label_->GetTextColor().full, color.full);
140 }
141 
142 /**
143  * @tc.name: UILabelSetLongMode_001
144  * @tc.desc: Verify SetLongMode function.
145  * @tc.type: FUNC
146  * @tc.require: AR000DSMQ1
147  */
148 HWTEST_F(UILabelTest, UILabelSetLongMode_001, TestSize.Level0)
149 {
150     if (label_ == nullptr) {
151         EXPECT_EQ(1, 0);
152         return;
153     }
154     label_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
155     EXPECT_EQ(label_->GetLineBreakMode(), UILabel::LINE_BREAK_ADAPT);
156 }
157 
158 /**
159  * @tc.name: UILabelSetAlign_001
160  * @tc.desc: Verify SetAlign function.
161  * @tc.type: FUNC
162  * @tc.require: AR000DSMQ1
163  */
164 HWTEST_F(UILabelTest, UILabelSetAlign_001, TestSize.Level0)
165 {
166     if (label_ == nullptr) {
167         EXPECT_EQ(1, 0);
168         return;
169     }
170     label_->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_RIGHT, UITextLanguageAlignment::TEXT_ALIGNMENT_BOTTOM);
171     EXPECT_EQ(label_->GetHorAlign(), UITextLanguageAlignment::TEXT_ALIGNMENT_RIGHT);
172     EXPECT_EQ(label_->GetVerAlign(), UITextLanguageAlignment::TEXT_ALIGNMENT_BOTTOM);
173 }
174 
175 /**
176  * @tc.name: UILabelSetDirect_001
177  * @tc.desc: Verify SetDirect function.
178  * @tc.type: FUNC
179  * @tc.require: AR000DSMQ1
180  */
181 HWTEST_F(UILabelTest, UILabelSetDirect_001, TestSize.Level1)
182 {
183     if (label_ == nullptr) {
184         EXPECT_EQ(1, 0);
185         return;
186     }
187     label_->SetDirect(UITextLanguageDirect::TEXT_DIRECT_RTL);
188     EXPECT_EQ(label_->GetDirect(), UITextLanguageDirect::TEXT_DIRECT_RTL);
189 }
190 
191 /**
192  * @tc.name: UILabelSetRollStartPos_001
193  * @tc.desc: Verify SetRollStartPos function.
194  * @tc.type: FUNC
195  * @tc.require: AR000DSMQ1
196  */
197 HWTEST_F(UILabelTest, UILabelSetRollStartPos_001, TestSize.Level0)
198 {
199     if (label_ == nullptr) {
200         EXPECT_EQ(1, 0);
201         return;
202     }
203     const int16_t rollStartPos = 50;
204 
205     label_->SetRollStartPos(rollStartPos);
206     EXPECT_EQ(label_->GetRollStartPos(), rollStartPos);
207 }
208 
209 /**
210  * @tc.name: UILabelSetFont_001
211  * @tc.desc: Verify SetFont function.
212  * @tc.type: FUNC
213  * @tc.require: AR000DSMQ1
214  */
215 HWTEST_F(UILabelTest, UILabelSetFont_001, TestSize.Level1)
216 {
217     if (label_ == nullptr) {
218         EXPECT_EQ(1, 0);
219         return;
220     }
221     uint16_t fontId = label_->GetFontId();
222 
223     const uint8_t fontSize = 20;  // 20: font size for test
224     label_->SetFont("error_font_name", fontSize);
225 
226     EXPECT_EQ(label_->GetFontId(), fontId);
227 }
228 
229 /**
230  * @tc.name: UILabelSetStyle_001
231  * @tc.desc: Verify SetStyle function, equal.
232  */
233 HWTEST_F(UILabelTest, UILabelSetStyle_001, TestSize.Level1)
234 {
235     if (label_ == nullptr) {
236         EXPECT_NE(0, 0);
237         return;
238     }
239     UIView* view = new UIView();
240     Style style;
241     style.borderOpa_ = OPA_OPAQUE;
242     label_->SetStyle(style);
243     EXPECT_EQ(view->GetStyleConst().borderOpa_, OPA_OPAQUE);
244     label_->SetStyle(STYLE_LINE_OPA, OPA_OPAQUE);
245     EXPECT_EQ(view->GetStyle(STYLE_LINE_OPA), OPA_OPAQUE);
246     delete view;
247     view = nullptr;
248 }
249 
250 /**
251  * @tc.name: UILabelOnPreDraw_001
252  * @tc.desc: Verify OnPreDraw function, equal.
253  */
254 HWTEST_F(UILabelTest, UILabelOnPreDraw_001, TestSize.Level1)
255 {
256     if (label_ == nullptr) {
257         EXPECT_NE(0, 0);
258         return;
259     }
260     Rect* invalidatedArea = new Rect();
261     EXPECT_EQ(label_->OnPreDraw(*invalidatedArea), false);
262     delete invalidatedArea;
263     invalidatedArea = nullptr;
264 }
265 
266 #if defined(ENABLE_TEXT_STYLE) && ENABLE_TEXT_STYLE
267 /**
268  * @tc.name: UILabelSetText_002
269  * @tc.desc: Verify SetText function.
270  */
271 HWTEST_F(UILabelTest, UILabelSetText_002, TestSize.Level1)
272 {
273     if (label_ == nullptr) {
274         EXPECT_EQ(1, 0);
275         return;
276     }
277     SpannableString spannableString("图形子系统测试正常粗体斜体粗斜体");
278     spannableString.SetTextStyle(TEXT_STYLE_ITALIC, 11, 13);
279     spannableString.SetTextStyle(TEXT_STYLE_BOLD, 9, 11);
280     spannableString.SetTextStyle(TEXT_STYLE_BOLD_ITALIC, 13, 16);
281     label_->SetText(&spannableString);
282     EXPECT_EQ(spannableString.styleList_.Size(), 3);
283 }
284 #endif
285 
286 /**
287  * @tc.name: UILabelSetFontId_001
288  * @tc.desc: Verify SetFontId function.
289  */
290 HWTEST_F(UILabelTest, UILabelSetFontId_001, TestSize.Level0)
291 {
292     if (label_ == nullptr) {
293         EXPECT_NE(0, 0);
294         return;
295     }
296     const uint16_t fontId = 16;
297     label_->SetFontId(fontId);
298     if (!UIFont::GetInstance()->IsVectorFont()) {
299         EXPECT_EQ(label_->GetFontId(), fontId);
300     } else {
301         EXPECT_EQ(label_->GetFontId(), 0);
302     }
303 }
304 
305 /**
306  * @tc.name: UILabelSetRollSpeed_001
307  * @tc.desc: Verify SetRollSpeed function.
308  */
309 HWTEST_F(UILabelTest, UILabelSetRollSpeed_001, TestSize.Level0)
310 {
311     if (label_ == nullptr) {
312         EXPECT_EQ(1, 0);
313         return;
314     }
315     const uint16_t RollSpeed = 50;
316 
317     label_->SetRollSpeed(RollSpeed);
318     EXPECT_EQ(label_->GetRollSpeed(), RollSpeed);
319 }
320 
321 /**
322  * @tc.name: UILabelGetTextSize_001
323  * @tc.desc: Verify GetTextSize function.
324  */
325 HWTEST_F(UILabelTest, UILabelGetTextSize_001, TestSize.Level0)
326 {
327     if (label_ == nullptr) {
328         EXPECT_EQ(1, 0);
329         return;
330     }
331     Text* labelText = new Text();
332     EXPECT_EQ(labelText->GetTextSize().x, label_->GetTextWidth());
333     EXPECT_EQ(labelText->GetTextSize().y, label_->GetTextHeight());
334     delete labelText;
335     labelText = nullptr;
336 }
337 
338 /**
339  * @tc.name: UILabelSetSize_001
340  * @tc.desc: Verify SetSize function.
341  */
342 HWTEST_F(UILabelTest, UILabelSetSize_001, TestSize.Level0)
343 {
344     if (label_ == nullptr) {
345         EXPECT_EQ(1, 0);
346         return;
347     }
348     label_->SetWidth(0);
349     EXPECT_EQ(label_->GetWidth(), 0);
350 
351     label_->SetHeight(0);
352     EXPECT_EQ(label_->GetHeight(), 0);
353 }
354 } // namespace OHOS
355