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