aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/tests/evas_test_text.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/evas/src/tests/evas_test_text.c493
1 files changed, 493 insertions, 0 deletions
diff --git a/libraries/evas/src/tests/evas_test_text.c b/libraries/evas/src/tests/evas_test_text.c
new file mode 100644
index 0000000..f87ee79
--- /dev/null
+++ b/libraries/evas/src/tests/evas_test_text.c
@@ -0,0 +1,493 @@
1
2#ifdef HAVE_CONFIG_H
3# include "config.h"
4#endif
5
6#include <stdio.h>
7
8#include "evas_suite.h"
9#include "Evas.h"
10#include "evas_tests_helpers.h"
11
12#define START_TEXT_TEST() \
13 Evas *evas; \
14 Evas_Object *to; \
15 evas = EVAS_TEST_INIT_EVAS(); \
16 evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
17 to = evas_object_text_add(evas); \
18do \
19{ \
20} \
21while (0)
22
23#define END_TEXT_TEST() \
24do \
25{ \
26 evas_object_del(to); \
27 evas_free(evas); \
28 evas_shutdown(); \
29} \
30while (0)
31
32START_TEST(evas_text_simple)
33{
34 START_TEXT_TEST();
35 const char *buf = "Test - בדיקה";
36 evas_object_text_text_set(to, buf);
37 fail_if(strcmp(evas_object_text_text_get(to), buf));
38 END_TEXT_TEST();
39}
40END_TEST
41
42/* Various text related geometries */
43START_TEST(evas_text_geometries)
44{
45 START_TEXT_TEST();
46 const char *buf = "Tests";
47 const char *font = "Sans";
48 Evas_Font_Size size = 14;
49 Evas_Coord prev;
50 int i;
51 Evas_Coord x, y, w, h, px;
52
53 evas_object_text_text_set(to, buf);
54
55 /* All should be 0 without a font set */
56 fail_if(evas_object_text_ascent_get(to) != 0);
57 fail_if(evas_object_text_descent_get(to) != 0);
58 fail_if(evas_object_text_max_ascent_get(to) != 0);
59 fail_if(evas_object_text_max_descent_get(to) != 0);
60 fail_if(evas_object_text_horiz_advance_get(to) != 0);
61 fail_if(evas_object_text_vert_advance_get(to) != 0);
62
63 evas_object_text_font_set(to, font, size);
64
65 /* Check that they are bigger than 0. */
66 fail_if(evas_object_text_ascent_get(to) <= 0);
67 fail_if(evas_object_text_descent_get(to) <= 0);
68 fail_if(evas_object_text_max_ascent_get(to) <= 0);
69 fail_if(evas_object_text_max_descent_get(to) <= 0);
70 fail_if(evas_object_text_horiz_advance_get(to) <= 0);
71 fail_if(evas_object_text_vert_advance_get(to) <= 0);
72
73 /* Check that expanding the text does what we expect it */
74 evas_object_text_text_set(to, "Test");
75 prev = evas_object_text_ascent_get(to);
76 evas_object_text_text_set(to, "Testing");
77 fail_if(evas_object_text_ascent_get(to) != prev);
78
79 evas_object_text_text_set(to, "Test");
80 prev = evas_object_text_descent_get(to);
81 evas_object_text_text_set(to, "Testing");
82 fail_if(evas_object_text_descent_get(to) != prev);
83
84 evas_object_text_text_set(to, "Test");
85 prev = evas_object_text_max_ascent_get(to);
86 evas_object_text_text_set(to, "Testing");
87 fail_if(evas_object_text_max_ascent_get(to) != prev);
88
89 evas_object_text_text_set(to, "Test");
90 prev = evas_object_text_max_descent_get(to);
91 evas_object_text_text_set(to, "Testing");
92 fail_if(evas_object_text_max_descent_get(to) != prev);
93
94 evas_object_text_text_set(to, "Test");
95 prev = evas_object_text_horiz_advance_get(to);
96 evas_object_text_text_set(to, "Testing");
97 fail_if(evas_object_text_horiz_advance_get(to) <= prev);
98
99 evas_object_text_text_set(to, "Test");
100 prev = evas_object_text_vert_advance_get(to);
101 evas_object_text_text_set(to, "Testing");
102 fail_if(evas_object_text_vert_advance_get(to) != prev);
103
104 /* Go through all the characters, making sure the geometries we get
105 * are in a monotonically increasing order and that all sizes are
106 * bigger than 0. */
107 evas_object_text_text_set(to, "Testing...");
108 x = 0;
109 px = -100;
110 for (i = 0 ; i < eina_unicode_utf8_get_len("Testing...") ; i++)
111 {
112 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
113 fail_if(x <= px);
114 px = x;
115 /* Get back the coords */
116 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
117 y + (h / 2), &x, &y, &w, &h));
118 }
119
120 /* Last up to pos */
121 Evas_Coord adv;
122 int pos, prev_pos;
123 evas_object_text_text_set(to, "Test - 유니코드");
124 adv = evas_object_text_horiz_advance_get(to);
125 pos = prev_pos = 0;
126 for (x = 0 ; x <= (adv - 1) ; x++)
127 {
128 pos = evas_object_text_last_up_to_pos(to, x, 0);
129 fail_if(pos < prev_pos);
130 prev_pos = pos;
131 }
132 pos = evas_object_text_last_up_to_pos(to, x, 0);
133 fail_if(pos != -1);
134 pos = evas_object_text_last_up_to_pos(to, -50, 0);
135 fail_if(pos != -1);
136
137 END_TEXT_TEST();
138}
139END_TEST
140
141/* Various evas stuff, such as scale */
142START_TEST(evas_text_evas)
143{
144 Evas_Coord w, h, bw, bh;
145 START_TEXT_TEST();
146 const char *buf = "Test - בדיקה";
147 const char *font = "Sans";
148 Evas_Font_Size size = 14;
149
150 evas_object_text_font_set(to, font, size);
151 evas_object_text_text_set(to, buf);
152 evas_object_geometry_get(to, NULL, NULL, &bw, &bh);
153 evas_object_scale_set(to, 3.0);
154 evas_object_geometry_get(to, NULL, NULL, &w, &h);
155 fail_if((w <= bw) || (h <= bh));
156
157 evas_object_scale_set(to, 0.5);
158 evas_object_geometry_get(to, NULL, NULL, &w, &h);
159 fail_if((w >= bw) || (h >= bh));
160
161 END_TEXT_TEST();
162}
163END_TEST
164
165/* Tests for functions that are in evas_object_text.c but
166 * don't really have anything to do with it. */
167START_TEST(evas_text_unrelated)
168{
169 START_TEXT_TEST();
170 const char *buf = "נסיון";
171 int pos;
172 Eina_Unicode value;
173 /* Actually, they are tested in eina, just doing it for completeness. */
174 fail_if(evas_string_char_len_get(buf) != 5);
175
176 pos = 0;
177 fail_if(2 != evas_string_char_next_get(buf, pos, &value));
178 fail_if(value != L'נ');
179
180 pos = 2;
181 fail_if(0 != evas_string_char_prev_get(buf, pos, &value));
182 fail_if(value != L'ס');
183
184 END_TEXT_TEST();
185}
186END_TEST
187
188#define _CHECK_SET_GET(x) \
189do \
190{ \
191 Evas_Coord r, g, b, a; \
192 evas_object_text_##x##_set(to, 100, 150, 125, 12); \
193 evas_object_text_##x##_get(to, &r, &g, &b, &a); \
194 fail_if((r != 100) || (g != 150) || (b != 125) || (a != 12)); \
195 /* Set to the same value */ \
196 evas_object_text_##x##_set(to, 100, 150, 125, 12); \
197 evas_object_text_##x##_get(to, &r, &g, &b, &a); \
198 fail_if((r != 100) || (g != 150) || (b != 125) || (a != 12)); \
199} \
200while (0)
201
202START_TEST(evas_text_set_get)
203{
204 START_TEXT_TEST();
205 const char *buf = "Test - בדיקה";
206 /* Text */
207 evas_object_text_text_set(to, buf);
208 fail_if(strcmp(evas_object_text_text_get(to), buf));
209
210 /* Colors */
211 _CHECK_SET_GET(shadow_color);
212 _CHECK_SET_GET(glow_color);
213 _CHECK_SET_GET(glow2_color);
214 _CHECK_SET_GET(outline_color);
215
216 /* Font and size */
217 const char *font = "Sans";
218 Evas_Font_Size size = 14;
219 evas_object_text_font_set(to, font, size);
220 font = NULL;
221 size = 0;
222 evas_object_text_font_get(to, &font, &size);
223 fail_if(strcmp(font, "Sans"));
224 fail_if(size != 14);
225 evas_object_text_font_set(to, font, size);
226 font = NULL;
227 size = 0;
228 evas_object_text_font_get(to, &font, &size);
229 fail_if(strcmp(font, "Sans"));
230 fail_if(size != 14);
231
232 font = "NON-EXISTING-FONT";
233 size = 14;
234 evas_object_text_font_set(to, font, size);
235 font = NULL;
236 size = 0;
237 evas_object_text_font_get(to, &font, &size);
238 fail_if(strcmp(font, "NON-EXISTING-FONT"));
239
240 font = "Serif";
241 size = 2;
242 evas_object_text_font_set(to, font, size);
243 font = NULL;
244 size = 0;
245 evas_object_text_font_get(to, &font, &size);
246 fail_if(strcmp(font, "Serif"));
247 fail_if(size != 2);
248
249 evas_object_text_font_source_set(to, "/usr/share/fonts/Sans.ttf");
250 font = evas_object_text_font_source_get(to);
251 fail_if(strcmp(font, "/usr/share/fonts/Sans.ttf"));
252 evas_object_text_font_source_set(to, "/usr/share/fonts/Sans.ttf");
253 font = evas_object_text_font_source_get(to);
254 fail_if(strcmp(font, "/usr/share/fonts/Sans.ttf"));
255
256 /* BiDi Delimiters */
257 evas_object_text_bidi_delimiters_set(to, ",.|");
258 fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",.|"));
259 evas_object_text_bidi_delimiters_set(to, ",|");
260 fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",|"));
261 evas_object_text_bidi_delimiters_set(to, NULL);
262 fail_if(evas_object_text_bidi_delimiters_get(to));
263 evas_object_text_bidi_delimiters_set(to, ",|");
264 fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",|"));
265
266 /* Style */
267 evas_object_text_text_set(to, "");
268 evas_object_text_style_set(to, EVAS_TEXT_STYLE_SHADOW);
269 fail_if(evas_object_text_style_get(to) != EVAS_TEXT_STYLE_SHADOW);
270 evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE);
271 fail_if(evas_object_text_style_get(to) != EVAS_TEXT_STYLE_OUTLINE);
272
273 /* Rehinting */
274 evas_object_text_text_set(to, "Bla");
275 evas_font_hinting_set(evas, EVAS_FONT_HINTING_NONE);
276 evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO);
277 evas_font_hinting_set(evas, EVAS_FONT_HINTING_BYTECODE);
278
279 /* Direction of an empty text should be NEUTRAL */
280 evas_object_text_text_set(to, "");
281 fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_NEUTRAL);
282
283 END_TEXT_TEST();
284}
285END_TEST
286
287START_TEST(evas_text_style)
288{
289 Evas_Coord l, r, t, b;
290 START_TEXT_TEST();
291 const char *buf = "Test";
292 evas_object_text_text_set(to, buf);
293 evas_object_text_style_set(to, EVAS_TEXT_STYLE_PLAIN);
294 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
295 fail_if((l != 0) || (r != 0) || (t != 0) || (b != 0));
296
297 evas_object_text_style_set(to, EVAS_TEXT_STYLE_SHADOW);
298 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
299 fail_if((l != 0) || (r != 1) || (t != 0) || (b != 1));
300
301 evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE);
302 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
303 fail_if((l != 1) || (r != 1) || (t != 1) || (b != 1));
304
305 evas_object_text_style_set(to, EVAS_TEXT_STYLE_SOFT_OUTLINE);
306 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
307 fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2));
308
309 evas_object_text_style_set(to, EVAS_TEXT_STYLE_GLOW);
310 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
311 fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2));
312
313 evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE_SHADOW);
314 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
315 fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2));
316
317 evas_object_text_style_set(to, EVAS_TEXT_STYLE_FAR_SHADOW);
318 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
319 fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2));
320
321 evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW);
322 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
323 fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3));
324
325 evas_object_text_style_set(to, EVAS_TEXT_STYLE_SOFT_SHADOW);
326 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
327 fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3));
328
329 evas_object_text_style_set(to, EVAS_TEXT_STYLE_FAR_SOFT_SHADOW);
330 evas_object_text_style_pad_get(to, &l, &r, &t, &b);
331 fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4));
332
333 fail_if(strcmp(evas_object_text_text_get(to), buf));
334 END_TEXT_TEST();
335}
336END_TEST
337
338#ifdef HAVE_FRIBIDI
339START_TEST(evas_text_bidi)
340{
341 START_TEXT_TEST();
342 const char *buf = "Test - בדיקה";
343 int i;
344 Evas_Coord x, y, w, h, px;
345 const char *font = "Sans";
346 Evas_Font_Size size = 14;
347
348 evas_object_text_font_set(to, font, size);
349
350 evas_object_text_text_set(to, buf);
351 fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_LTR);
352 evas_object_text_text_set(to, "בדיקה");
353 fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_RTL);
354
355 /* With RTL text coords should be monotontically decreasing. */
356 evas_object_text_text_set(to, "נסיון...");
357 x = 0;
358 px = 200;
359 for (i = 0 ; i < eina_unicode_utf8_get_len("נסיון...") ; i++)
360 {
361 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
362 fail_if(x >= px);
363 px = x;
364 /* Get back the coords */
365 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
366 y + (h / 2), &x, &y, &w, &h));
367 }
368
369 /* Bidi text is a bit more complex */
370 evas_object_text_text_set(to, "Test - נסיון...");
371 x = 0;
372 px = -100;
373 for (i = 0 ; i < eina_unicode_utf8_get_len("Test - ") ; i++)
374 {
375 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
376 fail_if(x <= px);
377 px = x;
378 /* Get back the coords */
379 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
380 y + (h / 2), &x, &y, &w, &h));
381 }
382
383 /* First rtl char requires more specific handling */
384 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
385 fail_if(x <= px);
386 px = x;
387 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
388 y + (h / 2), &x, &y, &w, &h));
389 i++;
390 for ( ; i < eina_unicode_utf8_get_len("Test - נסיון") ; i++)
391 {
392 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
393 fail_if(x >= px);
394 px = x;
395 /* Get back the coords */
396 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
397 y + (h / 2), &x, &y, &w, &h));
398 }
399 /* First ltr char requires more specific handling */
400 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
401 fail_if(x <= px);
402 px = x;
403 i++;
404 for ( ; i < eina_unicode_utf8_get_len("Test - נסיון...") ; i++)
405 {
406 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
407 fail_if(x <= px);
408 px = x;
409 /* Get back the coords */
410 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
411 y + (h / 2), &x, &y, &w, &h));
412 }
413
414 /* And with an rtl text */
415 evas_object_text_text_set(to, "נסיון - test...");
416 x = 0;
417 px = 100;
418 for (i = 0 ; i < eina_unicode_utf8_get_len("נסיון - ") ; i++)
419 {
420 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
421 fail_if(x >= px);
422 px = x;
423 /* Get back the coords */
424 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
425 y + (h / 2), &x, &y, &w, &h));
426 }
427
428 /* First ltr char requires more specific handling */
429 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
430 fail_if(x >= px);
431 px = x;
432 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
433 y + (h / 2), &x, &y, &w, &h));
434 i++;
435 for ( ; i < eina_unicode_utf8_get_len("נסיון - test") ; i++)
436 {
437 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
438 fail_if(x <= px);
439 px = x;
440 /* Get back the coords */
441 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
442 y + (h / 2), &x, &y, &w, &h));
443 }
444 /* First rtl char requires more specific handling */
445 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
446 fail_if(x >= px);
447 px = x;
448 i++;
449 for ( ; i < eina_unicode_utf8_get_len("נסיון - test...") ; i++)
450 {
451 fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h));
452 fail_if(x >= px);
453 px = x;
454 /* Get back the coords */
455 fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2),
456 y + (h / 2), &x, &y, &w, &h));
457 }
458
459 /* And some last up to pos tests */
460 Evas_Coord adv;
461 int pos, prev_pos;
462 evas_object_text_text_set(to, "Test - נסיון...");
463 adv = evas_object_text_horiz_advance_get(to);
464 pos = prev_pos = 0;
465 for (x = 0 ; x <= (adv - 1) ; x++)
466 {
467 pos = evas_object_text_last_up_to_pos(to, x, 0);
468 fail_if(pos < prev_pos);
469 prev_pos = pos;
470 }
471 pos = evas_object_text_last_up_to_pos(to, x, 0);
472 fail_if(pos != -1);
473 pos = evas_object_text_last_up_to_pos(to, -50, 0);
474 fail_if(pos != -1);
475
476 END_TEXT_TEST();
477}
478END_TEST
479#endif
480
481void evas_test_text(TCase *tc)
482{
483 tcase_add_test(tc, evas_text_simple);
484 tcase_add_test(tc, evas_text_style);
485 tcase_add_test(tc, evas_text_set_get);
486 tcase_add_test(tc, evas_text_geometries);
487 tcase_add_test(tc, evas_text_evas);
488#ifdef HAVE_FRIBIDI
489 tcase_add_test(tc, evas_text_bidi);
490#endif
491
492 tcase_add_test(tc, evas_text_unrelated);
493}