1 /*
2 * Copyright (c) 2022 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_edit_text.h"
17
18 #include <climits>
19 #include <gtest/gtest.h>
20
21 #include "securec.h"
22
23 using namespace testing::ext;
24 namespace OHOS {
25 namespace {
26 constexpr int16_t INIT_WIDTH = 100;
27 constexpr int16_t INIT_HEIGHT = 150;
28 } // namespace
29
30 class EditTextOnChangeListener : public UIEditText::OnChangeListener {
31 public:
32 void OnChange(UIView& view, const char* value) override
33 {
34 uint32_t textLen = static_cast<uint32_t>(strlen(value));
35 if (value_ != nullptr) {
36 UIFree(value_);
37 value_ = nullptr;
38 }
39 value_ = static_cast<char*>(UIMalloc(textLen + 1));
40 if (value_ == nullptr) {
41 return;
42 }
43 if (strncpy_s(value_, textLen + 1, value, textLen) != EOK) {
44 UIFree(value_);
45 value_ = nullptr;
46 return;
47 }
48 }
49
GetValue()50 const char* GetValue()
51 {
52 return value_;
53 }
54
~EditTextOnChangeListener()55 virtual ~EditTextOnChangeListener()
56 {
57 if (value_ != nullptr) {
58 delete value_;
59 value_ = nullptr;
60 }
61 }
62
63 private:
64 char* value_ = nullptr;
65 };
66
67 class UIEditTextTest : public testing::Test {
68 public:
SetUpTestCase(void)69 static void SetUpTestCase(void) {}
TearDownTestCase(void)70 static void TearDownTestCase(void) {}
71 };
72
73 /**
74 * @tc.name: UIEditTextGetViewType_001
75 * @tc.desc: Verify GetViewType and GetHeight function.
76 * @tc.type: FUNC
77 * @tc.require: issueI5AD4A
78 */
HWTEST_F(UIEditTextTest, UIEditTextGetViewType_001, TestSize.Level1)79 HWTEST_F(UIEditTextTest, UIEditTextGetViewType_001, TestSize.Level1)
80 {
81 UIEditText* editText = new UIEditText();
82 EXPECT_EQ(editText->GetViewType(), UI_EDIT_TEXT);
83 delete editText;
84 }
85
86 /**
87 * @tc.name: UIEditTextResize_001
88 * @tc.desc: Verify Resize function.
89 * @tc.type: FUNC
90 * @tc.require: issueI5AD4A
91 */
HWTEST_F(UIEditTextTest, UIEditTextResize_001, TestSize.Level1)92 HWTEST_F(UIEditTextTest, UIEditTextResize_001, TestSize.Level1)
93 {
94 UIEditText* editText = new UIEditText();
95 editText->Resize(INIT_WIDTH, INIT_HEIGHT);
96 EXPECT_EQ(editText->GetWidth(), INIT_WIDTH);
97 EXPECT_EQ(editText->GetHeight(), INIT_HEIGHT);
98 delete editText;
99 }
100
101 /**
102 * @tc.name: UIEditTextSetText_001
103 * @tc.desc: Verify SetText function.
104 * @tc.type: FUNC
105 * @tc.require: issueI5AD4A
106 */
HWTEST_F(UIEditTextTest, UIEditTextSetText_001, TestSize.Level1)107 HWTEST_F(UIEditTextTest, UIEditTextSetText_001, TestSize.Level1)
108 {
109 UIEditText* editText = new UIEditText();
110 const char* text = "abc";
111 editText->Resize(INIT_WIDTH, INIT_HEIGHT);
112 editText->SetText(text);
113
114 const char* textTmp = editText->GetText();
115 ASSERT_TRUE(textTmp);
116 EXPECT_EQ(strcmp(textTmp, text), 0);
117 delete editText;
118 }
119
120 /**
121 * @tc.name: UIEditTextSetPlaceholder_001
122 * @tc.desc: Verify SetPlaceholder function.
123 * @tc.type: FUNC
124 * @tc.require: issueI5AD4A
125 */
HWTEST_F(UIEditTextTest, UIEditTextSetPlaceholder_001, TestSize.Level1)126 HWTEST_F(UIEditTextTest, UIEditTextSetPlaceholder_001, TestSize.Level1)
127 {
128 UIEditText* editText = new UIEditText();
129 const char* placeholder = "Name:";
130 editText->Resize(INIT_WIDTH, INIT_HEIGHT);
131 editText->SetPlaceholder(placeholder);
132
133 const char* placeholderTmp = editText->GetPlaceholder();
134 ASSERT_TRUE(placeholderTmp);
135 EXPECT_EQ(strcmp(placeholderTmp, placeholder), 0);
136 delete editText;
137 }
138
139 /**
140 * @tc.name: UIEditTextSetMaxLength_001
141 * @tc.desc: Verify SetMaxLength function.
142 * @tc.type: FUNC
143 * @tc.require: issueI5AD4A
144 */
HWTEST_F(UIEditTextTest, UIEditTextSetMaxLength_001, TestSize.Level1)145 HWTEST_F(UIEditTextTest, UIEditTextSetMaxLength_001, TestSize.Level1)
146 {
147 UIEditText* editText = new UIEditText();
148 uint16_t length1 = 20;
149 editText->SetMaxLength(length1);
150 EXPECT_EQ(editText->GetMaxLength(), length1);
151
152 uint16_t length2 = 0;
153 editText->SetMaxLength(length2);
154 EXPECT_EQ(editText->GetMaxLength(), length2);
155 delete editText;
156 }
157
158 /**
159 * @tc.name: UIEditTextSetInputType_001
160 * @tc.desc: Verify SetInputType function.
161 * @tc.type: FUNC
162 * @tc.require: issueI5AD4A
163 */
HWTEST_F(UIEditTextTest, UIEditTextSetInputType_001, TestSize.Level1)164 HWTEST_F(UIEditTextTest, UIEditTextSetInputType_001, TestSize.Level1)
165 {
166 UIEditText* editText = new UIEditText();
167 // check the default type
168 EXPECT_EQ(editText->GetInputType(), InputType::TEXT_TYPE);
169
170 InputType type = InputType::TEXT_TYPE;
171 editText->SetInputType(type);
172 EXPECT_EQ(editText->GetInputType(), type);
173
174 type = InputType::PASSWORD_TYPE;
175 editText->SetInputType(type);
176 EXPECT_EQ(editText->GetInputType(), type);
177 delete editText;
178 }
179
180 /**
181 * @tc.name: UIEditTextSetTextColor_001
182 * @tc.desc: Verify SetTextColor function.
183 * @tc.type: FUNC
184 * @tc.require: issueI5AD4A
185 */
HWTEST_F(UIEditTextTest, UIEditTextSetTextColor_001, TestSize.Level1)186 HWTEST_F(UIEditTextTest, UIEditTextSetTextColor_001, TestSize.Level1)
187 {
188 UIEditText* editText = new UIEditText();
189 ColorType color = Color::White();
190
191 editText->SetTextColor(color);
192 EXPECT_EQ(editText->GetTextColor().full, color.full);
193 delete editText;
194 }
195
196 /**
197 * @tc.name: UIEditTextSetPlaceholderColor_001
198 * @tc.desc: Verify SetPlaceholderColor function.
199 * @tc.type: FUNC
200 * @tc.require: issueI5AD4A
201 */
HWTEST_F(UIEditTextTest, UIEditTextSetPlaceholderColor_001, TestSize.Level1)202 HWTEST_F(UIEditTextTest, UIEditTextSetPlaceholderColor_001, TestSize.Level1)
203 {
204 UIEditText* editText = new UIEditText();
205 ColorType color = Color::White();
206
207 editText->SetPlaceholderColor(color);
208 EXPECT_EQ(editText->GetPlaceholderColor().full, color.full);
209 delete editText;
210 }
211
212 /**
213 * @tc.name: UIEditTextSetCursorColor_001
214 * @tc.desc: Verify SetCursorColor function.
215 * @tc.type: FUNC
216 * @tc.require: issueI5AD4A
217 */
HWTEST_F(UIEditTextTest, UIEditTextSetCursorColor_001, TestSize.Level1)218 HWTEST_F(UIEditTextTest, UIEditTextSetCursorColor_001, TestSize.Level1)
219 {
220 UIEditText* editText = new UIEditText();
221 ColorType color = Color::White();
222
223 editText->SetCursorColor(color);
224 EXPECT_EQ(editText->GetCursorColor().full, color.full);
225 delete editText;
226 }
227
228 /**
229 * @tc.name: UIEditTextSetFont_001
230 * @tc.desc: Verify SetFont function.
231 * @tc.type: FUNC
232 * @tc.require: issueI5AD4A
233 */
HWTEST_F(UIEditTextTest, UIEditTextSetFont_001, TestSize.Level1)234 HWTEST_F(UIEditTextTest, UIEditTextSetFont_001, TestSize.Level1)
235 {
236 UIEditText* editText = new UIEditText();
237 uint16_t fontId = editText->GetFontId();
238
239 const uint8_t fontSize = 20; // 20: font size for test
240 editText->SetFont("error_font_name", fontSize);
241
242 EXPECT_EQ(editText->GetFontId(), fontId);
243 delete editText;
244 }
245
246 /**
247 * @tc.name: UIEditTextGetTextWidth_001
248 * @tc.desc: Verify GetTextWidth function.
249 * @tc.type: FUNC
250 * @tc.require: issueI5AD4A
251 */
HWTEST_F(UIEditTextTest, UIEditTextGetTextWidth_001, TestSize.Level1)252 HWTEST_F(UIEditTextTest, UIEditTextGetTextWidth_001, TestSize.Level1)
253 {
254 UIEditText* editText = new UIEditText();
255 const char* text = "abc";
256 editText->SetText(text);
257 uint16_t width = editText->GetTextWidth();
258 EXPECT_EQ(width, 0); // no font file case
259 delete editText;
260 }
261
262 /**
263 * @tc.name: UIEditTextGetTextHeight_001
264 * @tc.desc: Verify GetTextHeight function.
265 * @tc.type: FUNC
266 * @tc.require: issueI5AD4A
267 */
HWTEST_F(UIEditTextTest, UIEditTextGetTextHeight_001, TestSize.Level1)268 HWTEST_F(UIEditTextTest, UIEditTextGetTextHeight_001, TestSize.Level1)
269 {
270 UIEditText* editText = new UIEditText();
271 const char* text = "abc";
272 editText->SetText(text);
273 uint16_t height = editText->GetTextHeight();
274 EXPECT_EQ(height, 0); // no font file case
275 delete editText;
276 }
277
278 /**
279 * @tc.name: UIEditTextSetOnChangeListener_001
280 * @tc.desc: Verify SetOnChangeListener function.
281 * @tc.type: FUNC
282 * @tc.require: issueI5AD4A
283 */
HWTEST_F(UIEditTextTest, UIEditTextSetOnChangeListener_001, TestSize.Level1)284 HWTEST_F(UIEditTextTest, UIEditTextSetOnChangeListener_001, TestSize.Level1)
285 {
286 UIEditText* editText = new UIEditText();
287 EditTextOnChangeListener* listener = new EditTextOnChangeListener();
288 editText->SetOnChangeListener(listener);
289 EXPECT_EQ(editText->GetOnChangeListener(), listener);
290 delete listener;
291 delete editText;
292 }
293
294 /**
295 * @tc.name: UIEditTextSetOnChangeListener_002
296 * @tc.desc: Verify OnChangeListener OnChange function.
297 * @tc.type: FUNC
298 * @tc.require: issueI5AD4A
299 */
HWTEST_F(UIEditTextTest, UIEditTextSetOnChangeListener_002, TestSize.Level1)300 HWTEST_F(UIEditTextTest, UIEditTextSetOnChangeListener_002, TestSize.Level1)
301 {
302 UIEditText* editText = new UIEditText();
303 EditTextOnChangeListener* listener = new EditTextOnChangeListener();
304 editText->SetOnChangeListener(listener);
305 const char* text = "abc";
306 editText->SetText(text);
307 const char* textTmp = editText->GetText();
308 const char* valueTmp = listener->GetValue();
309 if ((textTmp == nullptr) || (valueTmp == nullptr)) {
310 EXPECT_EQ(1, 0);
311 delete listener;
312 delete editText;
313 return;
314 }
315 bool ret = strcmp(textTmp, valueTmp);
316 EXPECT_EQ(ret, 0);
317 delete listener;
318 delete editText;
319 }
320 } // namespace OHOS
321