forked from enlightenment/efl
parent
70f9cf686f
commit
b43f08436d
|
@ -18,6 +18,8 @@ check_PROGRAMS = evas_suite
|
||||||
evas_suite_SOURCES = \
|
evas_suite_SOURCES = \
|
||||||
evas_suite.c \
|
evas_suite.c \
|
||||||
evas_test_init.c \
|
evas_test_init.c \
|
||||||
|
evas_test_textblock.c \
|
||||||
|
evas_tests_helpers.h \
|
||||||
evas_suite.h
|
evas_suite.h
|
||||||
|
|
||||||
evas_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libevas.la @EINA_LIBS@
|
evas_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libevas.la @EINA_LIBS@
|
||||||
|
|
|
@ -19,6 +19,7 @@ struct _Evas_Test_Case
|
||||||
|
|
||||||
static const Evas_Test_Case etc[] = {
|
static const Evas_Test_Case etc[] = {
|
||||||
{ "Evas", evas_test_init },
|
{ "Evas", evas_test_init },
|
||||||
|
{ "Textblock", evas_test_textblock },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <check.h>
|
#include <check.h>
|
||||||
|
|
||||||
void evas_test_init(TCase *tc);
|
void evas_test_init(TCase *tc);
|
||||||
|
void evas_test_textblock(TCase *tc);
|
||||||
|
|
||||||
|
|
||||||
#endif /* _EVAS_SUITE_H */
|
#endif /* _EVAS_SUITE_H */
|
||||||
|
|
|
@ -0,0 +1,156 @@
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <Eina.h>
|
||||||
|
|
||||||
|
#include "evas_suite.h"
|
||||||
|
#include "Evas.h"
|
||||||
|
|
||||||
|
#include "evas_tests_helpers.h"
|
||||||
|
|
||||||
|
static const char *style_buf =
|
||||||
|
"DEFAULT='font=Sans font_size=10 color=#000 text_class=entry'"
|
||||||
|
"br='\n'"
|
||||||
|
"ps='ps'"
|
||||||
|
"tab='\t'";
|
||||||
|
|
||||||
|
#define START_TB_TEST() \
|
||||||
|
Evas *evas; \
|
||||||
|
Evas_Object *tb; \
|
||||||
|
Evas_Textblock_Style *st; \
|
||||||
|
Evas_Textblock_Cursor *cur; \
|
||||||
|
evas = EVAS_TEST_INIT_EVAS(); \
|
||||||
|
evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
|
||||||
|
tb = evas_object_textblock_add(evas); \
|
||||||
|
fail_if(!tb); \
|
||||||
|
st = evas_textblock_style_new(); \
|
||||||
|
fail_if(!st); \
|
||||||
|
evas_textblock_style_set(st, style_buf); \
|
||||||
|
fail_if(strcmp(style_buf, evas_textblock_style_get(st))); \
|
||||||
|
evas_object_textblock_style_set(tb, st); \
|
||||||
|
cur = evas_object_textblock_cursor_new(tb); \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define END_TB_TEST() \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
evas_textblock_cursor_free(cur); \
|
||||||
|
evas_object_del(tb); \
|
||||||
|
evas_textblock_style_free(st); \
|
||||||
|
evas_free(evas); \
|
||||||
|
evas_shutdown(); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
START_TEST(evas_textblock_simple)
|
||||||
|
{
|
||||||
|
START_TB_TEST();
|
||||||
|
const char *buf = "This is a <br> test.";
|
||||||
|
evas_object_textblock_text_markup_set(tb, buf);
|
||||||
|
fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
|
||||||
|
END_TB_TEST();
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
#define _CHECK_CURSOR_COORDS() \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
Evas_Coord x, y, w, h; \
|
||||||
|
int ret; \
|
||||||
|
ret = evas_textblock_cursor_geometry_get(cur, &x, &y, &w, &h, NULL, \
|
||||||
|
EVAS_TEXTBLOCK_CURSOR_UNDER); \
|
||||||
|
fail_if(ret == -1); \
|
||||||
|
ret = evas_textblock_cursor_char_geometry_get(cur, &x, &y, &w, &h); \
|
||||||
|
fail_if(ret == -1); \
|
||||||
|
ret = evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h); \
|
||||||
|
fail_if(ret == -1); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
START_TEST(evas_textblock_cursor)
|
||||||
|
{
|
||||||
|
START_TB_TEST();
|
||||||
|
size_t i, len;
|
||||||
|
evas_object_textblock_newline_mode_set(tb, EINA_FALSE);
|
||||||
|
const char *buf = "This is a<br> test.<ps>Lets see if this works.<ps>עוד פסקה.";
|
||||||
|
|
||||||
|
/* Walk the textblock using cursor_char_next */
|
||||||
|
evas_object_textblock_text_markup_set(tb, buf);
|
||||||
|
fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
|
||||||
|
len = eina_unicode_utf8_get_len(buf) - 9; /* 9 because len(<br>) == 1 and len(<ps>) == 1 */
|
||||||
|
for (i = 0 ; i < len ; i++)
|
||||||
|
{
|
||||||
|
_CHECK_CURSOR_COORDS();
|
||||||
|
|
||||||
|
fail_if(evas_textblock_cursor_pos_get(cur) != (int) i);
|
||||||
|
|
||||||
|
fail_if(!evas_textblock_cursor_char_next(cur) && (i < len - 1));
|
||||||
|
}
|
||||||
|
fail_if(evas_textblock_cursor_char_next(cur));
|
||||||
|
|
||||||
|
/* Jump to positions all aronud the textblock */
|
||||||
|
evas_textblock_cursor_pos_set(cur, -1);
|
||||||
|
fail_if(evas_textblock_cursor_pos_get(cur) != 0);
|
||||||
|
|
||||||
|
evas_textblock_cursor_pos_set(cur, len + 5);
|
||||||
|
fail_if(evas_textblock_cursor_pos_get(cur) != (int) len);
|
||||||
|
|
||||||
|
for (i = 0 ; i < len ; i++)
|
||||||
|
{
|
||||||
|
evas_textblock_cursor_pos_set(cur, i);
|
||||||
|
|
||||||
|
_CHECK_CURSOR_COORDS();
|
||||||
|
|
||||||
|
fail_if(evas_textblock_cursor_pos_get(cur) != (int) i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: There is a lot more to be done. */
|
||||||
|
END_TB_TEST();
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST(evas_textblock_size)
|
||||||
|
{
|
||||||
|
START_TB_TEST();
|
||||||
|
Evas_Coord w, h, h2, nw, nh;
|
||||||
|
const char *buf = "This is a <br> test.<br>גם בעברית";
|
||||||
|
/* When wrapping is off, native size should be the same as formatted
|
||||||
|
* size */
|
||||||
|
|
||||||
|
evas_object_textblock_size_formatted_get(tb, &w, &h);
|
||||||
|
evas_object_textblock_size_native_get(tb, &nw, &nh);
|
||||||
|
fail_if((w != nw) || (h != nh));
|
||||||
|
fail_if(w != 0);
|
||||||
|
|
||||||
|
evas_object_textblock_text_markup_set(tb, "<br>");
|
||||||
|
evas_object_textblock_size_formatted_get(tb, &w, &h2);
|
||||||
|
evas_object_textblock_size_native_get(tb, &nw, &nh);
|
||||||
|
fail_if((w != nw) || (h2 != nh));
|
||||||
|
|
||||||
|
/* Two lines == double the height */
|
||||||
|
fail_if((w != 0) || (h * 2 != h2));
|
||||||
|
|
||||||
|
evas_object_textblock_text_markup_set(tb, buf);
|
||||||
|
|
||||||
|
evas_object_textblock_size_formatted_get(tb, &w, &h);
|
||||||
|
evas_object_textblock_size_native_get(tb, &nw, &nh);
|
||||||
|
fail_if((w != nw) || (h != nh));
|
||||||
|
fail_if(w <= 0);
|
||||||
|
|
||||||
|
/* FIXME: There is a lot more to be done. */
|
||||||
|
END_TB_TEST();
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
void evas_test_textblock(TCase *tc)
|
||||||
|
{
|
||||||
|
tcase_add_test(tc, evas_textblock_simple);
|
||||||
|
tcase_add_test(tc, evas_textblock_cursor);
|
||||||
|
tcase_add_test(tc, evas_textblock_size);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
#ifndef EVAS_TEST_HELPERS_H
|
||||||
|
#define EVAS_TEST_HELPERS_H
|
||||||
|
|
||||||
|
/* FIXME: Currently depends on the buffer engine, should we do anything
|
||||||
|
* fancier? */
|
||||||
|
|
||||||
|
#define EVAS_TEST_INIT_EVAS() _setup_evas()
|
||||||
|
|
||||||
|
#define EVAS_TEST_FREE_EVAS() \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
evas_textblock_cursor_free(cur); \
|
||||||
|
evas_object_del(tb); \
|
||||||
|
evas_textblock_style_free(st); \
|
||||||
|
evas_free(evas); \
|
||||||
|
evas_shutdown(); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
static Evas *
|
||||||
|
_setup_evas()
|
||||||
|
{
|
||||||
|
Evas *evas;
|
||||||
|
Evas_Engine_Info *einfo;
|
||||||
|
|
||||||
|
evas_init();
|
||||||
|
evas = evas_new();
|
||||||
|
|
||||||
|
evas_output_method_set(evas, evas_render_method_lookup("buffer"));
|
||||||
|
einfo = evas_engine_info_get(evas);
|
||||||
|
evas_engine_info_set(evas, einfo);
|
||||||
|
|
||||||
|
evas_output_size_set(evas, 500, 500);
|
||||||
|
evas_output_viewport_set(evas, 0, 0, 500, 500);
|
||||||
|
|
||||||
|
return evas;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue