1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../../lvgl_private.h"
4
5 #include "unity/unity.h"
6
7 static lv_obj_t * active_screen = NULL;
8 static lv_obj_t * textarea = NULL;
9
10 static const char * textarea_default_text = "";
11
setUp(void)12 void setUp(void)
13 {
14 active_screen = lv_screen_active();
15 textarea = lv_textarea_create(active_screen);
16 }
17
tearDown(void)18 void tearDown(void)
19 {
20 lv_obj_clean(active_screen);
21 }
22
test_textarea_should_have_valid_documented_default_values(void)23 void test_textarea_should_have_valid_documented_default_values(void)
24 {
25 TEST_ASSERT(lv_textarea_get_cursor_click_pos(textarea));
26 TEST_ASSERT_EQUAL(0U, lv_textarea_get_one_line(textarea));
27 /* No placeholder text should be set on widget creation */
28 TEST_ASSERT_EQUAL_STRING(textarea_default_text, lv_textarea_get_placeholder_text(textarea));
29 TEST_ASSERT_EQUAL_STRING(textarea_default_text, lv_textarea_get_text(textarea));
30 }
31
32 /* When in password mode the lv_textarea_get_text function returns
33 * the actual text, not the bullet characters. */
test_textarea_should_return_actual_text_when_password_mode_is_enabled(void)34 void test_textarea_should_return_actual_text_when_password_mode_is_enabled(void)
35 {
36 const char * text = "Hello LVGL!";
37
38 lv_textarea_add_text(textarea, text);
39 lv_textarea_set_password_mode(textarea, true);
40
41 TEST_ASSERT_TRUE(lv_textarea_get_password_mode(textarea));
42 TEST_ASSERT_EQUAL_STRING(text, lv_textarea_get_text(textarea));
43 }
44
test_textarea_should_update_label_style_with_one_line_enabled(void)45 void test_textarea_should_update_label_style_with_one_line_enabled(void)
46 {
47 lv_textarea_t * txt_ptr = (lv_textarea_t *) textarea;
48
49 lv_textarea_add_text(textarea, "Hi");
50 lv_textarea_set_one_line(textarea, true);
51
52 int32_t left_padding = lv_obj_get_style_pad_left(txt_ptr->label, LV_PART_MAIN);
53 int32_t right_padding = lv_obj_get_style_pad_right(txt_ptr->label, LV_PART_MAIN);
54 int32_t line_width = lv_obj_get_width(txt_ptr->label);
55 int32_t expected_size = left_padding + right_padding + line_width;
56
57 TEST_ASSERT(lv_textarea_get_one_line(textarea));
58 TEST_ASSERT_EQUAL_UINT16(expected_size, lv_obj_get_width(txt_ptr->label));
59 TEST_ASSERT_EQUAL_UINT16(lv_pct(100), lv_obj_get_style_min_width(txt_ptr->label, LV_PART_MAIN));
60 }
61
test_textarea_cursor_click_pos_field_update(void)62 void test_textarea_cursor_click_pos_field_update(void)
63 {
64 lv_textarea_set_cursor_click_pos(textarea, false);
65
66 TEST_ASSERT_FALSE(lv_textarea_get_cursor_click_pos(textarea));
67 }
68
test_textarea_should_update_placeholder_text(void)69 void test_textarea_should_update_placeholder_text(void)
70 {
71 const char * new_placeholder = "LVGL Rocks!!!!!";
72 const char * text = "Hello LVGL!";
73
74 /* Allocating memory for placeholder text */
75 lv_textarea_set_placeholder_text(textarea, text);
76 TEST_ASSERT_EQUAL_STRING(text, lv_textarea_get_placeholder_text(textarea));
77
78 /* Reallocating memory for the new placeholder text */
79 lv_textarea_set_placeholder_text(textarea, new_placeholder);
80 TEST_ASSERT_EQUAL_STRING(new_placeholder, lv_textarea_get_placeholder_text(textarea));
81
82 /* Freeing allocated memory for placeholder text */
83 lv_textarea_set_placeholder_text(textarea, "");
84 TEST_ASSERT_EQUAL_STRING("", lv_textarea_get_placeholder_text(textarea));
85 }
86
test_textarea_should_keep_only_accepted_chars(void)87 void test_textarea_should_keep_only_accepted_chars(void)
88 {
89 const char * accepted_list = "abcd";
90
91 lv_textarea_set_accepted_chars(textarea, accepted_list);
92 lv_textarea_set_text(textarea, "abcde");
93
94 TEST_ASSERT_EQUAL_STRING(accepted_list, lv_textarea_get_text(textarea));
95 }
96
test_textarea_in_one_line_mode_should_ignore_line_break_characters(void)97 void test_textarea_in_one_line_mode_should_ignore_line_break_characters(void)
98 {
99 lv_textarea_set_one_line(textarea, true);
100
101 lv_textarea_add_char(textarea, '\n');
102 TEST_ASSERT_EQUAL_STRING(textarea_default_text, lv_textarea_get_text(textarea));
103
104 lv_textarea_add_char(textarea, '\r');
105 TEST_ASSERT_EQUAL_STRING(textarea_default_text, lv_textarea_get_text(textarea));
106 }
107
test_textarea_should_hide_password_characters(void)108 void test_textarea_should_hide_password_characters(void)
109 {
110 lv_textarea_set_password_mode(textarea, true);
111 lv_textarea_set_text(textarea, "12345");
112
113 /* setting bullet hides characters */
114 lv_textarea_set_password_bullet(textarea, "O");
115 TEST_ASSERT_EQUAL_STRING("OOOOO", lv_label_get_text(lv_textarea_get_label(textarea)));
116
117 /* setting text hides characters */
118 lv_textarea_set_text(textarea, "A");
119 TEST_ASSERT_EQUAL_STRING("O", lv_label_get_text(lv_textarea_get_label(textarea)));
120
121 lv_textarea_add_char(textarea, 'B');
122 TEST_ASSERT_EQUAL_STRING("OB", lv_label_get_text(lv_textarea_get_label(textarea)));
123
124 /* setting show time hides characters */
125 /* current behavior is to hide the characters upon setting the show time regardless of the value */
126 lv_textarea_set_password_show_time(textarea, lv_textarea_get_password_show_time(textarea));
127 TEST_ASSERT_EQUAL_STRING("OO", lv_label_get_text(lv_textarea_get_label(textarea)));
128
129 lv_textarea_set_password_mode(textarea, false);
130 TEST_ASSERT_EQUAL_STRING("AB", lv_label_get_text(lv_textarea_get_label(textarea)));
131
132 /* enabling password mode hides characters */
133 lv_textarea_set_password_mode(textarea, true);
134 TEST_ASSERT_EQUAL_STRING("OO", lv_label_get_text(lv_textarea_get_label(textarea)));
135 }
136
test_textarea_properties(void)137 void test_textarea_properties(void)
138 {
139 #if LV_USE_OBJ_PROPERTY
140 lv_property_t prop = { };
141 lv_obj_t * obj = lv_textarea_create(lv_screen_active());
142
143 prop.id = LV_PROPERTY_TEXTAREA_TEXT;
144 prop.ptr = "Hello World!";
145 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
146 TEST_ASSERT_EQUAL_STRING("Hello World!", lv_textarea_get_text(obj));
147 TEST_ASSERT_EQUAL_STRING("Hello World!", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_TEXT).ptr);
148
149 prop.id = LV_PROPERTY_TEXTAREA_PLACEHOLDER_TEXT;
150 prop.ptr = "Hello!";
151 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
152 TEST_ASSERT_EQUAL_STRING("Hello!", lv_textarea_get_placeholder_text(obj));
153 TEST_ASSERT_EQUAL_STRING("Hello!", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PLACEHOLDER_TEXT).ptr);
154
155 prop.id = LV_PROPERTY_TEXTAREA_CURSOR_POS;
156 prop.num = 5;
157 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
158 TEST_ASSERT_EQUAL_INT(5, lv_textarea_get_cursor_pos(obj));
159 TEST_ASSERT_EQUAL_INT(5, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_CURSOR_POS).num);
160
161 prop.id = LV_PROPERTY_TEXTAREA_CURSOR_CLICK_POS;
162 prop.num = 1;
163 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
164 TEST_ASSERT_EQUAL_INT(1, lv_textarea_get_cursor_click_pos(obj));
165 TEST_ASSERT_EQUAL_INT(1, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_CURSOR_CLICK_POS).num);
166
167 prop.id = LV_PROPERTY_TEXTAREA_PASSWORD_MODE;
168 prop.num = true;
169 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
170 TEST_ASSERT_TRUE(lv_textarea_get_password_mode(obj));
171 TEST_ASSERT_TRUE(lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PASSWORD_MODE).num);
172
173 prop.id = LV_PROPERTY_TEXTAREA_PASSWORD_BULLET;
174 prop.ptr = "password bullet";
175 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
176 TEST_ASSERT_EQUAL_STRING("password bullet", lv_textarea_get_password_bullet(obj));
177 TEST_ASSERT_EQUAL_STRING("password bullet", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PASSWORD_BULLET).ptr);
178
179 prop.id = LV_PROPERTY_TEXTAREA_ONE_LINE;
180 prop.enable = true;
181 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
182 TEST_ASSERT_EQUAL_INT(true, lv_textarea_get_one_line(obj));
183 TEST_ASSERT_EQUAL_INT(true, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_ONE_LINE).enable);
184
185 prop.id = LV_PROPERTY_TEXTAREA_ACCEPTED_CHARS;
186 prop.ptr = "ABCDEF";
187 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
188 TEST_ASSERT_EQUAL_STRING("ABCDEF", lv_textarea_get_accepted_chars(obj));
189 TEST_ASSERT_EQUAL_STRING("ABCDEF", lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_ACCEPTED_CHARS).ptr);
190
191 prop.id = LV_PROPERTY_TEXTAREA_MAX_LENGTH;
192 prop.num = 10;
193 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
194 TEST_ASSERT_EQUAL_INT(10, lv_textarea_get_max_length(obj));
195 TEST_ASSERT_EQUAL_INT(10, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_MAX_LENGTH).num);
196
197 prop.id = LV_PROPERTY_TEXTAREA_INSERT_REPLACE;
198 prop.ptr = "abcdef";
199 /*No getter function for this property*/
200 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
201
202 prop.id = LV_PROPERTY_TEXTAREA_TEXT_SELECTION;
203 prop.num = true;
204 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
205 TEST_ASSERT_EQUAL_INT(true, lv_textarea_get_text_selection(obj));
206 TEST_ASSERT_EQUAL_INT(true, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_TEXT_SELECTION).enable);
207
208 prop.id = LV_PROPERTY_TEXTAREA_PASSWORD_SHOW_TIME;
209 prop.num = 10;
210 TEST_ASSERT_TRUE(lv_obj_set_property(obj, &prop) == LV_RES_OK);
211 TEST_ASSERT_EQUAL_INT(10, lv_textarea_get_password_show_time(obj));
212 TEST_ASSERT_EQUAL_INT(10, lv_obj_get_property(obj, LV_PROPERTY_TEXTAREA_PASSWORD_SHOW_TIME).num);
213 #endif
214 }
215
216 #endif
217