aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/tests
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-01-04 18:41:13 +1000
committerDavid Walter Seikel2012-01-04 18:41:13 +1000
commitdd7595a3475407a7fa96a97393bae8c5220e8762 (patch)
treee341e911d7eb911a51684a7412ef7f7c7605d28e /libraries/evas/src/tests
parentAdd the skeleton. (diff)
downloadSledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.zip
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.gz
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.bz2
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.xz
Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje.
Note that embryo wont be used, but I'm not sure yet if you can build edje without it.
Diffstat (limited to '')
-rw-r--r--libraries/evas/src/tests/Makefile.am29
-rw-r--r--libraries/evas/src/tests/Makefile.in693
-rw-r--r--libraries/evas/src/tests/evas_suite.c104
-rw-r--r--libraries/evas/src/tests/evas_suite.h12
-rw-r--r--libraries/evas/src/tests/evas_test_callbacks.c135
-rw-r--r--libraries/evas/src/tests/evas_test_init.c21
-rw-r--r--libraries/evas/src/tests/evas_test_text.c493
-rw-r--r--libraries/evas/src/tests/evas_test_textblock.c1973
-rw-r--r--libraries/evas/src/tests/evas_tests_helpers.h40
9 files changed, 3500 insertions, 0 deletions
diff --git a/libraries/evas/src/tests/Makefile.am b/libraries/evas/src/tests/Makefile.am
new file mode 100644
index 0000000..c659106
--- /dev/null
+++ b/libraries/evas/src/tests/Makefile.am
@@ -0,0 +1,29 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I$(top_srcdir)/src/lib \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_builddir)/src/lib \
8-DPACKAGE_BIN_DIR=\"$(bindir)\" \
9-DPACKAGE_LIB_DIR=\"$(libdir)\" \
10-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
11@EINA_CFLAGS@ \
12@CHECK_CFLAGS@
13
14if EFL_ENABLE_TESTS
15
16check_PROGRAMS = evas_suite
17
18evas_suite_SOURCES = \
19evas_suite.c \
20evas_test_init.c \
21evas_test_textblock.c \
22evas_test_text.c \
23evas_test_callbacks.c \
24evas_tests_helpers.h \
25evas_suite.h
26
27evas_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libevas.la @EINA_LIBS@
28
29endif
diff --git a/libraries/evas/src/tests/Makefile.in b/libraries/evas/src/tests/Makefile.in
new file mode 100644
index 0000000..c598c3d
--- /dev/null
+++ b/libraries/evas/src/tests/Makefile.in
@@ -0,0 +1,693 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17VPATH = @srcdir@
18pkgdatadir = $(datadir)/@PACKAGE@
19pkgincludedir = $(includedir)/@PACKAGE@
20pkglibdir = $(libdir)/@PACKAGE@
21pkglibexecdir = $(libexecdir)/@PACKAGE@
22am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
23install_sh_DATA = $(install_sh) -c -m 644
24install_sh_PROGRAM = $(install_sh) -c
25install_sh_SCRIPT = $(install_sh) -c
26INSTALL_HEADER = $(INSTALL_DATA)
27transform = $(program_transform_name)
28NORMAL_INSTALL = :
29PRE_INSTALL = :
30POST_INSTALL = :
31NORMAL_UNINSTALL = :
32PRE_UNINSTALL = :
33POST_UNINSTALL = :
34build_triplet = @build@
35host_triplet = @host@
36@EFL_ENABLE_TESTS_TRUE@check_PROGRAMS = evas_suite$(EXEEXT)
37subdir = src/tests
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_coverage.m4 \
42 $(top_srcdir)/m4/efl_doxygen.m4 \
43 $(top_srcdir)/m4/efl_fnmatch.m4 \
44 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
45 $(top_srcdir)/m4/evas_check_engine.m4 \
46 $(top_srcdir)/m4/evas_check_loader.m4 \
47 $(top_srcdir)/m4/evas_converter.m4 \
48 $(top_srcdir)/m4/evas_dither.m4 \
49 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59am__evas_suite_SOURCES_DIST = evas_suite.c evas_test_init.c \
60 evas_test_textblock.c evas_test_text.c evas_test_callbacks.c \
61 evas_tests_helpers.h evas_suite.h
62@EFL_ENABLE_TESTS_TRUE@am_evas_suite_OBJECTS = evas_suite.$(OBJEXT) \
63@EFL_ENABLE_TESTS_TRUE@ evas_test_init.$(OBJEXT) \
64@EFL_ENABLE_TESTS_TRUE@ evas_test_textblock.$(OBJEXT) \
65@EFL_ENABLE_TESTS_TRUE@ evas_test_text.$(OBJEXT) \
66@EFL_ENABLE_TESTS_TRUE@ evas_test_callbacks.$(OBJEXT)
67evas_suite_OBJECTS = $(am_evas_suite_OBJECTS)
68@EFL_ENABLE_TESTS_TRUE@evas_suite_DEPENDENCIES = \
69@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libevas.la
70AM_V_lt = $(am__v_lt_$(V))
71am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
72am__v_lt_0 = --silent
73DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
74depcomp = $(SHELL) $(top_srcdir)/depcomp
75am__depfiles_maybe = depfiles
76am__mv = mv -f
77COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
78 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
79LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
80 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
81 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
82 $(AM_CFLAGS) $(CFLAGS)
83AM_V_CC = $(am__v_CC_$(V))
84am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
85am__v_CC_0 = @echo " CC " $@;
86AM_V_at = $(am__v_at_$(V))
87am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
88am__v_at_0 = @
89CCLD = $(CC)
90LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
91 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
92 $(AM_LDFLAGS) $(LDFLAGS) -o $@
93AM_V_CCLD = $(am__v_CCLD_$(V))
94am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
95am__v_CCLD_0 = @echo " CCLD " $@;
96AM_V_GEN = $(am__v_GEN_$(V))
97am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
98am__v_GEN_0 = @echo " GEN " $@;
99SOURCES = $(evas_suite_SOURCES)
100DIST_SOURCES = $(am__evas_suite_SOURCES_DIST)
101ETAGS = etags
102CTAGS = ctags
103DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
104ACLOCAL = @ACLOCAL@
105ALLOCA = @ALLOCA@
106AMTAR = @AMTAR@
107AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
108AR = @AR@
109AS = @AS@
110AUTOCONF = @AUTOCONF@
111AUTOHEADER = @AUTOHEADER@
112AUTOMAKE = @AUTOMAKE@
113AWK = @AWK@
114CC = @CC@
115CCDEPMODE = @CCDEPMODE@
116CFLAGS = @CFLAGS@
117CHECK_CFLAGS = @CHECK_CFLAGS@
118CHECK_LIBS = @CHECK_LIBS@
119CPP = @CPP@
120CPPFLAGS = @CPPFLAGS@
121CXX = @CXX@
122CXXCPP = @CXXCPP@
123CXXDEPMODE = @CXXDEPMODE@
124CXXFLAGS = @CXXFLAGS@
125CYGPATH_W = @CYGPATH_W@
126DEFS = @DEFS@
127DEPDIR = @DEPDIR@
128DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
129DIRECTFB_LIBS = @DIRECTFB_LIBS@
130DLLTOOL = @DLLTOOL@
131DSYMUTIL = @DSYMUTIL@
132DUMPBIN = @DUMPBIN@
133ECHO_C = @ECHO_C@
134ECHO_N = @ECHO_N@
135ECHO_T = @ECHO_T@
136ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
137ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
138EDB_CFLAGS = @EDB_CFLAGS@
139EDB_LIBS = @EDB_LIBS@
140EDJE_CFLAGS = @EDJE_CFLAGS@
141EDJE_LIBS = @EDJE_LIBS@
142EET_CFLAGS = @EET_CFLAGS@
143EET_LIBS = @EET_LIBS@
144EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
145EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
146EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
147EGREP = @EGREP@
148EINA_CFLAGS = @EINA_CFLAGS@
149EINA_LIBS = @EINA_LIBS@
150EVAS_CFLAGS = @EVAS_CFLAGS@
151EVAS_LIBS = @EVAS_LIBS@
152EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
153EVIL_CFLAGS = @EVIL_CFLAGS@
154EVIL_LIBS = @EVIL_LIBS@
155EXEEXT = @EXEEXT@
156FGREP = @FGREP@
157FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
158FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
159FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
160FREETYPE_LIBS = @FREETYPE_LIBS@
161FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
162FRIBIDI_LIBS = @FRIBIDI_LIBS@
163GL_EET_CFLAGS = @GL_EET_CFLAGS@
164GL_EET_LIBS = @GL_EET_LIBS@
165GREP = @GREP@
166HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
167HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
168INSTALL = @INSTALL@
169INSTALL_DATA = @INSTALL_DATA@
170INSTALL_PROGRAM = @INSTALL_PROGRAM@
171INSTALL_SCRIPT = @INSTALL_SCRIPT@
172INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
173LD = @LD@
174LDFLAGS = @LDFLAGS@
175LIBOBJS = @LIBOBJS@
176LIBS = @LIBS@
177LIBTOOL = @LIBTOOL@
178LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
179LINEBREAK_LIBS = @LINEBREAK_LIBS@
180LIPO = @LIPO@
181LN_S = @LN_S@
182LTLIBOBJS = @LTLIBOBJS@
183MAKEINFO = @MAKEINFO@
184MKDIR_P = @MKDIR_P@
185MODULE_ARCH = @MODULE_ARCH@
186NM = @NM@
187NMEDIT = @NMEDIT@
188OBJC = @OBJC@
189OBJCDEPMODE = @OBJCDEPMODE@
190OBJCFLAGS = @OBJCFLAGS@
191OBJDUMP = @OBJDUMP@
192OBJEXT = @OBJEXT@
193OTOOL = @OTOOL@
194OTOOL64 = @OTOOL64@
195PACKAGE = @PACKAGE@
196PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
197PACKAGE_NAME = @PACKAGE_NAME@
198PACKAGE_STRING = @PACKAGE_STRING@
199PACKAGE_TARNAME = @PACKAGE_TARNAME@
200PACKAGE_URL = @PACKAGE_URL@
201PACKAGE_VERSION = @PACKAGE_VERSION@
202PATH_SEPARATOR = @PATH_SEPARATOR@
203PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
204PIXMAN_LIBS = @PIXMAN_LIBS@
205PKG_CONFIG = @PKG_CONFIG@
206PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
207PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
208PNG_CFLAGS = @PNG_CFLAGS@
209PNG_LIBS = @PNG_LIBS@
210RANLIB = @RANLIB@
211SDL_CFLAGS = @SDL_CFLAGS@
212SDL_LIBS = @SDL_LIBS@
213SED = @SED@
214SET_MAKE = @SET_MAKE@
215SHELL = @SHELL@
216SHM_OPEN_LINK = @SHM_OPEN_LINK@
217STRIP = @STRIP@
218SVG_CFLAGS = @SVG_CFLAGS@
219SVG_LIBS = @SVG_LIBS@
220VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
221VALGRIND_LIBS = @VALGRIND_LIBS@
222VERSION = @VERSION@
223VMAJ = @VMAJ@
224WIN32_CFLAGS = @WIN32_CFLAGS@
225WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
226XCB_CFLAGS = @XCB_CFLAGS@
227XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
228XCB_GL_LIBS = @XCB_GL_LIBS@
229XCB_LIBS = @XCB_LIBS@
230XEXT_CFLAGS = @XEXT_CFLAGS@
231XEXT_LIBS = @XEXT_LIBS@
232XMKMF = @XMKMF@
233X_CFLAGS = @X_CFLAGS@
234X_EXTRA_LIBS = @X_EXTRA_LIBS@
235X_LIBS = @X_LIBS@
236X_PRE_LIBS = @X_PRE_LIBS@
237abs_builddir = @abs_builddir@
238abs_srcdir = @abs_srcdir@
239abs_top_builddir = @abs_top_builddir@
240abs_top_srcdir = @abs_top_srcdir@
241ac_ct_CC = @ac_ct_CC@
242ac_ct_CXX = @ac_ct_CXX@
243ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
244ac_ct_OBJC = @ac_ct_OBJC@
245altivec_cflags = @altivec_cflags@
246am__include = @am__include@
247am__leading_dot = @am__leading_dot@
248am__quote = @am__quote@
249am__tar = @am__tar@
250am__untar = @am__untar@
251bindir = @bindir@
252build = @build@
253build_alias = @build_alias@
254build_cpu = @build_cpu@
255build_os = @build_os@
256build_vendor = @build_vendor@
257builddir = @builddir@
258datadir = @datadir@
259datarootdir = @datarootdir@
260dlopen_libs = @dlopen_libs@
261docdir = @docdir@
262dvidir = @dvidir@
263edje_cc = @edje_cc@
264efl_doxygen = @efl_doxygen@
265efl_have_doxygen = @efl_have_doxygen@
266evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
267evas_engine_buffer_libs = @evas_engine_buffer_libs@
268evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
269evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
270evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
271evas_engine_directfb_libs = @evas_engine_directfb_libs@
272evas_engine_fb_cflags = @evas_engine_fb_cflags@
273evas_engine_fb_libs = @evas_engine_fb_libs@
274evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
275evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
276evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
277evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
278evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
279evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
280evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
281evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
282evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
283evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
284evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
285evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
286evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
287evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
288evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
289evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
290evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
291evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
292evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
293evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
294evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
295evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
296evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
297evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
298evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
299evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
300evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
301evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
302evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
303evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
304evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
305evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
306evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
307evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
308evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
309evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
310evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
311evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
312evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
313evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
314evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
315evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
316evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
317evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
318evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
319evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
320evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
321evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
322evas_image_loader_png_libs = @evas_image_loader_png_libs@
323evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
324evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
325evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
326evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
327evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
328evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
329evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
330evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
331evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
332evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
333evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
334evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
335exec_prefix = @exec_prefix@
336have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
337have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
338have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
339have_evas_engine_software_x11 = @have_evas_engine_software_x11@
340have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
341have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
342have_lcov = @have_lcov@
343host = @host@
344host_alias = @host_alias@
345host_cpu = @host_cpu@
346host_os = @host_os@
347host_vendor = @host_vendor@
348htmldir = @htmldir@
349includedir = @includedir@
350infodir = @infodir@
351install_sh = @install_sh@
352libdir = @libdir@
353libexecdir = @libexecdir@
354localedir = @localedir@
355localstatedir = @localstatedir@
356lt_ECHO = @lt_ECHO@
357lt_enable_auto_import = @lt_enable_auto_import@
358mandir = @mandir@
359mkdir_p = @mkdir_p@
360oldincludedir = @oldincludedir@
361pdfdir = @pdfdir@
362pkgconfig_requires_private = @pkgconfig_requires_private@
363prefix = @prefix@
364program_transform_name = @program_transform_name@
365psdir = @psdir@
366pthread_cflags = @pthread_cflags@
367pthread_libs = @pthread_libs@
368release_info = @release_info@
369requirement_evas = @requirement_evas@
370sbindir = @sbindir@
371sharedstatedir = @sharedstatedir@
372srcdir = @srcdir@
373sysconfdir = @sysconfdir@
374target_alias = @target_alias@
375top_build_prefix = @top_build_prefix@
376top_builddir = @top_builddir@
377top_srcdir = @top_srcdir@
378version_info = @version_info@
379MAINTAINERCLEANFILES = Makefile.in
380AM_CPPFLAGS = \
381-I$(top_srcdir)/src/lib \
382-I$(top_srcdir)/src/include \
383-I$(top_builddir)/src/include \
384-I$(top_builddir)/src/lib \
385-DPACKAGE_BIN_DIR=\"$(bindir)\" \
386-DPACKAGE_LIB_DIR=\"$(libdir)\" \
387-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
388@EINA_CFLAGS@ \
389@CHECK_CFLAGS@
390
391@EFL_ENABLE_TESTS_TRUE@evas_suite_SOURCES = \
392@EFL_ENABLE_TESTS_TRUE@evas_suite.c \
393@EFL_ENABLE_TESTS_TRUE@evas_test_init.c \
394@EFL_ENABLE_TESTS_TRUE@evas_test_textblock.c \
395@EFL_ENABLE_TESTS_TRUE@evas_test_text.c \
396@EFL_ENABLE_TESTS_TRUE@evas_test_callbacks.c \
397@EFL_ENABLE_TESTS_TRUE@evas_tests_helpers.h \
398@EFL_ENABLE_TESTS_TRUE@evas_suite.h
399
400@EFL_ENABLE_TESTS_TRUE@evas_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libevas.la @EINA_LIBS@
401all: all-am
402
403.SUFFIXES:
404.SUFFIXES: .c .lo .o .obj
405$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
406 @for dep in $?; do \
407 case '$(am__configure_deps)' in \
408 *$$dep*) \
409 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
410 && { if test -f $@; then exit 0; else break; fi; }; \
411 exit 1;; \
412 esac; \
413 done; \
414 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/Makefile'; \
415 $(am__cd) $(top_srcdir) && \
416 $(AUTOMAKE) --gnu src/tests/Makefile
417.PRECIOUS: Makefile
418Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
419 @case '$?' in \
420 *config.status*) \
421 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
422 *) \
423 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
424 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
425 esac;
426
427$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
428 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
429
430$(top_srcdir)/configure: $(am__configure_deps)
431 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
432$(ACLOCAL_M4): $(am__aclocal_m4_deps)
433 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
434$(am__aclocal_m4_deps):
435
436clean-checkPROGRAMS:
437 @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
438 echo " rm -f" $$list; \
439 rm -f $$list || exit $$?; \
440 test -n "$(EXEEXT)" || exit 0; \
441 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
442 echo " rm -f" $$list; \
443 rm -f $$list
444evas_suite$(EXEEXT): $(evas_suite_OBJECTS) $(evas_suite_DEPENDENCIES)
445 @rm -f evas_suite$(EXEEXT)
446 $(AM_V_CCLD)$(LINK) $(evas_suite_OBJECTS) $(evas_suite_LDADD) $(LIBS)
447
448mostlyclean-compile:
449 -rm -f *.$(OBJEXT)
450
451distclean-compile:
452 -rm -f *.tab.c
453
454@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_suite.Po@am__quote@
455@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_callbacks.Po@am__quote@
456@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_init.Po@am__quote@
457@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_text.Po@am__quote@
458@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_textblock.Po@am__quote@
459
460.c.o:
461@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
462@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
463@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
464@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
465@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
466@am__fastdepCC_FALSE@ $(COMPILE) -c $<
467
468.c.obj:
469@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
470@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
471@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
472@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
473@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
474@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
475
476.c.lo:
477@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
478@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
479@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
480@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
481@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
482@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
483
484mostlyclean-libtool:
485 -rm -f *.lo
486
487clean-libtool:
488 -rm -rf .libs _libs
489
490ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
491 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
492 unique=`for i in $$list; do \
493 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
494 done | \
495 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
496 END { if (nonempty) { for (i in files) print i; }; }'`; \
497 mkid -fID $$unique
498tags: TAGS
499
500TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
501 $(TAGS_FILES) $(LISP)
502 set x; \
503 here=`pwd`; \
504 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
505 unique=`for i in $$list; do \
506 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
507 done | \
508 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
509 END { if (nonempty) { for (i in files) print i; }; }'`; \
510 shift; \
511 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
512 test -n "$$unique" || unique=$$empty_fix; \
513 if test $$# -gt 0; then \
514 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
515 "$$@" $$unique; \
516 else \
517 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
518 $$unique; \
519 fi; \
520 fi
521ctags: CTAGS
522CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
523 $(TAGS_FILES) $(LISP)
524 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
525 unique=`for i in $$list; do \
526 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
527 done | \
528 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
529 END { if (nonempty) { for (i in files) print i; }; }'`; \
530 test -z "$(CTAGS_ARGS)$$unique" \
531 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
532 $$unique
533
534GTAGS:
535 here=`$(am__cd) $(top_builddir) && pwd` \
536 && $(am__cd) $(top_srcdir) \
537 && gtags -i $(GTAGS_ARGS) "$$here"
538
539distclean-tags:
540 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
541
542distdir: $(DISTFILES)
543 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
544 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
545 list='$(DISTFILES)'; \
546 dist_files=`for file in $$list; do echo $$file; done | \
547 sed -e "s|^$$srcdirstrip/||;t" \
548 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
549 case $$dist_files in \
550 */*) $(MKDIR_P) `echo "$$dist_files" | \
551 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
552 sort -u` ;; \
553 esac; \
554 for file in $$dist_files; do \
555 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
556 if test -d $$d/$$file; then \
557 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
558 if test -d "$(distdir)/$$file"; then \
559 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
560 fi; \
561 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
562 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
563 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
564 fi; \
565 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
566 else \
567 test -f "$(distdir)/$$file" \
568 || cp -p $$d/$$file "$(distdir)/$$file" \
569 || exit 1; \
570 fi; \
571 done
572check-am: all-am
573 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
574check: check-am
575all-am: Makefile
576installdirs:
577install: install-am
578install-exec: install-exec-am
579install-data: install-data-am
580uninstall: uninstall-am
581
582install-am: all-am
583 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
584
585installcheck: installcheck-am
586install-strip:
587 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
588 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
589 `test -z '$(STRIP)' || \
590 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
591mostlyclean-generic:
592
593clean-generic:
594
595distclean-generic:
596 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
597 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
598
599maintainer-clean-generic:
600 @echo "This command is intended for maintainers to use"
601 @echo "it deletes files that may require special tools to rebuild."
602 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
603clean: clean-am
604
605clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
606 mostlyclean-am
607
608distclean: distclean-am
609 -rm -rf ./$(DEPDIR)
610 -rm -f Makefile
611distclean-am: clean-am distclean-compile distclean-generic \
612 distclean-tags
613
614dvi: dvi-am
615
616dvi-am:
617
618html: html-am
619
620html-am:
621
622info: info-am
623
624info-am:
625
626install-data-am:
627
628install-dvi: install-dvi-am
629
630install-dvi-am:
631
632install-exec-am:
633
634install-html: install-html-am
635
636install-html-am:
637
638install-info: install-info-am
639
640install-info-am:
641
642install-man:
643
644install-pdf: install-pdf-am
645
646install-pdf-am:
647
648install-ps: install-ps-am
649
650install-ps-am:
651
652installcheck-am:
653
654maintainer-clean: maintainer-clean-am
655 -rm -rf ./$(DEPDIR)
656 -rm -f Makefile
657maintainer-clean-am: distclean-am maintainer-clean-generic
658
659mostlyclean: mostlyclean-am
660
661mostlyclean-am: mostlyclean-compile mostlyclean-generic \
662 mostlyclean-libtool
663
664pdf: pdf-am
665
666pdf-am:
667
668ps: ps-am
669
670ps-am:
671
672uninstall-am:
673
674.MAKE: check-am install-am install-strip
675
676.PHONY: CTAGS GTAGS all all-am check check-am clean \
677 clean-checkPROGRAMS clean-generic clean-libtool ctags \
678 distclean distclean-compile distclean-generic \
679 distclean-libtool distclean-tags distdir dvi dvi-am html \
680 html-am info info-am install install-am install-data \
681 install-data-am install-dvi install-dvi-am install-exec \
682 install-exec-am install-html install-html-am install-info \
683 install-info-am install-man install-pdf install-pdf-am \
684 install-ps install-ps-am install-strip installcheck \
685 installcheck-am installdirs maintainer-clean \
686 maintainer-clean-generic mostlyclean mostlyclean-compile \
687 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
688 tags uninstall uninstall-am
689
690
691# Tell versions [3.59,3.63) of GNU make to not export all variables.
692# Otherwise a system limit (for SysV at least) may be exceeded.
693.NOEXPORT:
diff --git a/libraries/evas/src/tests/evas_suite.c b/libraries/evas/src/tests/evas_suite.c
new file mode 100644
index 0000000..55f4123
--- /dev/null
+++ b/libraries/evas/src/tests/evas_suite.c
@@ -0,0 +1,104 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
6#include <stdio.h>
7
8#include <Evas.h>
9
10#include "evas_suite.h"
11
12typedef struct _Evas_Test_Case Evas_Test_Case;
13
14struct _Evas_Test_Case
15{
16 const char *test_case;
17 void (*build)(TCase *tc);
18};
19
20static const Evas_Test_Case etc[] = {
21 { "Evas", evas_test_init },
22 { "Object Textblock", evas_test_textblock },
23 { "Object Text", evas_test_text },
24 { "Callbacks", evas_test_callbacks },
25 { NULL, NULL }
26};
27
28static void
29_list_tests(void)
30{
31 const Evas_Test_Case *itr;
32
33 itr = etc;
34 fputs("Available Test Cases:\n", stderr);
35 for (; itr->test_case; itr++)
36 fprintf(stderr, "\t%s\n", itr->test_case);
37}
38static Eina_Bool
39_use_test(int argc, const char **argv, const char *test_case)
40{
41 if (argc < 1)
42 return 1;
43
44 for (; argc > 0; argc--, argv++)
45 if (strcmp(test_case, *argv) == 0)
46 return 1;
47 return 0;
48}
49
50static Suite *
51evas_suite_build(int argc, const char **argv)
52{
53 TCase *tc;
54 Suite *s;
55 int i;
56
57 s = suite_create("Evas");
58
59 for (i = 0; etc[i].test_case; ++i)
60 {
61 if (!_use_test(argc, argv, etc[i].test_case)) continue;
62 tc = tcase_create(etc[i].test_case);
63
64 etc[i].build(tc);
65
66 suite_add_tcase(s, tc);
67 tcase_set_timeout(tc, 0);
68 }
69
70 return s;
71}
72
73int
74main(int argc, char **argv)
75{
76 Suite *s;
77 SRunner *sr;
78 int i, failed_count;
79
80 for (i = 1; i < argc; i++)
81 if ((strcmp(argv[i], "-h") == 0) ||
82 (strcmp(argv[i], "--help") == 0))
83 {
84 fprintf(stderr, "Usage:\n\t%s [test_case1 .. [test_caseN]]\n",
85 argv[0]);
86 _list_tests();
87 return 0;
88 }
89 else if ((strcmp(argv[i], "-l") == 0) ||
90 (strcmp(argv[i], "--list") == 0))
91 {
92 _list_tests();
93 return 0;
94 }
95
96 s = evas_suite_build(argc - 1, (const char **)argv + 1);
97 sr = srunner_create(s);
98
99 srunner_run_all(sr, CK_ENV);
100 failed_count = srunner_ntests_failed(sr);
101 srunner_free(sr);
102
103 return (failed_count == 0) ? 0 : 255;
104}
diff --git a/libraries/evas/src/tests/evas_suite.h b/libraries/evas/src/tests/evas_suite.h
new file mode 100644
index 0000000..31d6d18
--- /dev/null
+++ b/libraries/evas/src/tests/evas_suite.h
@@ -0,0 +1,12 @@
1#ifndef _EVAS_SUITE_H
2#define _EVAS_SUITE_H
3
4#include <check.h>
5
6void evas_test_init(TCase *tc);
7void evas_test_textblock(TCase *tc);
8void evas_test_text(TCase *tc);
9void evas_test_callbacks(TCase *tc);
10
11
12#endif /* _EVAS_SUITE_H */
diff --git a/libraries/evas/src/tests/evas_test_callbacks.c b/libraries/evas/src/tests/evas_test_callbacks.c
new file mode 100644
index 0000000..675ee1c
--- /dev/null
+++ b/libraries/evas/src/tests/evas_test_callbacks.c
@@ -0,0 +1,135 @@
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_CALLBACK_TEST() \
13 Evas *evas; \
14 Evas_Object *rect; \
15 evas = EVAS_TEST_INIT_EVAS(); \
16 rect = evas_object_rectangle_add(evas); \
17do \
18{ \
19} \
20while (0)
21
22#define END_CALLBACK_TEST() \
23do \
24{ \
25 evas_object_del(rect); \
26 evas_free(evas); \
27 evas_shutdown(); \
28} \
29while (0)
30
31static int counter = 1;
32
33static void
34_obj_event_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
35{
36 (void) e;
37 (void) obj;
38 (void) event_info;
39
40 fail_if(((int) data) != counter);
41
42 counter++;
43}
44
45START_TEST(evas_object_event_callbacks_priority)
46{
47 START_CALLBACK_TEST();
48 counter = 1;
49 evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, -10,
50 _obj_event_cb, (void *) 1);
51 evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 0,
52 _obj_event_cb, (void *) 2);
53 evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 10,
54 _obj_event_cb, (void *) 3);
55 evas_object_move(rect, 2, 2);
56
57 /* Make sure we got through all the callbacks */
58 fail_if(counter != 4);
59
60 /* Delete _obj_event_cb 3 times */
61 evas_object_event_callback_del(rect, EVAS_CALLBACK_MOVE, _obj_event_cb);
62 evas_object_event_callback_del(rect, EVAS_CALLBACK_MOVE, _obj_event_cb);
63 evas_object_event_callback_del(rect, EVAS_CALLBACK_MOVE, _obj_event_cb);
64 counter = 1;
65 evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 0,
66 _obj_event_cb, (void *) 2);
67 evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, -10,
68 _obj_event_cb, (void *) 1);
69 evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 10,
70 _obj_event_cb, (void *) 3);
71 evas_object_move(rect, 3, 3);
72
73 /* Make sure we got through all the callbacks */
74 fail_if(counter != 4);
75
76 END_CALLBACK_TEST();
77}
78END_TEST
79
80static void
81_event_cb(void *data, Evas *e, void *event_info)
82{
83 (void) e;
84 (void) event_info;
85
86 fail_if(((int) data) != counter);
87
88 counter++;
89}
90
91START_TEST(evas_event_callbacks_priority)
92{
93 START_CALLBACK_TEST();
94 evas_object_focus_set(rect, EINA_FALSE);
95 counter = 1;
96 evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
97 -10, _event_cb, (void *) 1);
98 evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
99 0, _event_cb, (void *) 2);
100 evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
101 10, _event_cb, (void *) 3);
102 evas_object_focus_set(rect, EINA_TRUE);
103
104 /* Make sure we got through all the callbacks */
105 fail_if(counter != 4);
106
107 /* Delete _event_cb 3 times */
108 evas_event_callback_del(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
109 _event_cb);
110 evas_event_callback_del(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
111 _event_cb);
112 evas_event_callback_del(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
113 _event_cb);
114 evas_object_focus_set(rect, EINA_FALSE);
115 counter = 1;
116 evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
117 0, _event_cb, (void *) 2);
118 evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
119 -10, _event_cb, (void *) 1);
120 evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN,
121 10, _event_cb, (void *) 3);
122 evas_object_focus_set(rect, EINA_TRUE);
123
124 /* Make sure we got through all the callbacks */
125 fail_if(counter != 4);
126
127 END_CALLBACK_TEST();
128}
129END_TEST
130
131void evas_test_callbacks(TCase *tc)
132{
133 tcase_add_test(tc, evas_object_event_callbacks_priority);
134 tcase_add_test(tc, evas_event_callbacks_priority);
135}
diff --git a/libraries/evas/src/tests/evas_test_init.c b/libraries/evas/src/tests/evas_test_init.c
new file mode 100644
index 0000000..f4271ec
--- /dev/null
+++ b/libraries/evas/src/tests/evas_test_init.c
@@ -0,0 +1,21 @@
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
11START_TEST(evas_simple)
12{
13 fail_if(evas_init() != 1); /* one init by test suite */
14 fail_if(evas_shutdown() != 0);
15}
16END_TEST
17
18void evas_test_init(TCase *tc)
19{
20 tcase_add_test(tc, evas_simple);
21}
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}
diff --git a/libraries/evas/src/tests/evas_test_textblock.c b/libraries/evas/src/tests/evas_test_textblock.c
new file mode 100644
index 0000000..6a28353
--- /dev/null
+++ b/libraries/evas/src/tests/evas_test_textblock.c
@@ -0,0 +1,1973 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6
7#include <Eina.h>
8
9#include "evas_suite.h"
10#include "Evas.h"
11
12#include "evas_tests_helpers.h"
13
14/* Functions defined in evas_object_textblock.c */
15EAPI Eina_Bool
16_evas_textblock_check_item_node_link(Evas_Object *obj);
17EAPI int
18_evas_textblock_format_offset_get(const Evas_Object_Textblock_Node_Format *n);
19/* end of functions defined in evas_object_textblock.c */
20
21
22static const char *style_buf =
23 "DEFAULT='font=Sans font_size=10 color=#000 text_class=entry'"
24 "br='\n'"
25 "ps='ps'"
26 "tab='\t'"
27 "b='+ font=Sans:style=bold'";
28
29#define START_TB_TEST() \
30 Evas *evas; \
31 Evas_Object *tb; \
32 Evas_Textblock_Style *st; \
33 Evas_Textblock_Cursor *cur; \
34 evas = EVAS_TEST_INIT_EVAS(); \
35 evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
36 tb = evas_object_textblock_add(evas); \
37 fail_if(!tb); \
38 evas_object_textblock_legacy_newline_set(tb, EINA_FALSE); \
39 st = evas_textblock_style_new(); \
40 fail_if(!st); \
41 evas_textblock_style_set(st, style_buf); \
42 fail_if(strcmp(style_buf, evas_textblock_style_get(st))); \
43 evas_object_textblock_style_set(tb, st); \
44 cur = evas_object_textblock_cursor_new(tb); \
45do \
46{ \
47} \
48while (0)
49
50#define END_TB_TEST() \
51do \
52{ \
53 evas_textblock_cursor_free(cur); \
54 evas_object_del(tb); \
55 evas_textblock_style_free(st); \
56 evas_free(evas); \
57 evas_shutdown(); \
58} \
59while (0)
60
61START_TEST(evas_textblock_simple)
62{
63 START_TB_TEST();
64 const char *buf = "Th<i>i</i>s is a <br> te<b>s</b>t.";
65 evas_object_textblock_text_markup_set(tb, buf);
66 fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
67 END_TB_TEST();
68}
69END_TEST
70
71#define _CHECK_CURSOR_COORDS() \
72do \
73{ \
74 Evas_Coord cx, cy, cw, ch; \
75 int ret; \
76 ret = evas_textblock_cursor_geometry_get(cur, &cx, &cy, &cw, &ch, \
77 NULL, EVAS_TEXTBLOCK_CURSOR_UNDER); \
78 fail_if(ret == -1); \
79 ret = evas_textblock_cursor_geometry_get(cur, &cx, &cy, &cw, &ch, \
80 NULL, EVAS_TEXTBLOCK_CURSOR_BEFORE); \
81 fail_if(ret == -1); \
82 ret = evas_textblock_cursor_char_geometry_get(cur, \
83 &cx, &cy, &cw, &ch); \
84 fail_if(ret == -1); \
85 ret = evas_textblock_cursor_pen_geometry_get(cur, &cx, &cy, &cw, &ch); \
86 fail_if(ret == -1); \
87 ret = evas_textblock_cursor_line_geometry_get(cur, \
88 &cx, &cy, &cw, &ch); \
89 fail_if(ret == -1); \
90} \
91while (0)
92START_TEST(evas_textblock_cursor)
93{
94 START_TB_TEST();
95 Evas_Coord x, y, w, h;
96 size_t i, len;
97 Evas_Coord nw, nh;
98 const char *buf = "This is a<br> test.<ps>Lets see if this works.<ps>עוד פסקה.";
99
100 /* Walk the textblock using cursor_char_next */
101 evas_object_textblock_text_markup_set(tb, buf);
102 fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
103 len = eina_unicode_utf8_get_len(buf) - 9; /* 9 because len(<br>) == 1 and len(<ps>) == 1 */
104 for (i = 0 ; i < len ; i++)
105 {
106 _CHECK_CURSOR_COORDS();
107
108 fail_if(evas_textblock_cursor_pos_get(cur) != (int) i);
109
110 fail_if(!evas_textblock_cursor_char_next(cur) && (i < len - 1));
111 }
112 fail_if(evas_textblock_cursor_char_next(cur));
113
114 /* Jump to positions all aronud the textblock */
115 evas_textblock_cursor_pos_set(cur, -1);
116 fail_if(evas_textblock_cursor_pos_get(cur) != 0);
117
118 evas_textblock_cursor_pos_set(cur, len + 5);
119 fail_if(evas_textblock_cursor_pos_get(cur) != (int) len);
120
121 for (i = 0 ; i < len ; i++)
122 {
123 evas_textblock_cursor_pos_set(cur, i);
124
125 _CHECK_CURSOR_COORDS();
126
127 fail_if(evas_textblock_cursor_pos_get(cur) != (int) i);
128 }
129
130 /* Create another cursor and insert text, making sure everything
131 * is in sync. */
132 evas_object_textblock_clear(tb);
133 Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb);
134 evas_textblock_cursor_copy(main_cur, cur);
135 fail_if(evas_textblock_cursor_pos_get(cur) !=
136 evas_textblock_cursor_pos_get(main_cur));
137
138 evas_textblock_cursor_text_prepend(main_cur, "a");
139 fail_if(evas_textblock_cursor_pos_get(cur) ==
140 evas_textblock_cursor_pos_get(main_cur));
141 evas_textblock_cursor_text_prepend(main_cur, "a");
142 fail_if(evas_textblock_cursor_pos_get(cur) ==
143 evas_textblock_cursor_pos_get(main_cur));
144
145 /* Insert text to a non-empty textblock */
146 evas_object_textblock_clear(tb);
147 evas_object_textblock_text_markup_set(tb, buf);
148 evas_textblock_cursor_copy(main_cur, cur);
149 fail_if(evas_textblock_cursor_pos_get(cur) !=
150 evas_textblock_cursor_pos_get(main_cur));
151
152 evas_textblock_cursor_text_prepend(main_cur, "a");
153 fail_if(evas_textblock_cursor_pos_get(cur) ==
154 evas_textblock_cursor_pos_get(main_cur));
155 evas_textblock_cursor_text_prepend(main_cur, "a");
156 fail_if(evas_textblock_cursor_pos_get(cur) ==
157 evas_textblock_cursor_pos_get(main_cur));
158
159 /* Make sure append works */
160 evas_textblock_cursor_copy(main_cur, cur);
161 fail_if(evas_textblock_cursor_pos_get(cur) !=
162 evas_textblock_cursor_pos_get(main_cur));
163 evas_textblock_cursor_text_append(main_cur, "a");
164 fail_if(evas_textblock_cursor_pos_get(cur) !=
165 evas_textblock_cursor_pos_get(main_cur));
166
167 /* Cursor comparison */
168 evas_textblock_cursor_pos_set(cur, 1);
169 evas_textblock_cursor_pos_set(main_cur, 2);
170 fail_if(evas_textblock_cursor_compare(cur, main_cur) != -1);
171
172 evas_textblock_cursor_pos_set(cur, 2);
173 evas_textblock_cursor_pos_set(main_cur, 2);
174 fail_if(evas_textblock_cursor_compare(cur, main_cur) != 0);
175
176 evas_textblock_cursor_pos_set(cur, 3);
177 evas_textblock_cursor_pos_set(main_cur, 2);
178 fail_if(evas_textblock_cursor_compare(cur, main_cur) != 1);
179
180 /* Paragraph first */
181 evas_object_textblock_text_markup_set(tb, buf);
182 for (i = 0 ; i < len ; i++)
183 {
184 evas_textblock_cursor_pos_set(cur, i);
185
186 evas_textblock_cursor_paragraph_first(cur);
187 fail_if(evas_textblock_cursor_pos_get(cur) != 0);
188 }
189
190 /* Paragraph last */
191 for (i = 0 ; i < len ; i++)
192 {
193 evas_textblock_cursor_pos_set(cur, i);
194
195 evas_textblock_cursor_paragraph_last(cur);
196 fail_if(evas_textblock_cursor_pos_get(cur) != (int) len);
197 }
198
199 /* Paragraph next */
200 evas_textblock_cursor_paragraph_last(cur);
201 fail_if(evas_textblock_cursor_paragraph_next(cur));
202
203 evas_textblock_cursor_paragraph_first(cur);
204 fail_if(!evas_textblock_cursor_paragraph_next(cur));
205 fail_if(!evas_textblock_cursor_paragraph_next(cur));
206
207 /* Paragraph prev */
208 evas_textblock_cursor_paragraph_first(cur);
209 fail_if(evas_textblock_cursor_paragraph_prev(cur));
210
211 evas_textblock_cursor_paragraph_last(cur);
212 fail_if(!evas_textblock_cursor_paragraph_prev(cur));
213 fail_if(!evas_textblock_cursor_paragraph_prev(cur));
214
215 /* Cher next */
216 evas_textblock_cursor_paragraph_last(cur);
217 fail_if(evas_textblock_cursor_char_next(cur));
218
219 evas_textblock_cursor_paragraph_first(cur);
220 fail_if(!evas_textblock_cursor_char_next(cur));
221 fail_if(!evas_textblock_cursor_paragraph_next(cur));
222 fail_if(!evas_textblock_cursor_char_next(cur));
223 fail_if(!evas_textblock_cursor_paragraph_next(cur));
224 fail_if(!evas_textblock_cursor_char_next(cur));
225
226 /* Cher prev */
227 evas_textblock_cursor_paragraph_first(cur);
228 fail_if(evas_textblock_cursor_char_prev(cur));
229
230 evas_textblock_cursor_paragraph_last(cur);
231 fail_if(!evas_textblock_cursor_char_prev(cur));
232 fail_if(!evas_textblock_cursor_paragraph_prev(cur));
233 fail_if(!evas_textblock_cursor_char_prev(cur));
234
235 /* Paragraph char first */
236 evas_textblock_cursor_paragraph_first(main_cur);
237 evas_textblock_cursor_paragraph_first(cur);
238 fail_if(!evas_textblock_cursor_char_next(cur));
239 evas_textblock_cursor_paragraph_char_first(cur);
240 fail_if(evas_textblock_cursor_compare(cur, main_cur));
241
242 /* Paragraph char last */
243 evas_textblock_cursor_paragraph_last(main_cur);
244 evas_textblock_cursor_paragraph_last(cur);
245 fail_if(!evas_textblock_cursor_char_prev(cur));
246 evas_textblock_cursor_paragraph_char_last(cur);
247 fail_if(evas_textblock_cursor_compare(cur, main_cur));
248
249 /* Line char first */
250 evas_textblock_cursor_paragraph_first(main_cur);
251 evas_textblock_cursor_paragraph_first(cur);
252 fail_if(!evas_textblock_cursor_char_next(cur));
253 evas_textblock_cursor_line_char_first(cur);
254 fail_if(evas_textblock_cursor_compare(cur, main_cur));
255
256 evas_textblock_cursor_pos_set(cur, 12);
257 evas_textblock_cursor_line_char_first(cur);
258 fail_if(evas_textblock_cursor_pos_get(cur) != 10);
259
260 /* Line char first */
261 evas_textblock_cursor_paragraph_last(main_cur);
262 evas_textblock_cursor_paragraph_last(cur);
263 fail_if(!evas_textblock_cursor_char_prev(cur));
264 evas_textblock_cursor_line_char_last(cur);
265 fail_if(evas_textblock_cursor_compare(cur, main_cur));
266
267 evas_textblock_cursor_pos_set(cur, 12);
268 evas_textblock_cursor_line_char_last(cur);
269 fail_if(evas_textblock_cursor_pos_get(cur) != 16);
270
271 /* Line set */
272 evas_textblock_cursor_paragraph_first(main_cur);
273 evas_textblock_cursor_paragraph_last(cur);
274
275 fail_if(!evas_textblock_cursor_line_set(cur, 0));
276 fail_if(evas_textblock_cursor_compare(cur, main_cur));
277 fail_if(!evas_textblock_cursor_line_set(cur, 1));
278 fail_if(!evas_textblock_cursor_line_set(cur, 2));
279 fail_if(!evas_textblock_cursor_line_set(cur, 3));
280
281 fail_if(evas_textblock_cursor_line_set(cur, -1));
282 fail_if(evas_textblock_cursor_line_set(cur, 99));
283
284 /* Paragraph text get */
285 evas_textblock_cursor_paragraph_first(cur);
286 fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur),
287 "This is a<br> test."));
288 evas_textblock_cursor_paragraph_next(cur);
289 fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur),
290 "Lets see if this works."));
291 evas_textblock_cursor_paragraph_next(cur);
292 fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur),
293 "עוד פסקה."));
294
295 /* Paragraph length get */
296 evas_textblock_cursor_paragraph_first(cur);
297 /* -3 because len(<br>) == 1 */
298 fail_if(evas_textblock_cursor_paragraph_text_length_get(cur) !=
299 eina_unicode_utf8_get_len("This is a<br> test.") - 3);
300 evas_textblock_cursor_paragraph_next(cur);
301 fail_if(evas_textblock_cursor_paragraph_text_length_get(cur) !=
302 eina_unicode_utf8_get_len("Lets see if this works."));
303 evas_textblock_cursor_paragraph_next(cur);
304 fail_if(evas_textblock_cursor_paragraph_text_length_get(cur) !=
305 eina_unicode_utf8_get_len("עוד פסקה."));
306
307 /* Cursor content get */
308 evas_textblock_cursor_pos_set(cur, 0);
309 fail_if(strcmp(evas_textblock_cursor_content_get(cur), "T"));
310 evas_textblock_cursor_pos_set(cur, 9);
311 fail_if(strcmp(evas_textblock_cursor_content_get(cur), "<br>"));
312 evas_textblock_cursor_pos_set(cur, 43);
313 fail_if(strcmp(evas_textblock_cursor_content_get(cur), "ד"));
314
315 /* Eol get */
316 for (i = 0 ; i < len ; i++)
317 {
318 evas_textblock_cursor_pos_set(cur, i);
319 evas_textblock_cursor_copy(cur, main_cur);
320 evas_textblock_cursor_line_char_last(main_cur);
321
322 if (!evas_textblock_cursor_compare(cur, main_cur))
323 {
324 fail_if(!evas_textblock_cursor_eol_get(cur));
325 }
326 else
327 {
328 fail_if(evas_textblock_cursor_eol_get(cur));
329 }
330 }
331
332 /* Format positions */
333 const Evas_Object_Textblock_Node_Format *fnode;
334 fnode = evas_textblock_node_format_first_get(tb);
335 fail_if(!fnode);
336 evas_textblock_cursor_at_format_set(cur, fnode);
337 evas_textblock_cursor_copy(cur, main_cur);
338 fail_if(evas_textblock_cursor_pos_get(cur) != 9);
339 fail_if(evas_textblock_cursor_format_get(cur) != fnode);
340
341 fnode = evas_textblock_node_format_next_get(fnode);
342 fail_if(!fnode);
343 evas_textblock_cursor_at_format_set(cur, fnode);
344 fail_if(evas_textblock_cursor_pos_get(cur) != 16);
345 fail_if(evas_textblock_cursor_format_get(cur) != fnode);
346 evas_textblock_cursor_format_next(main_cur);
347 fail_if(evas_textblock_cursor_compare(main_cur, cur));
348
349 fnode = evas_textblock_node_format_prev_get(fnode);
350 fail_if(!fnode);
351 evas_textblock_cursor_at_format_set(cur, fnode);
352 fail_if(evas_textblock_cursor_pos_get(cur) != 9);
353 fail_if(evas_textblock_cursor_format_get(cur) != fnode);
354 evas_textblock_cursor_format_prev(main_cur);
355 fail_if(evas_textblock_cursor_compare(main_cur, cur));
356
357 evas_textblock_cursor_char_next(main_cur);
358 evas_textblock_cursor_format_prev(main_cur);
359 fail_if(evas_textblock_cursor_compare(main_cur, cur));
360
361
362 evas_object_textblock_text_markup_set(tb, buf);
363
364 /* Check that pen geometry and getting char at coord are in sync. */
365 do
366 {
367 int cur_pos;
368
369 /* Check if it's the last char, if it is, break, otherwise, go back
370 * to the current char because our test advanced the cursor. */
371 if (!evas_textblock_cursor_char_next(cur))
372 break;
373 else
374 evas_textblock_cursor_char_prev(cur);
375
376 cur_pos = evas_textblock_cursor_pos_get(cur);
377 evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h);
378 evas_textblock_cursor_char_coord_set(cur, x + (w / 2), y + (h / 2));
379 fail_if(cur_pos != evas_textblock_cursor_pos_get(cur));
380 }
381 while (evas_textblock_cursor_char_next(cur));
382
383 /* Try positions before the first paragraph, and after the last paragraph */
384 evas_object_textblock_text_markup_set(tb, buf);
385 evas_object_textblock_size_native_get(tb, &nw, &nh);
386 evas_object_resize(tb, nw, nh);
387 evas_textblock_cursor_pos_set(cur, 5);
388 evas_textblock_cursor_char_coord_set(cur, nw / 2,
389 -50);
390 evas_textblock_cursor_paragraph_first(main_cur);
391 fail_if(evas_textblock_cursor_compare(cur, main_cur));
392
393 evas_textblock_cursor_pos_set(cur, 5);
394 evas_textblock_cursor_char_coord_set(cur, nw / 2,
395 nh + 50);
396 evas_textblock_cursor_paragraph_last(main_cur);
397 fail_if(evas_textblock_cursor_compare(cur, main_cur));
398
399 /* Try positions beyond the left/right limits of lines. */
400 for (i = 0 ; i < 2 ; i++)
401 {
402 evas_textblock_cursor_line_set(cur, i);
403 evas_textblock_cursor_line_geometry_get(cur, &x, &y, &w, &h);
404
405 evas_textblock_cursor_pos_set(main_cur, 5);
406 evas_textblock_cursor_char_coord_set(main_cur, x - 50, y);
407 fail_if(evas_textblock_cursor_compare(main_cur, cur));
408
409 evas_textblock_cursor_line_char_last(cur);
410 evas_textblock_cursor_pos_set(main_cur, 5);
411 evas_textblock_cursor_char_coord_set(main_cur, x + w + 50, y);
412 fail_if(evas_textblock_cursor_compare(main_cur, cur));
413 }
414
415#ifdef HAVE_FRIBIDI
416 evas_object_textblock_text_markup_set(tb,
417 "testנסיוןtestנסיון<ps>"
418 "נסיוןtestנסיוןtest<ps>"
419 "testנסיוןtest<ps>"
420 "נסיוןtestנסיון<ps>"
421 "testנסיון<br>נסיון<ps>"
422 "נסיוןtest<br>test"
423 );
424
425 for (i = 0 ; i < 8 ; i++)
426 {
427 evas_textblock_cursor_line_set(cur, i);
428 evas_textblock_cursor_line_geometry_get(cur, &x, &y, &w, &h);
429 switch (i)
430 {
431 case 0:
432 case 2:
433 case 4:
434 case 5:
435 /* Ltr paragraph */
436 evas_textblock_cursor_pos_set(main_cur, 7);
437 evas_textblock_cursor_char_coord_set(main_cur, x - 50, y);
438 fail_if(evas_textblock_cursor_compare(main_cur, cur));
439
440 evas_textblock_cursor_line_char_last(cur);
441 evas_textblock_cursor_pos_set(main_cur, 7);
442 evas_textblock_cursor_char_coord_set(main_cur, x + w + 50, y);
443 fail_if(evas_textblock_cursor_compare(main_cur, cur));
444 break;
445 case 1:
446 case 3:
447 case 6:
448 case 7:
449 /* Rtl paragraph */
450 evas_textblock_cursor_line_char_last(cur);
451 evas_textblock_cursor_pos_set(main_cur, 7);
452 evas_textblock_cursor_char_coord_set(main_cur, x - 50, y);
453 fail_if(evas_textblock_cursor_compare(main_cur, cur));
454
455 evas_textblock_cursor_line_char_first(cur);
456 evas_textblock_cursor_pos_set(main_cur, 7);
457 evas_textblock_cursor_char_coord_set(main_cur, x + w + 50, y);
458 fail_if(evas_textblock_cursor_compare(main_cur, cur));
459 break;
460 }
461 }
462#endif
463
464 evas_object_textblock_text_markup_set(tb, buf);
465 /* Testing line geometry.*/
466 {
467 Evas_Coord lx, ly, lw, lh;
468 Evas_Coord plx, ply, plw, plh;
469 evas_textblock_cursor_line_set(cur, 0);
470 evas_textblock_cursor_copy(cur, main_cur);
471 evas_textblock_cursor_line_char_last(main_cur);
472 evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh);
473
474 while (evas_textblock_cursor_compare(cur, main_cur) <= 0)
475 {
476 evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h);
477 fail_if(0 != evas_textblock_cursor_line_geometry_get(
478 cur, &lx, &ly, &lw, &lh));
479 fail_if((x < lx) || (x + w > lx + lw) ||
480 (y < ly) || (y + h > ly + lh));
481 fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh));
482
483 plx = lx;
484 ply = ly;
485 plw = lw;
486 plh = lh;
487 evas_textblock_cursor_char_next(cur);
488 }
489
490 evas_textblock_cursor_line_set(cur, 1);
491 evas_textblock_cursor_copy(cur, main_cur);
492 evas_textblock_cursor_line_char_last(main_cur);
493 evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh);
494
495 while (evas_textblock_cursor_compare(cur, main_cur) <= 0)
496 {
497 evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h);
498 fail_if(1 != evas_textblock_cursor_line_geometry_get(
499 cur, &lx, &ly, &lw, &lh));
500 fail_if((x < lx) || (x + w > lx + lw) ||
501 (y < ly) || (y + h > ly + lh));
502 fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh));
503
504 plx = lx;
505 ply = ly;
506 plw = lw;
507 plh = lh;
508 evas_textblock_cursor_char_next(cur);
509 }
510
511 evas_textblock_cursor_paragraph_last(cur);
512 evas_textblock_cursor_line_set(cur, 0);
513 evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh);
514 evas_object_textblock_line_number_geometry_get(tb, 0,
515 &lx, &ly, &lw, &lh);
516 fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh));
517 fail_if(0 != evas_textblock_cursor_line_coord_set(cur, ly + (lh / 2)));
518
519 evas_textblock_cursor_line_set(cur, 1);
520 evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh);
521 evas_object_textblock_line_number_geometry_get(tb, 1,
522 &lx, &ly, &lw, &lh);
523 fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh));
524 fail_if(1 != evas_textblock_cursor_line_coord_set(cur, ly + (lh / 2)));
525
526 /* Before the start of the textblock */
527 fail_if(0 != evas_textblock_cursor_line_coord_set(cur, -50));
528 fail_if(3 != evas_textblock_cursor_line_coord_set(cur, 100000));
529
530 /* And now with a valigned textblock. */
531 evas_object_textblock_text_markup_set(tb, buf);
532 evas_object_textblock_size_native_get(tb, &nw, &nh);
533 evas_object_resize(tb, 2 * nw, 2 * nh);
534
535 evas_object_textblock_valign_set(tb, 0.5);
536 evas_textblock_cursor_paragraph_first(cur);
537 evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h);
538 fail_if(y <= 0);
539
540 evas_textblock_cursor_paragraph_last(main_cur);
541 evas_textblock_cursor_char_coord_set(main_cur, x + w, y / 2);
542 fail_if(evas_textblock_cursor_compare(main_cur, cur));
543
544 evas_textblock_cursor_paragraph_last(main_cur);
545 evas_textblock_cursor_line_coord_set(main_cur, y / 2);
546 fail_if(evas_textblock_cursor_compare(main_cur, cur));
547
548 /* Fail if they are equal, i.e if it for some reason thinks it should
549 * go to the end. */
550 evas_textblock_cursor_paragraph_first(main_cur);
551 evas_textblock_cursor_paragraph_last(cur);
552 evas_textblock_cursor_char_coord_set(main_cur, x + w, nh + 1);
553 fail_if(!evas_textblock_cursor_compare(main_cur, cur));
554
555 evas_textblock_cursor_paragraph_first(main_cur);
556 evas_textblock_cursor_paragraph_last(cur);
557 evas_textblock_cursor_line_coord_set(main_cur, nh + 1);
558 fail_if(!evas_textblock_cursor_compare(main_cur, cur));
559
560 /* Fail if it doesn't go to the end. */
561 evas_textblock_cursor_paragraph_last(cur);
562 evas_textblock_cursor_paragraph_first(main_cur);
563 evas_textblock_cursor_char_coord_set(main_cur, x + w, (2 * nh) - 1);
564 fail_if(evas_textblock_cursor_compare(main_cur, cur));
565
566 evas_textblock_cursor_paragraph_first(main_cur);
567 evas_textblock_cursor_line_coord_set(main_cur, (2 * nh) - 1);
568 fail_if(evas_textblock_cursor_compare(main_cur, cur));
569 }
570
571 END_TB_TEST();
572}
573END_TEST
574
575START_TEST(evas_textblock_format_removal)
576{
577 START_TB_TEST();
578 int i;
579 const char *buf = "Th<b>is a<a>tes</a>st</b>.";
580 const Evas_Object_Textblock_Node_Format *fnode;
581 Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb);
582 evas_object_textblock_text_markup_set(tb, buf);
583
584 /* Remove the "b" pair. */
585 fnode = evas_textblock_node_format_first_get(tb);
586 evas_textblock_node_format_remove_pair(tb,
587 (Evas_Object_Textblock_Node_Format *) fnode);
588
589 fnode = evas_textblock_node_format_first_get(tb);
590 fail_if (!fnode);
591 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
592 "+ a"));
593
594 fnode = evas_textblock_node_format_next_get(fnode);
595 fail_if (!fnode);
596 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
597 "- a"));
598
599 fnode = evas_textblock_node_format_next_get(fnode);
600 fail_if (fnode);
601
602 /* Now also remove the a pair */
603 fnode = evas_textblock_node_format_first_get(tb);
604 evas_textblock_node_format_remove_pair(tb,
605 (Evas_Object_Textblock_Node_Format *) fnode);
606 fnode = evas_textblock_node_format_first_get(tb);
607 fail_if (fnode);
608
609 /* Remove the "a" pair. */
610 evas_object_textblock_text_markup_set(tb, buf);
611
612 fnode = evas_textblock_node_format_first_get(tb);
613 fnode = evas_textblock_node_format_next_get(fnode);
614 evas_textblock_node_format_remove_pair(tb,
615 (Evas_Object_Textblock_Node_Format *) fnode);
616
617 fnode = evas_textblock_node_format_first_get(tb);
618 fail_if (!fnode);
619 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
620 "+ b"));
621
622 fnode = evas_textblock_node_format_next_get(fnode);
623 fail_if (!fnode);
624 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
625 "- b"));
626
627 fnode = evas_textblock_node_format_next_get(fnode);
628 fail_if (fnode);
629
630 /* Now also remove the b pair */
631 fnode = evas_textblock_node_format_first_get(tb);
632 evas_textblock_node_format_remove_pair(tb,
633 (Evas_Object_Textblock_Node_Format *) fnode);
634 fnode = evas_textblock_node_format_first_get(tb);
635 fail_if (fnode);
636
637 /* Now remove formats by removing text */
638 evas_object_textblock_text_markup_set(tb, buf);
639 evas_textblock_cursor_pos_set(cur, 6);
640 evas_textblock_cursor_char_delete(cur);
641 evas_textblock_cursor_char_delete(cur);
642 evas_textblock_cursor_char_delete(cur);
643 /* Only b formats should remain */
644 fnode = evas_textblock_node_format_first_get(tb);
645 fail_if (!fnode);
646 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
647 "+ b"));
648
649 fnode = evas_textblock_node_format_next_get(fnode);
650 fail_if (!fnode);
651 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
652 "- b"));
653
654 fnode = evas_textblock_node_format_next_get(fnode);
655 fail_if (fnode);
656
657 /* No formats should remain. */
658 evas_textblock_cursor_pos_set(cur, 2);
659 evas_textblock_cursor_char_delete(cur);
660 evas_textblock_cursor_char_delete(cur);
661 evas_textblock_cursor_char_delete(cur);
662 evas_textblock_cursor_char_delete(cur);
663 evas_textblock_cursor_char_delete(cur);
664 evas_textblock_cursor_char_delete(cur);
665 fnode = evas_textblock_node_format_first_get(tb);
666 fail_if (fnode);
667
668 /* Try to remove the formats in a way that shouldn't remove them */
669 evas_object_textblock_text_markup_set(tb, buf);
670 evas_textblock_cursor_pos_set(cur, 7);
671 evas_textblock_cursor_char_delete(cur);
672 evas_textblock_cursor_char_delete(cur);
673 evas_textblock_cursor_char_delete(cur);
674 evas_textblock_cursor_char_delete(cur);
675 fnode = evas_textblock_node_format_first_get(tb);
676 fail_if (!fnode);
677 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
678 "+ b"));
679
680 fnode = evas_textblock_node_format_next_get(fnode);
681 fail_if (!fnode);
682 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
683 "+ a"));
684
685 fnode = evas_textblock_node_format_next_get(fnode);
686 fail_if (!fnode);
687 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
688 "- a"));
689
690 fnode = evas_textblock_node_format_next_get(fnode);
691 fail_if (!fnode);
692 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
693 "- b"));
694
695 fnode = evas_textblock_node_format_next_get(fnode);
696 fail_if (fnode);
697
698 /* Try range deletion to delete a */
699 evas_object_textblock_text_markup_set(tb, buf);
700 evas_textblock_cursor_pos_set(cur, 6);
701 evas_textblock_cursor_pos_set(main_cur, 9);
702 evas_textblock_cursor_range_delete(cur, main_cur);
703 fnode = evas_textblock_node_format_first_get(tb);
704 fail_if (!fnode);
705 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
706 "+ b"));
707
708 fnode = evas_textblock_node_format_next_get(fnode);
709 fail_if (!fnode);
710 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
711 "- b"));
712
713 fnode = evas_textblock_node_format_next_get(fnode);
714 fail_if (fnode);
715
716 /* Range deletion to delete both */
717 evas_object_textblock_text_markup_set(tb, buf);
718 evas_textblock_cursor_pos_set(cur, 2);
719 evas_textblock_cursor_pos_set(main_cur, 11);
720 evas_textblock_cursor_range_delete(cur, main_cur);
721 fnode = evas_textblock_node_format_first_get(tb);
722 fail_if (fnode);
723
724 /* Range deletion across paragraphs */
725 evas_object_textblock_text_markup_set(tb,
726 "Th<b>is a<a>te<ps>"
727 "s</a>st</b>.");
728 evas_textblock_cursor_pos_set(cur, 6);
729 evas_textblock_cursor_pos_set(main_cur, 10);
730 evas_textblock_cursor_range_delete(cur, main_cur);
731 fnode = evas_textblock_node_format_first_get(tb);
732 fail_if (!fnode);
733 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
734 "+ b"));
735
736 fnode = evas_textblock_node_format_next_get(fnode);
737 fail_if (!fnode);
738 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
739 "- b"));
740
741 fnode = evas_textblock_node_format_next_get(fnode);
742 fail_if (fnode);
743
744 /* Two formats in the same place. */
745 evas_object_textblock_text_markup_set(tb, "a<b><a>b</a></b>b");
746 evas_textblock_cursor_pos_set(cur, 1);
747 evas_textblock_cursor_char_delete(cur);
748 fnode = evas_textblock_node_format_first_get(tb);
749 fail_if (fnode);
750
751 /* Two formats across different paragraphs with notihng in between. */
752 evas_object_textblock_text_markup_set(tb, "<b><ps></b>");
753 evas_textblock_cursor_pos_set(cur, 0);
754 evas_textblock_cursor_char_delete(cur);
755 fnode = evas_textblock_node_format_first_get(tb);
756 fail_if (fnode);
757
758 /* Try with range */
759 evas_object_textblock_text_markup_set(tb, "<b><ps></b>");
760 evas_textblock_cursor_pos_set(cur, 0);
761 evas_textblock_cursor_pos_set(main_cur, 1);
762 evas_textblock_cursor_range_delete(cur, main_cur);
763 fnode = evas_textblock_node_format_first_get(tb);
764 fail_if (fnode);
765
766 /* Verify fmt position and REP_CHAR positions are the same */
767 evas_object_textblock_text_markup_set(tb,
768 "This is<ps>an <item absize=93x152 vsize=ascent></>a.");
769 evas_textblock_cursor_pos_set(cur, 7);
770 evas_textblock_cursor_char_delete(cur);
771 fnode = evas_textblock_node_format_first_get(tb);
772 fail_if(_evas_textblock_format_offset_get(fnode) != 10);
773
774 /* Out of order <b><i></b></i> mixes. */
775 evas_object_textblock_text_markup_set(tb, "a<b>b<i>c</b>d</i>e");
776 evas_textblock_cursor_pos_set(cur, 2);
777
778 for (i = 0 ; i < 2 ; i++)
779 {
780 fnode = evas_textblock_node_format_first_get(tb);
781 fail_if (!fnode);
782 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
783
784 fnode = evas_textblock_node_format_next_get(fnode);
785 fail_if (!fnode);
786 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i"));
787
788 fnode = evas_textblock_node_format_next_get(fnode);
789 fail_if (!fnode);
790 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b"));
791
792 fnode = evas_textblock_node_format_next_get(fnode);
793 fail_if (!fnode);
794 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i"));
795
796 fnode = evas_textblock_node_format_next_get(fnode);
797 fail_if (fnode);
798
799 evas_textblock_cursor_char_delete(cur);
800 }
801 fnode = evas_textblock_node_format_first_get(tb);
802 fail_if (!fnode);
803 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
804
805 fnode = evas_textblock_node_format_next_get(fnode);
806 fail_if (!fnode);
807 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b"));
808
809 fnode = evas_textblock_node_format_next_get(fnode);
810 fail_if (fnode);
811
812 /* This time with a generic closer */
813 evas_object_textblock_text_markup_set(tb, "a<b>b<i>c</b>d</>e");
814 evas_textblock_cursor_pos_set(cur, 2);
815
816 for (i = 0 ; i < 2 ; i++)
817 {
818 fnode = evas_textblock_node_format_first_get(tb);
819 fail_if (!fnode);
820 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
821
822 fnode = evas_textblock_node_format_next_get(fnode);
823 fail_if (!fnode);
824 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i"));
825
826 fnode = evas_textblock_node_format_next_get(fnode);
827 fail_if (!fnode);
828 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b"));
829
830 fnode = evas_textblock_node_format_next_get(fnode);
831 fail_if (!fnode);
832 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- "));
833
834 fnode = evas_textblock_node_format_next_get(fnode);
835 fail_if (fnode);
836
837 evas_textblock_cursor_char_delete(cur);
838 }
839 fnode = evas_textblock_node_format_first_get(tb);
840 fail_if (!fnode);
841 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
842
843 fnode = evas_textblock_node_format_next_get(fnode);
844 fail_if (!fnode);
845 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b"));
846
847 fnode = evas_textblock_node_format_next_get(fnode);
848 fail_if (fnode);
849
850 /* And now with remove pair. */
851 evas_object_textblock_text_markup_set(tb, "a<b>b<i>c</b>d</i>e");
852 evas_textblock_cursor_pos_set(cur, 2);
853 fnode = evas_textblock_node_format_first_get(tb);
854 evas_textblock_node_format_remove_pair(tb,
855 (Evas_Object_Textblock_Node_Format *) fnode);
856
857 fnode = evas_textblock_node_format_first_get(tb);
858 fail_if (!fnode);
859 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i"));
860
861 fnode = evas_textblock_node_format_next_get(fnode);
862 fail_if (!fnode);
863 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i"));
864
865 fnode = evas_textblock_node_format_next_get(fnode);
866 fail_if (fnode);
867
868 /* Remove the other pair */
869 evas_object_textblock_text_markup_set(tb, "a<b>b<i>c</>d</i>e");
870 evas_textblock_cursor_pos_set(cur, 2);
871 fnode = evas_textblock_node_format_first_get(tb);
872 fnode = evas_textblock_node_format_next_get(fnode);
873 evas_textblock_node_format_remove_pair(tb,
874 (Evas_Object_Textblock_Node_Format *) fnode);
875
876 fnode = evas_textblock_node_format_first_get(tb);
877 fail_if (!fnode);
878 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
879
880 fnode = evas_textblock_node_format_next_get(fnode);
881 fail_if (!fnode);
882 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i"));
883
884 fnode = evas_textblock_node_format_next_get(fnode);
885 fail_if (fnode);
886
887 /* Remove two pairs with the same name and same positions. */
888 evas_object_textblock_text_markup_set(tb, "<a><a>A</a></a>");
889 evas_textblock_cursor_pos_set(cur, 0);
890 evas_textblock_cursor_char_delete(cur);
891
892 fnode = evas_textblock_node_format_first_get(tb);
893 fail_if (fnode);
894
895 /* Try to remove a format that doesn't have a pair (with a bad mkup) */
896 evas_object_textblock_text_markup_set(tb, "a<b>b<i>c</>d</i>e");
897 evas_textblock_cursor_pos_set(cur, 2);
898 fnode = evas_textblock_node_format_first_get(tb);
899 evas_textblock_node_format_remove_pair(tb,
900 (Evas_Object_Textblock_Node_Format *) fnode);
901
902 fnode = evas_textblock_node_format_first_get(tb);
903 fail_if (!fnode);
904 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i"));
905
906 fnode = evas_textblock_node_format_next_get(fnode);
907 fail_if (!fnode);
908 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- "));
909
910 fnode = evas_textblock_node_format_next_get(fnode);
911 fail_if (!fnode);
912 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i"));
913
914 fnode = evas_textblock_node_format_next_get(fnode);
915 fail_if (fnode);
916
917 END_TB_TEST();
918}
919END_TEST
920
921/* Testing items */
922START_TEST(evas_textblock_items)
923{
924 Evas_Coord w, h, w2, h2, nw, nh, ih;
925 START_TB_TEST();
926 const char *buf = "This is an <item absize=93x152></>.";
927
928 /* Absolute item size */
929 buf = "This is an <item absize=93x152 vsize=full></>.";
930 evas_object_textblock_text_markup_set(tb, buf);
931 evas_object_textblock_size_formatted_get(tb, &w, &h);
932 fail_if((w < 93) || (h != 152));
933 evas_textblock_cursor_pos_set(cur, 11);
934 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
935 fail_if((w != 93) || (h != 152));
936
937 buf = "This is an <item absize=93x152 vsize=ascent></>.";
938 evas_object_textblock_text_markup_set(tb, buf);
939 evas_object_textblock_size_formatted_get(tb, &w, &h);
940 fail_if((w < 93) || (h <= 152));
941 evas_textblock_cursor_pos_set(cur, 11);
942 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
943 fail_if((w != 93) || (h != 152));
944
945 /* Size is the same as abssize, unless there's scaling applied. */
946 buf = "This is an <item size=93x152 vsize=full></>.";
947 evas_object_textblock_text_markup_set(tb, buf);
948 evas_object_textblock_size_formatted_get(tb, &w, &h);
949 fail_if((w < 93) || (h != 152));
950 evas_textblock_cursor_pos_set(cur, 11);
951 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
952 fail_if((w != 93) || (h != 152));
953
954 buf = "This is an <item size=93x152 vsize=ascent></>.";
955 evas_object_textblock_text_markup_set(tb, buf);
956 evas_object_textblock_size_formatted_get(tb, &w, &h);
957 fail_if((w < 93) || (h <= 152));
958 evas_textblock_cursor_pos_set(cur, 11);
959 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
960 fail_if((w != 93) || (h != 152));
961
962 evas_object_scale_set(tb, 2.0);
963 buf = "This is an <item size=93x152 vsize=full></>.";
964 evas_object_textblock_text_markup_set(tb, buf);
965 evas_object_textblock_size_formatted_get(tb, &w, &h);
966 fail_if((w < (2 * 93)) || (h != (2 * 152)));
967 evas_textblock_cursor_pos_set(cur, 11);
968 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
969 fail_if((w != (2 * 93)) || (h != (2 * 152)));
970 evas_textblock_cursor_pos_set(cur, 11);
971 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
972 fail_if((w != (2 * 93)) || (h != (2 * 152)));
973
974 buf = "This is an <item size=93x152 vsize=ascent></>.";
975 evas_object_textblock_text_markup_set(tb, buf);
976 evas_object_textblock_size_formatted_get(tb, &w, &h);
977 fail_if((w < (2 * 93)) || (h <= (2 * 152)));
978 evas_textblock_cursor_pos_set(cur, 11);
979 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
980 fail_if((w != (2 * 93)) || (h != (2 * 152)));
981
982 evas_object_scale_set(tb, 1.0);
983
984 /* Relsize */
985 /* relsize means it should adjust itself to the size of the line */
986 buf = "This is an <item relsize=93x152 vsize=full></>.";
987 evas_object_textblock_text_markup_set(tb, buf);
988 evas_object_textblock_size_formatted_get(tb, &w, &h);
989 fail_if((w >= 93) || (h >= 152));
990 evas_textblock_cursor_pos_set(cur, 11);
991 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &ih);
992 fail_if((w > 90) || (h != ih));
993
994 buf = "This is an <item relize=93x152 vsize=ascent></>.";
995 evas_object_textblock_text_markup_set(tb, buf);
996 evas_object_textblock_size_formatted_get(tb, &w, &h);
997 fail_if((w >= 93) || (h >= 152));
998 evas_textblock_cursor_pos_set(cur, 11);
999 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &ih);
1000 fail_if((w > 90) || (h <= ih));
1001
1002 /* Relsize and abs size in the same line, all should be the same size */
1003 buf = "<item relsize=64x64 vsize=ascent href=emoticon/knowing-grin></item><item absize=64x64 vsize=ascent href=emoticon/knowing-grin></item><item relsize=64x64 vsize=ascent href=emoticon/knowing-grin></item>";
1004 evas_object_textblock_text_markup_set(tb, buf);
1005 evas_object_textblock_size_formatted_get(tb, &w, &h);
1006 evas_object_textblock_size_native_get(tb, &nw, &nh);
1007 fail_if((nw != w) || (nh != h));
1008 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
1009 evas_textblock_cursor_char_next(cur);
1010 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w2, &h2);
1011 fail_if((w != w2) || (h != h2));
1012 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h);
1013 evas_textblock_cursor_char_next(cur);
1014 evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w2, &h2);
1015 fail_if((w != w2) || (h != h2));
1016
1017 /* FIXME: Also verify x,y positions of the item. */
1018
1019 /* FIXME We need some item tests that involve line wrapping that make the
1020 * items move between lines that are in different sizes.
1021 * Also, tests that involve wrapping positions with relsized items. We
1022 * want to make sure the item gets a relsize on the correct time (before
1023 * the wrapping, and then is updated after the wrapping) and that
1024 * all the lines have the correct sizes afterwards. */
1025
1026 END_TB_TEST();
1027}
1028END_TEST
1029
1030/* Wrapping tests */
1031START_TEST(evas_textblock_wrapping)
1032{
1033 Evas_Coord bw, bh, w, h, nw, nh;
1034 int i;
1035 START_TB_TEST();
1036 evas_object_textblock_text_markup_set(tb, "a");
1037 evas_object_textblock_size_formatted_get(tb, &bw, &bh);
1038
1039 /* Char wrap */
1040 evas_object_textblock_text_markup_set(tb, "aaaaaaa");
1041 evas_textblock_cursor_format_prepend(cur, "+ wrap=char");
1042 evas_object_resize(tb, bw, bh);
1043 evas_object_textblock_size_formatted_get(tb, &w, &h);
1044 /* Wrap to minimum */
1045 fail_if(w != bw);
1046 fail_if(h <= bh);
1047
1048 /* Mixed - fallback to char wrap */
1049 evas_object_textblock_text_markup_set(tb, "aaaaaaa");
1050 evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed");
1051 evas_object_resize(tb, bw, bh);
1052 evas_object_textblock_size_formatted_get(tb, &w, &h);
1053 /* Wrap to minimum */
1054 fail_if(w != bw);
1055 fail_if(h <= bh);
1056
1057 /* Basic Word wrap */
1058 evas_object_textblock_text_markup_set(tb, "aaaa");
1059 evas_object_textblock_size_formatted_get(tb, &bw, &bh);
1060
1061 evas_object_textblock_text_markup_set(tb, "aaaa aa");
1062 evas_textblock_cursor_format_prepend(cur, "+ wrap=word");
1063 evas_object_resize(tb, bw, bh);
1064 evas_object_textblock_size_formatted_get(tb, &w, &h);
1065 /* Wrap to minimum */
1066 fail_if(w != bw);
1067 fail_if(h <= bh);
1068
1069 /* Mixed - fallback to word wrap */
1070 evas_object_textblock_text_markup_set(tb, "aaaa aa");
1071 evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed");
1072 evas_object_resize(tb, bw + 1, bh);
1073 evas_object_textblock_size_formatted_get(tb, &w, &h);
1074 /* Wrap to minimum */
1075 fail_if(w != bw);
1076 fail_if(h <= bh);
1077
1078 /* Wrap and then expand again. */
1079 evas_object_textblock_text_markup_set(tb, "aaaa aa");
1080 evas_textblock_cursor_format_prepend(cur, "+ wrap=word");
1081 evas_object_resize(tb, bw, bh);
1082 evas_object_textblock_size_formatted_get(tb, &w, &h);
1083 evas_object_textblock_size_native_get(tb, &nw, &nh);
1084 evas_object_resize(tb, nw, nh);
1085 evas_object_textblock_size_formatted_get(tb, &w, &h);
1086 fail_if((w != nw) || (h != nh));
1087
1088 /* Reduce size until reaching the minimum, making sure we don't
1089 * get something wrong along the way */
1090 /* Char wrap */
1091 evas_object_textblock_text_markup_set(tb, "a");
1092 evas_object_textblock_size_formatted_get(tb, &bw, &bh);
1093 evas_object_textblock_text_markup_set(tb,
1094 "aaaa aaaa aaa aa aaa<ps>"
1095 "aaaa aaa aaa aaa aaa<ps>"
1096 "a aaaaa aaaaaaaaaaaaaa<br>aaaaa<ps>"
1097 "aaaaaa"
1098 );
1099 evas_textblock_cursor_format_prepend(cur, "+ wrap=char");
1100 evas_object_textblock_size_native_get(tb, &nw, &nh);
1101
1102 Evas_Coord iw;
1103 for (iw = nw ; iw >= bw ; iw--)
1104 {
1105 evas_object_resize(tb, iw, 1000);
1106 evas_object_textblock_size_formatted_get(tb, &w, &h);
1107 fail_if(w < bw);
1108 fail_if(w > iw);
1109 }
1110 fail_if(w != bw);
1111
1112 /* Word wrap */
1113 evas_object_textblock_text_markup_set(tb, "aaaaaa");
1114 evas_object_textblock_size_formatted_get(tb, &bw, &bh);
1115 evas_object_textblock_text_markup_set(tb,
1116 "aaaa aaaa aaa aa aaa<ps>"
1117 "aaaa aaa aaa aaa aaa<ps>"
1118 "a aaaaa aaaaaa<br>aaaaa<ps>"
1119 "aaaaa"
1120 );
1121 evas_textblock_cursor_format_prepend(cur, "+ wrap=word");
1122 evas_object_textblock_size_native_get(tb, &nw, &nh);
1123
1124 for (iw = nw ; iw >= bw ; iw--)
1125 {
1126 evas_object_resize(tb, iw, 1000);
1127 evas_object_textblock_size_formatted_get(tb, &w, &h);
1128 fail_if(w < bw);
1129 fail_if(w > iw);
1130 }
1131 fail_if(w != bw);
1132
1133 /* Mixed wrap */
1134 evas_object_textblock_text_markup_set(tb, "a");
1135 evas_object_textblock_size_formatted_get(tb, &bw, &bh);
1136 evas_object_textblock_text_markup_set(tb,
1137 "aaaa aaaa aaa aa aaa<ps>"
1138 "aaaa aaa aaa aaa aaa<ps>"
1139 "a aaaaa aaaaaa<br>aaaaa<ps>"
1140 "aaaaa"
1141 );
1142 evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed");
1143 evas_object_textblock_size_native_get(tb, &nw, &nh);
1144
1145 for (iw = nw ; iw >= bw ; iw--)
1146 {
1147 evas_object_resize(tb, iw, 1000);
1148 evas_object_textblock_size_formatted_get(tb, &w, &h);
1149 fail_if(w < bw);
1150 fail_if(w > iw);
1151 }
1152 fail_if(w != bw);
1153
1154 /* Resize, making sure we keep going down in the minimum size. */
1155 char *wrap_style[] = { "+ wrap=word", "+ wrap=char", "+ wrap=mixed" };
1156 int wrap_items = sizeof(wrap_style) / sizeof(*wrap_style);
1157
1158 evas_object_textblock_text_markup_set(tb,
1159 "This is an entry widget in this window that<br>"
1160 "uses markup <b>like this</> for styling and<br>"
1161 "formatting <em>like this</>, as well as<br>"
1162 "<a href=X><link>links in the text</></a>, so enter text<br>"
1163 "in here to edit it. By the way, links are<br>"
1164 "called <a href=anc-02>Anchors</a> so you will need<br>"
1165 "to refer to them this way.<br>"
1166 "<br>"
1167
1168 "Also you can stick in items with (relsize + ascent): "
1169 "<item relsize=16x16 vsize=ascent href=emoticon/evil-laugh></item>"
1170 " (full) "
1171 "<item relsize=16x16 vsize=full href=emoticon/guilty-smile></item>"
1172 " (to the left)<br>"
1173
1174 "Also (size + ascent): "
1175 "<item size=16x16 vsize=ascent href=emoticon/haha></item>"
1176 " (full) "
1177 "<item size=16x16 vsize=full href=emoticon/happy-panting></item>"
1178 " (before this)<br>"
1179
1180 "And as well (absize + ascent): "
1181 "<item absize=64x64 vsize=ascent href=emoticon/knowing-grin></item>"
1182 " (full) "
1183 "<item absize=64x64 vsize=full href=emoticon/not-impressed></item>"
1184 " or even paths to image files on disk too like: "
1185 "<item absize=96x128 vsize=full href=file://%s/images/sky_01.jpg></item>"
1186 " ... end."
1187 );
1188
1189 /* Get minimum size */
1190 evas_object_textblock_size_native_get(tb, &nw, &nh);
1191
1192 for (i = 0 ; i < wrap_items ; i++)
1193 {
1194 evas_textblock_cursor_format_prepend(cur, wrap_style[i]);
1195 evas_object_resize(tb, 0, 0);
1196 evas_object_textblock_size_formatted_get(tb, &bw, &bh);
1197
1198 for (iw = nw ; iw >= bw ; iw--)
1199 {
1200 evas_object_resize(tb, iw, 1000);
1201 evas_object_textblock_size_formatted_get(tb, &w, &h);
1202 fail_if(w < bw);
1203 fail_if(w > iw);
1204 }
1205 fail_if(w != bw);
1206 }
1207
1208
1209 /* Ellipsis */
1210 evas_object_textblock_text_markup_set(tb, "aaaaaaaaaa");
1211 evas_textblock_cursor_format_prepend(cur, "+ ellipsis=1.0");
1212 evas_object_textblock_size_native_get(tb, &nw, &nh);
1213 evas_object_resize(tb, nw / 2, nh);
1214 evas_object_textblock_size_formatted_get(tb, &w, &h);
1215 fail_if((w > (nw / 2)) || (h != nh));
1216
1217 END_TB_TEST();
1218}
1219END_TEST
1220
1221/* Various textblock stuff */
1222START_TEST(evas_textblock_various)
1223{
1224 Evas_Coord w, h, bw, bh;
1225 START_TB_TEST();
1226 const char *buf = "This<ps>textblock<ps>has<ps>a<ps>lot<ps>of<ps>lines<ps>.";
1227 evas_object_textblock_text_markup_set(tb, buf);
1228 evas_object_textblock_size_formatted_get(tb, &w, &h);
1229 /* Move outside of the screen so it'll have to search for the correct
1230 * paragraph and etc. */
1231 evas_object_move(tb, -(w / 2), -(h / 2));
1232
1233 /* Replacement char */
1234 evas_object_textblock_text_markup_set(tb, "*");
1235 evas_object_textblock_size_formatted_get(tb, &bw, &bh);
1236 evas_object_textblock_replace_char_set(tb, "*");
1237 evas_object_textblock_text_markup_set(tb, "|");
1238 evas_object_textblock_size_formatted_get(tb, &w, &h);
1239 fail_if((w != bw) || (h != bh));
1240
1241 /* Items have correct text node information */
1242 evas_object_textblock_text_markup_set(tb, "");
1243 fail_if(!_evas_textblock_check_item_node_link(tb));
1244 evas_object_textblock_text_markup_set(tb, "<ps>");
1245 fail_if(!_evas_textblock_check_item_node_link(tb));
1246 evas_object_textblock_text_markup_set(tb, "a<ps>");
1247 fail_if(!_evas_textblock_check_item_node_link(tb));
1248 evas_object_textblock_text_markup_set(tb, "a<ps>a");
1249 fail_if(!_evas_textblock_check_item_node_link(tb));
1250 evas_object_textblock_text_markup_set(tb, "a<ps>a<ps>");
1251 fail_if(!_evas_textblock_check_item_node_link(tb));
1252 evas_object_textblock_text_markup_set(tb, "a<ps>a<ps>a");
1253 fail_if(!_evas_textblock_check_item_node_link(tb));
1254
1255 END_TB_TEST();
1256}
1257END_TEST
1258
1259/* Various geometries. e.g. range geometry. */
1260START_TEST(evas_textblock_geometries)
1261{
1262 START_TB_TEST();
1263 const char *buf = "This is a <br> test.";
1264 evas_object_textblock_text_markup_set(tb, buf);
1265
1266 /* Single line range */
1267 Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb);
1268 evas_textblock_cursor_pos_set(cur, 0);
1269 evas_textblock_cursor_pos_set(main_cur, 6);
1270
1271 Eina_List *rects, *rects2;
1272 Evas_Textblock_Rectangle *tr, *tr2;
1273 rects = evas_textblock_cursor_range_geometry_get(cur, main_cur);
1274 fail_if(!rects);
1275 rects2 = evas_textblock_cursor_range_geometry_get(main_cur, cur);
1276 fail_if(!rects2);
1277
1278 fail_if(eina_list_count(rects) != 1);
1279 fail_if(eina_list_count(rects2) != 1);
1280
1281 tr = eina_list_data_get(rects);
1282 fail_if((tr->h <= 0) || (tr->w <= 0));
1283 tr2 = eina_list_data_get(rects2);
1284 fail_if((tr2->h <= 0) || (tr2->w <= 0));
1285
1286 fail_if((tr->x != tr2->x) || (tr->y != tr2->y) || (tr->w != tr2->w) ||
1287 (tr->h != tr2->h));
1288
1289 /* Multiline range */
1290 evas_textblock_cursor_pos_set(cur, 0);
1291 evas_textblock_cursor_pos_set(main_cur, 14);
1292
1293 rects = evas_textblock_cursor_range_geometry_get(cur, main_cur);
1294 fail_if(!rects);
1295 rects2 = evas_textblock_cursor_range_geometry_get(main_cur, cur);
1296 fail_if(!rects2);
1297
1298 fail_if(eina_list_count(rects) != 2);
1299 fail_if(eina_list_count(rects2) != 2);
1300
1301 tr = eina_list_data_get(rects);
1302 fail_if((tr->h <= 0) || (tr->w <= 0));
1303 tr2 = eina_list_data_get(rects2);
1304 fail_if((tr2->h <= 0) || (tr2->w <= 0));
1305
1306 fail_if((tr->x != tr2->x) || (tr->y != tr2->y) || (tr->w != tr2->w) ||
1307 (tr->h != tr2->h));
1308
1309 tr = eina_list_data_get(eina_list_next(rects));
1310 fail_if((tr->h <= 0) || (tr->w <= 0));
1311 tr2 = eina_list_data_get(eina_list_next(rects2));
1312 fail_if((tr2->h <= 0) || (tr2->w <= 0));
1313
1314 fail_if((tr->x != tr2->x) || (tr->y != tr2->y) || (tr->w != tr2->w) ||
1315 (tr->h != tr2->h));
1316
1317 /* Check that the second line is positioned below the first */
1318 tr = eina_list_data_get(rects);
1319 tr2 = eina_list_data_get(eina_list_next(rects));
1320 fail_if(tr->y >= tr2->y);
1321
1322 END_TB_TEST();
1323}
1324END_TEST
1325
1326/* Should handle all the text editing. */
1327START_TEST(evas_textblock_editing)
1328{
1329 START_TB_TEST();
1330 const char *buf = "First par.<ps>Second par.";
1331 evas_object_textblock_text_markup_set(tb, buf);
1332 Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb);
1333
1334 /* Check deletion works */
1335 /* Try deleting after the end of the textblock */
1336 {
1337 char *content;
1338 evas_textblock_cursor_paragraph_last(cur);
1339 content = strdup(evas_object_textblock_text_markup_get(tb));
1340 evas_textblock_cursor_char_delete(cur);
1341 fail_if(strcmp(content, evas_object_textblock_text_markup_get(tb)));
1342 free(content);
1343 }
1344
1345 /* Delete the first char */
1346 evas_textblock_cursor_paragraph_first(cur);
1347 evas_textblock_cursor_char_delete(cur);
1348 fail_if(strcmp(evas_object_textblock_text_markup_get(tb),
1349 "irst par.<ps>Second par."));
1350
1351 /* Delete some arbitrary char */
1352 evas_textblock_cursor_char_next(cur);
1353 evas_textblock_cursor_char_next(cur);
1354 evas_textblock_cursor_char_next(cur);
1355 evas_textblock_cursor_char_delete(cur);
1356 fail_if(strcmp(evas_object_textblock_text_markup_get(tb),
1357 "irs par.<ps>Second par."));
1358
1359 /* Delete a range */
1360 evas_textblock_cursor_pos_set(main_cur, 1);
1361 evas_textblock_cursor_pos_set(cur, 6);
1362 evas_textblock_cursor_range_delete(cur, main_cur);
1363 fail_if(strcmp(evas_object_textblock_text_markup_get(tb),
1364 "ir.<ps>Second par."));
1365 evas_textblock_cursor_paragraph_char_first(main_cur);
1366 evas_textblock_cursor_paragraph_char_last(cur);
1367 evas_textblock_cursor_char_next(cur);
1368 evas_textblock_cursor_range_delete(cur, main_cur);
1369 fail_if(strcmp(evas_object_textblock_text_markup_get(tb),
1370 "Second par."));
1371
1372 evas_object_textblock_text_markup_set(tb, buf);
1373 evas_textblock_cursor_paragraph_last(main_cur);
1374 evas_object_textblock_text_markup_prepend(main_cur, "Test<b>bla</b>bla.");
1375 evas_textblock_cursor_paragraph_last(cur);
1376 evas_textblock_cursor_paragraph_char_first(main_cur);
1377 evas_textblock_cursor_range_delete(cur, main_cur);
1378 fail_if(strcmp(evas_object_textblock_text_markup_get(tb),
1379 "First par.<ps>"));
1380
1381 /* Merging paragraphs */
1382 evas_object_textblock_text_markup_set(tb, buf);
1383 evas_textblock_cursor_paragraph_char_last(cur);
1384 evas_textblock_cursor_copy(cur, main_cur);
1385 evas_textblock_cursor_char_delete(cur);
1386
1387 evas_textblock_cursor_paragraph_first(cur);
1388 fail_if(evas_textblock_cursor_paragraph_next(cur));
1389
1390 /* Split paragraphs */
1391 evas_textblock_cursor_format_prepend(cur, "ps");
1392
1393 evas_textblock_cursor_paragraph_first(cur);
1394 fail_if(!evas_textblock_cursor_paragraph_next(cur));
1395 fail_if(evas_textblock_cursor_paragraph_next(cur));
1396
1397 /* Merge paragraphs using range deletion */
1398 evas_object_textblock_text_markup_set(tb, buf);
1399 evas_textblock_cursor_paragraph_first(cur);
1400 evas_textblock_cursor_paragraph_char_last(cur);
1401 evas_textblock_cursor_copy(cur, main_cur);
1402 evas_textblock_cursor_char_prev(cur);
1403 evas_textblock_cursor_char_next(main_cur);
1404
1405 evas_textblock_cursor_range_delete(cur, main_cur);
1406 evas_textblock_cursor_paragraph_first(cur);
1407 fail_if(evas_textblock_cursor_paragraph_next(cur));
1408
1409 /* FIXME: Also add text appending/prepending */
1410
1411 END_TB_TEST();
1412}
1413END_TEST
1414
1415/* Text getters */
1416START_TEST(evas_textblock_text_getters)
1417{
1418 START_TB_TEST();
1419 const char *buf = "This is a <br> test.<ps>"
1420 "טקסט בעברית<ps>and now in english.";
1421 evas_object_textblock_text_markup_set(tb, buf);
1422 evas_textblock_cursor_paragraph_first(cur);
1423
1424 fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur),
1425 "This is a <br> test."));
1426
1427 evas_textblock_cursor_paragraph_next(cur);
1428 fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur),
1429 "טקסט בעברית"));
1430
1431 evas_textblock_cursor_paragraph_next(cur);
1432 fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur),
1433 "and now in english."));
1434
1435 /* Range get */
1436 Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb);
1437 evas_textblock_cursor_pos_set(main_cur, 2);
1438 evas_textblock_cursor_pos_set(cur, 2);
1439 fail_if(*evas_textblock_cursor_range_text_get(main_cur, cur,
1440 EVAS_TEXTBLOCK_TEXT_MARKUP));
1441
1442 evas_textblock_cursor_pos_set(main_cur, 2);
1443 evas_textblock_cursor_pos_set(cur, 6);
1444 fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur,
1445 EVAS_TEXTBLOCK_TEXT_MARKUP), "is i"));
1446
1447 evas_textblock_cursor_pos_set(main_cur, 5);
1448 evas_textblock_cursor_pos_set(cur, 14);
1449 fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur,
1450 EVAS_TEXTBLOCK_TEXT_MARKUP), "is a <br> te"));
1451
1452 evas_textblock_cursor_pos_set(main_cur, 14);
1453 evas_textblock_cursor_pos_set(cur, 20);
1454 fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur,
1455 EVAS_TEXTBLOCK_TEXT_MARKUP), "st.<ps>טק"));
1456
1457 evas_textblock_cursor_pos_set(main_cur, 14);
1458 evas_textblock_cursor_pos_set(cur, 32);
1459 fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur,
1460 EVAS_TEXTBLOCK_TEXT_MARKUP), "st.<ps>טקסט בעברית<ps>an"));
1461
1462 /* Backward range get */
1463 evas_textblock_cursor_pos_set(main_cur, 2);
1464 evas_textblock_cursor_pos_set(cur, 2);
1465 fail_if(*evas_textblock_cursor_range_text_get(cur, main_cur,
1466 EVAS_TEXTBLOCK_TEXT_MARKUP));
1467
1468 evas_textblock_cursor_pos_set(main_cur, 2);
1469 evas_textblock_cursor_pos_set(cur, 6);
1470 fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur,
1471 EVAS_TEXTBLOCK_TEXT_MARKUP), "is i"));
1472
1473 evas_textblock_cursor_pos_set(main_cur, 5);
1474 evas_textblock_cursor_pos_set(cur, 14);
1475 fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur,
1476 EVAS_TEXTBLOCK_TEXT_MARKUP), "is a <br> te"));
1477
1478 evas_textblock_cursor_pos_set(main_cur, 14);
1479 evas_textblock_cursor_pos_set(cur, 20);
1480 fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur,
1481 EVAS_TEXTBLOCK_TEXT_MARKUP), "st.<ps>טק"));
1482
1483 evas_textblock_cursor_pos_set(main_cur, 14);
1484 evas_textblock_cursor_pos_set(cur, 32);
1485 fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur,
1486 EVAS_TEXTBLOCK_TEXT_MARKUP), "st.<ps>טקסט בעברית<ps>an"));
1487
1488 /* Uninit cursors and other weird cases */
1489 evas_object_textblock_clear(tb);
1490 evas_textblock_cursor_copy(main_cur, cur);
1491 evas_textblock_cursor_text_prepend(main_cur, "aaa");
1492 fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur,
1493 EVAS_TEXTBLOCK_TEXT_MARKUP), "aaa"));
1494
1495 END_TB_TEST();
1496}
1497END_TEST
1498
1499/* Formats */
1500START_TEST(evas_textblock_formats)
1501{
1502 START_TB_TEST();
1503 const char *buf = "Th<b>i<font_size=15 wrap=none>s i</font_size=13>s</> a <br> te<ps>st<item></>.";
1504 const Evas_Object_Textblock_Node_Format *fnode;
1505 evas_object_textblock_text_markup_set(tb, buf);
1506
1507 /* Walk from the start */
1508 fnode = evas_textblock_node_format_first_get(tb);
1509 fail_if(!fnode);
1510 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
1511
1512 fnode = evas_textblock_node_format_next_get(fnode);
1513 fail_if(!fnode);
1514 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
1515 "+ font_size=15 wrap=none"));
1516
1517 fnode = evas_textblock_node_format_next_get(fnode);
1518 fail_if(!fnode);
1519 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
1520 "- font_size=13"));
1521
1522 fnode = evas_textblock_node_format_next_get(fnode);
1523 fail_if(!fnode);
1524 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- "));
1525
1526 fnode = evas_textblock_node_format_next_get(fnode);
1527 fail_if(!fnode);
1528 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "br"));
1529
1530 fnode = evas_textblock_node_format_next_get(fnode);
1531 fail_if(!fnode);
1532 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "ps"));
1533
1534 fnode = evas_textblock_node_format_next_get(fnode);
1535 fail_if(!fnode);
1536 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ item"));
1537
1538 fnode = evas_textblock_node_format_next_get(fnode);
1539 fail_if(!fnode);
1540 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- "));
1541
1542 fnode = evas_textblock_node_format_next_get(fnode);
1543 fail_if(fnode);
1544
1545 /* Walk backwards */
1546 fnode = evas_textblock_node_format_last_get(tb);
1547 fail_if(!fnode);
1548 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- "));
1549
1550 fnode = evas_textblock_node_format_prev_get(fnode);
1551 fail_if(!fnode);
1552 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ item"));
1553
1554 fnode = evas_textblock_node_format_prev_get(fnode);
1555 fail_if(!fnode);
1556 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "ps"));
1557
1558 fnode = evas_textblock_node_format_prev_get(fnode);
1559 fail_if(!fnode);
1560 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "br"));
1561
1562 fnode = evas_textblock_node_format_prev_get(fnode);
1563 fail_if(!fnode);
1564 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- "));
1565
1566 fnode = evas_textblock_node_format_prev_get(fnode);
1567 fail_if(!fnode);
1568 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
1569 "- font_size=13"));
1570
1571 fnode = evas_textblock_node_format_prev_get(fnode);
1572 fail_if(!fnode);
1573 fail_if(strcmp(evas_textblock_node_format_text_get(fnode),
1574 "+ font_size=15 wrap=none"));
1575
1576 fnode = evas_textblock_node_format_prev_get(fnode);
1577 fail_if(!fnode);
1578 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
1579
1580 fnode = evas_textblock_node_format_prev_get(fnode);
1581 fail_if(fnode);
1582
1583 /* Cursor and format detection */
1584 fnode = evas_textblock_node_format_first_get(tb);
1585 fail_if(!fnode);
1586 evas_textblock_cursor_at_format_set(cur, fnode);
1587 fail_if(evas_textblock_cursor_format_is_visible_get(cur));
1588
1589 fnode = evas_textblock_node_format_next_get(fnode);
1590 fail_if(!fnode);
1591 evas_textblock_cursor_at_format_set(cur, fnode);
1592 fail_if(evas_textblock_cursor_format_is_visible_get(cur));
1593
1594 fnode = evas_textblock_node_format_next_get(fnode);
1595 fail_if(!fnode);
1596 evas_textblock_cursor_at_format_set(cur, fnode);
1597 fail_if(evas_textblock_cursor_format_is_visible_get(cur));
1598
1599 fnode = evas_textblock_node_format_next_get(fnode);
1600 fail_if(!fnode);
1601 evas_textblock_cursor_at_format_set(cur, fnode);
1602 fail_if(evas_textblock_cursor_format_is_visible_get(cur));
1603
1604 fnode = evas_textblock_node_format_next_get(fnode);
1605 fail_if(!fnode);
1606 evas_textblock_cursor_at_format_set(cur, fnode);
1607 fail_if(!evas_textblock_cursor_format_is_visible_get(cur));
1608
1609 fnode = evas_textblock_node_format_next_get(fnode);
1610 fail_if(!fnode);
1611 evas_textblock_cursor_at_format_set(cur, fnode);
1612 fail_if(!evas_textblock_cursor_format_is_visible_get(cur));
1613
1614 size_t i = 0;
1615 evas_textblock_cursor_paragraph_first(cur);
1616 do
1617 {
1618 switch (i)
1619 {
1620 case 2:
1621 case 3:
1622 case 6:
1623 case 7:
1624 case 10:
1625 case 14:
1626 case 17:
1627 case 18:
1628 fail_if(!evas_textblock_cursor_is_format(cur));
1629 break;
1630 default:
1631 fail_if(evas_textblock_cursor_is_format(cur));
1632 fail_if(evas_textblock_cursor_format_is_visible_get(cur));
1633 break;
1634 }
1635 i++;
1636 }
1637 while (evas_textblock_cursor_char_next(cur));
1638
1639 /* Format text nodes invalidation */
1640 {
1641 Evas_Coord w, h, nw, nh;
1642 evas_object_textblock_text_markup_set(tb, "Test");
1643 evas_object_textblock_size_formatted_get(tb, &w, &h);
1644 evas_textblock_cursor_paragraph_first(cur);
1645 evas_textblock_cursor_format_prepend(cur, "+ font_size=40");
1646 evas_object_textblock_size_formatted_get(tb, &nw, &nh);
1647 fail_if((w >= nw) || (h >= nh));
1648 }
1649 /* FIXME: Should extend invalidation tests. */
1650
1651 /* Various formats, just verify there's no seg, we can't really
1652 * verify them visually, well, we can some of them. Possibly in the
1653 * future we will */
1654 evas_object_textblock_text_markup_set(tb,
1655 "<font_size=40>font_size=40</><ps>"
1656 "<color=#F210B3FF>color=#F210B3FF</><ps>"
1657 "<underline=single underline_color=#A2B3C4>underline=single underline_color=#A2B3C4</><ps>"
1658 "<underline=double underline_color=#F00 underline2_color=#00F>underline=double underline_color=#F00 underline2_color=#00F</><ps>"
1659 "<underline=dashed underline_dash_color=#0F0 underline_dash_width=2 underline_dash_gap=1>underline=dashed underline_dash_color=#0F0 underline_dash_width=2 underline_dash_gap=1</><ps>"
1660 "<style=outline outline_color=#F0FA>style=outline outline_color=#F0FA</><ps>"
1661 "<style=shadow shadow_color=#F0F>style=shadow shadow_color=#F0F</><ps>"
1662 "<style=glow glow_color=#BBB>style=glow glow_color=#BBB</><ps>"
1663 "<style=glow glow2_color=#0F0>style=glow glow2_color=#0F0</><ps>"
1664 "<style=glow color=#fff glow2_color=#fe87 glow_color=#f214>style=glow color=#fff glow2_color=#fe87 glow_color=#f214</><ps>"
1665 "<backing=on backing_color=#00F>backing=on backing_color=#00F</><ps>"
1666 "<strikethrough=on strikethrough_color=#FF0>strikethrough=on strikethrough_color=#FF0</><ps>"
1667 "<align=right>align=right</><ps>"
1668 "<backing=on backing_color=#F008 valign=0.0>valign=0.0</><ps>"
1669 "<backing=on backing_color=#0F08 tabstops=50>tabstops=<\\t></>50</><ps>"
1670 "<backing=on backing_color=#00F8 linesize=40>linesize=40</><ps>"
1671 "<backing=on backing_color=#F0F8 linerelsize=200%>linerelsize=200%</><ps>"
1672 "<backing=on backing_color=#0FF8 linegap=20>linegap=20</><ps>"
1673 "<backing=on backing_color=#FF08 linerelgap=100%>linerelgap=100%</><ps>");
1674
1675 /* Force a relayout */
1676 evas_object_textblock_size_formatted_get(tb, NULL, NULL);
1677
1678 /* Removing paired formats. */
1679 evas_object_textblock_text_markup_set(tb, "<a>aa<b>bb</b>cc</a>");
1680 fnode = evas_textblock_node_format_first_get(tb);
1681 evas_textblock_node_format_remove_pair(tb, (Evas_Object_Textblock_Node_Format *) fnode);
1682 fnode = evas_textblock_node_format_first_get(tb);
1683 fail_if(!fnode);
1684 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b"));
1685 fnode = evas_textblock_node_format_next_get(fnode);
1686 fail_if(!fnode);
1687 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b"));
1688
1689 evas_object_textblock_text_markup_set(tb, "<a>aa<b>bb</b>cc</a>");
1690 fnode = evas_textblock_node_format_first_get(tb);
1691 fnode = evas_textblock_node_format_next_get(fnode);
1692 evas_textblock_node_format_remove_pair(tb, (Evas_Object_Textblock_Node_Format *) fnode);
1693 fnode = evas_textblock_node_format_first_get(tb);
1694 fail_if(!fnode);
1695 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ a"));
1696 fnode = evas_textblock_node_format_next_get(fnode);
1697 fail_if(!fnode);
1698 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- a"));
1699
1700 /* Format list get */
1701 evas_object_textblock_text_markup_set(tb, "<a>a</>a<item>b</>"
1702 "b<item>b</>c<a>c</>");
1703 const Eina_List *flist = evas_textblock_node_format_list_get(tb, "a");
1704 const Eina_List *itr;
1705 EINA_LIST_FOREACH(flist, itr, fnode)
1706 {
1707 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ a"));
1708 }
1709
1710 flist = evas_textblock_node_format_list_get(tb, "item");
1711 EINA_LIST_FOREACH(flist, itr, fnode)
1712 {
1713 fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ item"));
1714 }
1715
1716 /* Make sure we get all the types of visible formats correctly. */
1717 evas_object_textblock_text_markup_set(tb, "<ps>a<br>a<tab>a<item></>");
1718 fail_if(strcmp(evas_textblock_node_format_text_get(
1719 evas_textblock_cursor_format_get(cur)), "ps"));
1720 fail_if(strcmp(evas_textblock_cursor_content_get(cur), "<ps>"));
1721 fail_if(!evas_textblock_cursor_format_is_visible_get(cur));
1722 fail_if(!evas_textblock_cursor_char_next(cur));
1723 fail_if(!evas_textblock_cursor_char_next(cur));
1724 fail_if(strcmp(evas_textblock_node_format_text_get(
1725 evas_textblock_cursor_format_get(cur)), "br"));
1726 fail_if(strcmp(evas_textblock_cursor_content_get(cur), "<br>"));
1727 fail_if(!evas_textblock_cursor_format_is_visible_get(cur));
1728 fail_if(!evas_textblock_cursor_char_next(cur));
1729 fail_if(!evas_textblock_cursor_char_next(cur));
1730 fail_if(strcmp(evas_textblock_node_format_text_get(
1731 evas_textblock_cursor_format_get(cur)), "tab"));
1732 fail_if(strcmp(evas_textblock_cursor_content_get(cur), "<tab>"));
1733 fail_if(!evas_textblock_cursor_format_is_visible_get(cur));
1734 fail_if(!evas_textblock_cursor_char_next(cur));
1735 fail_if(!evas_textblock_cursor_char_next(cur));
1736 fail_if(strcmp(evas_textblock_node_format_text_get(
1737 evas_textblock_cursor_format_get(cur)), "+ item"));
1738 fail_if(strcmp(evas_textblock_cursor_content_get(cur), "<item>"));
1739 fail_if(!evas_textblock_cursor_format_is_visible_get(cur));
1740
1741 END_TB_TEST();
1742}
1743END_TEST
1744
1745/* Different text styles, for example, shadow. */
1746START_TEST(evas_textblock_style)
1747{
1748 Evas_Coord w, h, nw, nh;
1749 Evas_Coord l, r, t, b;
1750 START_TB_TEST();
1751 Evas_Textblock_Style *newst;
1752 const char *buf = "Test<ps>Test2<ps>נסיון";
1753 evas_object_textblock_text_markup_set(tb, buf);
1754 fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
1755
1756 evas_object_textblock_size_formatted_get(tb, &w, &h);
1757 newst = evas_textblock_style_new();
1758 fail_if(!newst);
1759 evas_textblock_style_set(newst,
1760 "DEFAULT='font=Sans font_size=20 color=#000 text_class=entry'"
1761 "br='\n'"
1762 "ps='ps'"
1763 "tab='\t'");
1764 evas_object_textblock_style_set(tb, newst);
1765 evas_object_textblock_size_formatted_get(tb, &nw, &nh);
1766 fail_if((w >= nw) || (h >= nh));
1767
1768 /* Style padding. */
1769 evas_object_textblock_text_markup_set(tb, "Test");
1770 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1771 fail_if((l != 0) || (r != 0) || (t != 0) || (b != 0));
1772
1773 evas_object_textblock_text_markup_set(tb, "<style=shadow>Test</>");
1774 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1775 fail_if((l != 0) || (r != 1) || (t != 0) || (b != 1));
1776
1777 evas_object_textblock_text_markup_set(tb, "<style=outline>Test</>");
1778 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1779 fail_if((l != 1) || (r != 1) || (t != 1) || (b != 1));
1780
1781 evas_object_textblock_text_markup_set(tb, "<style=soft_outline>Test</>");
1782 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1783 fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2));
1784
1785 evas_object_textblock_text_markup_set(tb, "<style=glow>Test</>");
1786 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1787 fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2));
1788
1789 evas_object_textblock_text_markup_set(tb, "<style=outline_shadow>Test</>");
1790 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1791 fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2));
1792
1793 evas_object_textblock_text_markup_set(tb, "<style=far_shadow>Test</>");
1794 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1795 fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2));
1796
1797 evas_object_textblock_text_markup_set(tb, "<style=outline_soft_shadow>Test</>");
1798 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1799 fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3));
1800
1801 evas_object_textblock_text_markup_set(tb, "<style=soft_shadow>Test</>");
1802 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1803 fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3));
1804
1805 evas_object_textblock_text_markup_set(tb, "<style=far_soft_shadow>Test</>");
1806 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1807 fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4));
1808
1809 /* Mixed style padding */
1810 evas_object_textblock_text_markup_set(tb,
1811 "<style=far_shadow>Test</><style=far_soft_shadow>Test</>");
1812 evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
1813 fail_if((l != 1) || (r != 4) || (t != 1) || (b != 4));
1814
1815 END_TB_TEST();
1816}
1817END_TEST
1818
1819/* Various setters and getters */
1820START_TEST(evas_textblock_set_get)
1821{
1822 START_TB_TEST();
1823 const char *buf = "";
1824 evas_object_textblock_text_markup_set(tb, buf);
1825 fail_if(strcmp(evas_textblock_style_get(st), style_buf));
1826 fail_if(evas_object_textblock_style_get(tb) != st);
1827 evas_object_textblock_replace_char_set(tb, "|");
1828 fail_if(strcmp(evas_object_textblock_replace_char_get(tb), "|"));
1829 evas_object_textblock_replace_char_set(tb, "ש");
1830 fail_if(strcmp(evas_object_textblock_replace_char_get(tb), "ש"));
1831
1832 evas_object_textblock_valign_set(tb, -1.0);
1833 fail_if(evas_object_textblock_valign_get(tb) != 0.0);
1834 evas_object_textblock_valign_set(tb, 0.0);
1835 fail_if(evas_object_textblock_valign_get(tb) != 0.0);
1836 evas_object_textblock_valign_set(tb, 0.432);
1837 fail_if(evas_object_textblock_valign_get(tb) != 0.432);
1838 evas_object_textblock_valign_set(tb, 1.0);
1839 fail_if(evas_object_textblock_valign_get(tb) != 1.0);
1840 evas_object_textblock_valign_set(tb, 1.5);
1841 fail_if(evas_object_textblock_valign_get(tb) != 1.0);
1842
1843 evas_object_textblock_bidi_delimiters_set(tb, ",.|");
1844 fail_if(strcmp(evas_object_textblock_bidi_delimiters_get(tb), ",.|"));
1845 evas_object_textblock_bidi_delimiters_set(tb, ",|");
1846 fail_if(strcmp(evas_object_textblock_bidi_delimiters_get(tb), ",|"));
1847 evas_object_textblock_bidi_delimiters_set(tb, NULL);
1848 fail_if(evas_object_textblock_bidi_delimiters_get(tb));
1849 evas_object_textblock_bidi_delimiters_set(tb, ",|");
1850 fail_if(strcmp(evas_object_textblock_bidi_delimiters_get(tb), ",|"));
1851
1852 /* Hinting */
1853 evas_object_textblock_text_markup_set(tb, "This is<ps>a test<br>bla");
1854 /* Force relayout */
1855 evas_object_textblock_size_formatted_get(tb, NULL, NULL);
1856 evas_font_hinting_set(evas, EVAS_FONT_HINTING_NONE);
1857 evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO);
1858 evas_font_hinting_set(evas, EVAS_FONT_HINTING_BYTECODE);
1859 END_TB_TEST();
1860}
1861END_TEST
1862
1863/* Aux evas stuff, such as scale. */
1864START_TEST(evas_textblock_evas)
1865{
1866 Evas_Coord w, h, sw, sh;
1867 START_TB_TEST();
1868 const char *buf = "Test";
1869 evas_object_textblock_text_markup_set(tb, buf);
1870 evas_object_textblock_size_formatted_get(tb, &w, &h);
1871 evas_object_scale_set(tb, 3.0);
1872 evas_object_textblock_size_formatted_get(tb, &sw, &sh);
1873 fail_if((sw <= w) || (sh <= h));
1874
1875 evas_object_scale_set(tb, 0.5);
1876 evas_object_textblock_size_formatted_get(tb, &sw, &sh);
1877 fail_if((sw >= w) || (sh >= h));
1878
1879 END_TB_TEST();
1880}
1881END_TEST
1882
1883/* All the string escaping stuff */
1884START_TEST(evas_textblock_escaping)
1885{
1886 int len;
1887 START_TB_TEST();
1888 fail_if(strcmp(evas_textblock_escape_string_get("&amp;"), "&"));
1889 fail_if(strcmp(evas_textblock_string_escape_get("&", &len), "&amp;"));
1890 fail_if(len != 1);
1891
1892 fail_if(strcmp(evas_textblock_escape_string_get("&middot;"), "\xc2\xb7"));
1893 fail_if(strcmp(evas_textblock_string_escape_get("\xc2\xb7", &len),
1894 "&middot;"));
1895 fail_if(len != 2);
1896
1897 fail_if(strcmp(evas_textblock_escape_string_get("&#x1f459;"),
1898 "\xF0\x9F\x91\x99"));
1899 fail_if(strcmp(evas_textblock_escape_string_get("&#128089;"),
1900 "\xF0\x9F\x91\x99"));
1901
1902 fail_if(evas_textblock_escape_string_get("&middot;aa"));
1903 const char *tmp = "&middot;aa";
1904 fail_if(strcmp(evas_textblock_escape_string_range_get(tmp, tmp + 8),
1905 "\xc2\xb7"));
1906 fail_if(evas_textblock_escape_string_range_get(tmp, tmp + 9));
1907 fail_if(evas_textblock_escape_string_range_get(tmp, tmp + 7));
1908 fail_if(evas_textblock_escape_string_range_get(tmp, tmp + 5));
1909
1910 const char *buf = "This &middot; is";
1911 evas_object_textblock_text_markup_set(tb, buf);
1912 fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
1913
1914 buf = "This &nbsp; is";
1915 evas_object_textblock_text_markup_set(tb, buf);
1916 fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf));
1917
1918 END_TB_TEST();
1919}
1920END_TEST
1921
1922START_TEST(evas_textblock_size)
1923{
1924 START_TB_TEST();
1925 Evas_Coord w, h, h2, nw, nh;
1926 const char *buf = "This is a <br> test.<br>גם בעברית";
1927 /* When wrapping is off, native size should be the same as formatted
1928 * size */
1929
1930 evas_object_textblock_size_formatted_get(tb, &w, &h);
1931 evas_object_textblock_size_native_get(tb, &nw, &nh);
1932 fail_if((w != nw) || (h != nh));
1933 fail_if(w != 0);
1934
1935 evas_object_textblock_text_markup_set(tb, "a<br>a");
1936 evas_object_textblock_size_formatted_get(tb, &w, &h2);
1937 evas_object_textblock_size_native_get(tb, &nw, &nh);
1938 fail_if((w != nw) || (h2 != nh));
1939
1940 /* Two lines == double the height */
1941 fail_if(h * 2 != h2);
1942
1943 evas_object_textblock_text_markup_set(tb, buf);
1944
1945 evas_object_textblock_size_formatted_get(tb, &w, &h);
1946 evas_object_textblock_size_native_get(tb, &nw, &nh);
1947 fail_if((w != nw) || (h != nh));
1948 fail_if(w <= 0);
1949
1950 /* FIXME: There is a lot more to be done. */
1951 END_TB_TEST();
1952}
1953END_TEST
1954
1955void evas_test_textblock(TCase *tc)
1956{
1957 tcase_add_test(tc, evas_textblock_simple);
1958 tcase_add_test(tc, evas_textblock_cursor);
1959 tcase_add_test(tc, evas_textblock_size);
1960 tcase_add_test(tc, evas_textblock_editing);
1961 tcase_add_test(tc, evas_textblock_style);
1962 tcase_add_test(tc, evas_textblock_evas);
1963 tcase_add_test(tc, evas_textblock_text_getters);
1964 tcase_add_test(tc, evas_textblock_formats);
1965 tcase_add_test(tc, evas_textblock_format_removal);
1966 tcase_add_test(tc, evas_textblock_escaping);
1967 tcase_add_test(tc, evas_textblock_set_get);
1968 tcase_add_test(tc, evas_textblock_geometries);
1969 tcase_add_test(tc, evas_textblock_various);
1970 tcase_add_test(tc, evas_textblock_wrapping);
1971 tcase_add_test(tc, evas_textblock_items);
1972}
1973
diff --git a/libraries/evas/src/tests/evas_tests_helpers.h b/libraries/evas/src/tests/evas_tests_helpers.h
new file mode 100644
index 0000000..2ed0789
--- /dev/null
+++ b/libraries/evas/src/tests/evas_tests_helpers.h
@@ -0,0 +1,40 @@
1#ifndef EVAS_TEST_HELPERS_H
2#define EVAS_TEST_HELPERS_H
3
4/* FIXME: Currently depends on the buffer engine, should we do anything
5 * fancier? */
6
7#define EVAS_TEST_INIT_EVAS() _setup_evas()
8
9#define EVAS_TEST_FREE_EVAS() \
10do \
11{ \
12 evas_textblock_cursor_free(cur); \
13 evas_object_del(tb); \
14 evas_textblock_style_free(st); \
15 evas_free(evas); \
16 evas_shutdown(); \
17} \
18while (0)
19
20static Evas *
21_setup_evas()
22{
23 Evas *evas;
24 Evas_Engine_Info *einfo;
25
26 evas_init();
27 evas = evas_new();
28
29 evas_output_method_set(evas, evas_render_method_lookup("buffer"));
30 einfo = evas_engine_info_get(evas);
31 evas_engine_info_set(evas, einfo);
32
33 evas_output_size_set(evas, 500, 500);
34 evas_output_viewport_set(evas, 0, 0, 500, 500);
35
36 return evas;
37}
38
39#endif
40