From dd7595a3475407a7fa96a97393bae8c5220e8762 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Wed, 4 Jan 2012 18:41:13 +1000 Subject: 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. --- libraries/evas/src/tests/Makefile.am | 29 + libraries/evas/src/tests/Makefile.in | 693 +++++++++ libraries/evas/src/tests/evas_suite.c | 104 ++ libraries/evas/src/tests/evas_suite.h | 12 + libraries/evas/src/tests/evas_test_callbacks.c | 135 ++ libraries/evas/src/tests/evas_test_init.c | 21 + libraries/evas/src/tests/evas_test_text.c | 493 ++++++ libraries/evas/src/tests/evas_test_textblock.c | 1973 ++++++++++++++++++++++++ libraries/evas/src/tests/evas_tests_helpers.h | 40 + 9 files changed, 3500 insertions(+) create mode 100644 libraries/evas/src/tests/Makefile.am create mode 100644 libraries/evas/src/tests/Makefile.in create mode 100644 libraries/evas/src/tests/evas_suite.c create mode 100644 libraries/evas/src/tests/evas_suite.h create mode 100644 libraries/evas/src/tests/evas_test_callbacks.c create mode 100644 libraries/evas/src/tests/evas_test_init.c create mode 100644 libraries/evas/src/tests/evas_test_text.c create mode 100644 libraries/evas/src/tests/evas_test_textblock.c create mode 100644 libraries/evas/src/tests/evas_tests_helpers.h (limited to 'libraries/evas/src/tests') 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 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/lib \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_builddir)/src/lib \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +@EINA_CFLAGS@ \ +@CHECK_CFLAGS@ + +if EFL_ENABLE_TESTS + +check_PROGRAMS = evas_suite + +evas_suite_SOURCES = \ +evas_suite.c \ +evas_test_init.c \ +evas_test_textblock.c \ +evas_test_text.c \ +evas_test_callbacks.c \ +evas_tests_helpers.h \ +evas_suite.h + +evas_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ + +endif 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 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@EFL_ENABLE_TESTS_TRUE@check_PROGRAMS = evas_suite$(EXEEXT) +subdir = src/tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \ + $(top_srcdir)/m4/efl_coverage.m4 \ + $(top_srcdir)/m4/efl_doxygen.m4 \ + $(top_srcdir)/m4/efl_fnmatch.m4 \ + $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \ + $(top_srcdir)/m4/evas_check_engine.m4 \ + $(top_srcdir)/m4/evas_check_loader.m4 \ + $(top_srcdir)/m4/evas_converter.m4 \ + $(top_srcdir)/m4/evas_dither.m4 \ + $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__evas_suite_SOURCES_DIST = evas_suite.c evas_test_init.c \ + evas_test_textblock.c evas_test_text.c evas_test_callbacks.c \ + evas_tests_helpers.h evas_suite.h +@EFL_ENABLE_TESTS_TRUE@am_evas_suite_OBJECTS = evas_suite.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ evas_test_init.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ evas_test_textblock.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ evas_test_text.$(OBJEXT) \ +@EFL_ENABLE_TESTS_TRUE@ evas_test_callbacks.$(OBJEXT) +evas_suite_OBJECTS = $(am_evas_suite_OBJECTS) +@EFL_ENABLE_TESTS_TRUE@evas_suite_DEPENDENCIES = \ +@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libevas.la +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(evas_suite_SOURCES) +DIST_SOURCES = $(am__evas_suite_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@ +ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@ +EDB_CFLAGS = @EDB_CFLAGS@ +EDB_LIBS = @EDB_LIBS@ +EDJE_CFLAGS = @EDJE_CFLAGS@ +EDJE_LIBS = @EDJE_LIBS@ +EET_CFLAGS = @EET_CFLAGS@ +EET_LIBS = @EET_LIBS@ +EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@ +EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@ +EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@ +EGREP = @EGREP@ +EINA_CFLAGS = @EINA_CFLAGS@ +EINA_LIBS = @EINA_LIBS@ +EVAS_CFLAGS = @EVAS_CFLAGS@ +EVAS_LIBS = @EVAS_LIBS@ +EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@ +EVIL_CFLAGS = @EVIL_CFLAGS@ +EVIL_LIBS = @EVIL_LIBS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@ +FRIBIDI_LIBS = @FRIBIDI_LIBS@ +GL_EET_CFLAGS = @GL_EET_CFLAGS@ +GL_EET_LIBS = @GL_EET_LIBS@ +GREP = @GREP@ +HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@ +HARFBUZZ_LIBS = @HARFBUZZ_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@ +LINEBREAK_LIBS = @LINEBREAK_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MODULE_ARCH = @MODULE_ARCH@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ +PIXMAN_LIBS = @PIXMAN_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PNG_CFLAGS = @PNG_CFLAGS@ +PNG_LIBS = @PNG_LIBS@ +RANLIB = @RANLIB@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LINK = @SHM_OPEN_LINK@ +STRIP = @STRIP@ +SVG_CFLAGS = @SVG_CFLAGS@ +SVG_LIBS = @SVG_LIBS@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VERSION = @VERSION@ +VMAJ = @VMAJ@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ +XCB_CFLAGS = @XCB_CFLAGS@ +XCB_GL_CFLAGS = @XCB_GL_CFLAGS@ +XCB_GL_LIBS = @XCB_GL_LIBS@ +XCB_LIBS = @XCB_LIBS@ +XEXT_CFLAGS = @XEXT_CFLAGS@ +XEXT_LIBS = @XEXT_LIBS@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_OBJC = @ac_ct_OBJC@ +altivec_cflags = @altivec_cflags@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dlopen_libs = @dlopen_libs@ +docdir = @docdir@ +dvidir = @dvidir@ +edje_cc = @edje_cc@ +efl_doxygen = @efl_doxygen@ +efl_have_doxygen = @efl_have_doxygen@ +evas_engine_buffer_cflags = @evas_engine_buffer_cflags@ +evas_engine_buffer_libs = @evas_engine_buffer_libs@ +evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@ +evas_engine_direct3d_libs = @evas_engine_direct3d_libs@ +evas_engine_directfb_cflags = @evas_engine_directfb_cflags@ +evas_engine_directfb_libs = @evas_engine_directfb_libs@ +evas_engine_fb_cflags = @evas_engine_fb_cflags@ +evas_engine_fb_libs = @evas_engine_fb_libs@ +evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@ +evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@ +evas_engine_gl_common_libs = @evas_engine_gl_common_libs@ +evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@ +evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@ +evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@ +evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@ +evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@ +evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@ +evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@ +evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@ +evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@ +evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@ +evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@ +evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@ +evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@ +evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@ +evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@ +evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@ +evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@ +evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@ +evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@ +evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@ +evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@ +evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@ +evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@ +evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@ +evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@ +evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ +evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ +evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ +evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ +evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ +evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ +evas_image_loader_edb_libs = @evas_image_loader_edb_libs@ +evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@ +evas_image_loader_eet_libs = @evas_image_loader_eet_libs@ +evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@ +evas_image_loader_generic_libs = @evas_image_loader_generic_libs@ +evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@ +evas_image_loader_gif_libs = @evas_image_loader_gif_libs@ +evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@ +evas_image_loader_ico_libs = @evas_image_loader_ico_libs@ +evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@ +evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@ +evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@ +evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@ +evas_image_loader_png_cflags = @evas_image_loader_png_cflags@ +evas_image_loader_png_libs = @evas_image_loader_png_libs@ +evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@ +evas_image_loader_psd_libs = @evas_image_loader_psd_libs@ +evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@ +evas_image_loader_svg_libs = @evas_image_loader_svg_libs@ +evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@ +evas_image_loader_tga_libs = @evas_image_loader_tga_libs@ +evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@ +evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@ +evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@ +evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@ +evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@ +evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@ +exec_prefix = @exec_prefix@ +have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@ +have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@ +have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@ +have_evas_engine_software_x11 = @have_evas_engine_software_x11@ +have_evas_engine_software_xcb = @have_evas_engine_software_xcb@ +have_evas_engine_software_xlib = @have_evas_engine_software_xlib@ +have_lcov = @have_lcov@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +lt_enable_auto_import = @lt_enable_auto_import@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgconfig_requires_private = @pkgconfig_requires_private@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pthread_cflags = @pthread_cflags@ +pthread_libs = @pthread_libs@ +release_info = @release_info@ +requirement_evas = @requirement_evas@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +version_info = @version_info@ +MAINTAINERCLEANFILES = Makefile.in +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/lib \ +-I$(top_srcdir)/src/include \ +-I$(top_builddir)/src/include \ +-I$(top_builddir)/src/lib \ +-DPACKAGE_BIN_DIR=\"$(bindir)\" \ +-DPACKAGE_LIB_DIR=\"$(libdir)\" \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +@EINA_CFLAGS@ \ +@CHECK_CFLAGS@ + +@EFL_ENABLE_TESTS_TRUE@evas_suite_SOURCES = \ +@EFL_ENABLE_TESTS_TRUE@evas_suite.c \ +@EFL_ENABLE_TESTS_TRUE@evas_test_init.c \ +@EFL_ENABLE_TESTS_TRUE@evas_test_textblock.c \ +@EFL_ENABLE_TESTS_TRUE@evas_test_text.c \ +@EFL_ENABLE_TESTS_TRUE@evas_test_callbacks.c \ +@EFL_ENABLE_TESTS_TRUE@evas_tests_helpers.h \ +@EFL_ENABLE_TESTS_TRUE@evas_suite.h + +@EFL_ENABLE_TESTS_TRUE@evas_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +evas_suite$(EXEEXT): $(evas_suite_OBJECTS) $(evas_suite_DEPENDENCIES) + @rm -f evas_suite$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(evas_suite_OBJECTS) $(evas_suite_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_suite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_callbacks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_text.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_test_textblock.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-checkPROGRAMS clean-generic clean-libtool ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.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 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include + +#include + +#include "evas_suite.h" + +typedef struct _Evas_Test_Case Evas_Test_Case; + +struct _Evas_Test_Case +{ + const char *test_case; + void (*build)(TCase *tc); +}; + +static const Evas_Test_Case etc[] = { + { "Evas", evas_test_init }, + { "Object Textblock", evas_test_textblock }, + { "Object Text", evas_test_text }, + { "Callbacks", evas_test_callbacks }, + { NULL, NULL } +}; + +static void +_list_tests(void) +{ + const Evas_Test_Case *itr; + + itr = etc; + fputs("Available Test Cases:\n", stderr); + for (; itr->test_case; itr++) + fprintf(stderr, "\t%s\n", itr->test_case); +} +static Eina_Bool +_use_test(int argc, const char **argv, const char *test_case) +{ + if (argc < 1) + return 1; + + for (; argc > 0; argc--, argv++) + if (strcmp(test_case, *argv) == 0) + return 1; + return 0; +} + +static Suite * +evas_suite_build(int argc, const char **argv) +{ + TCase *tc; + Suite *s; + int i; + + s = suite_create("Evas"); + + for (i = 0; etc[i].test_case; ++i) + { + if (!_use_test(argc, argv, etc[i].test_case)) continue; + tc = tcase_create(etc[i].test_case); + + etc[i].build(tc); + + suite_add_tcase(s, tc); + tcase_set_timeout(tc, 0); + } + + return s; +} + +int +main(int argc, char **argv) +{ + Suite *s; + SRunner *sr; + int i, failed_count; + + for (i = 1; i < argc; i++) + if ((strcmp(argv[i], "-h") == 0) || + (strcmp(argv[i], "--help") == 0)) + { + fprintf(stderr, "Usage:\n\t%s [test_case1 .. [test_caseN]]\n", + argv[0]); + _list_tests(); + return 0; + } + else if ((strcmp(argv[i], "-l") == 0) || + (strcmp(argv[i], "--list") == 0)) + { + _list_tests(); + return 0; + } + + s = evas_suite_build(argc - 1, (const char **)argv + 1); + sr = srunner_create(s); + + srunner_run_all(sr, CK_ENV); + failed_count = srunner_ntests_failed(sr); + srunner_free(sr); + + return (failed_count == 0) ? 0 : 255; +} 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 @@ +#ifndef _EVAS_SUITE_H +#define _EVAS_SUITE_H + +#include + +void evas_test_init(TCase *tc); +void evas_test_textblock(TCase *tc); +void evas_test_text(TCase *tc); +void evas_test_callbacks(TCase *tc); + + +#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 @@ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "evas_suite.h" +#include "Evas.h" +#include "evas_tests_helpers.h" + +#define START_CALLBACK_TEST() \ + Evas *evas; \ + Evas_Object *rect; \ + evas = EVAS_TEST_INIT_EVAS(); \ + rect = evas_object_rectangle_add(evas); \ +do \ +{ \ +} \ +while (0) + +#define END_CALLBACK_TEST() \ +do \ +{ \ + evas_object_del(rect); \ + evas_free(evas); \ + evas_shutdown(); \ +} \ +while (0) + +static int counter = 1; + +static void +_obj_event_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + (void) e; + (void) obj; + (void) event_info; + + fail_if(((int) data) != counter); + + counter++; +} + +START_TEST(evas_object_event_callbacks_priority) +{ + START_CALLBACK_TEST(); + counter = 1; + evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, -10, + _obj_event_cb, (void *) 1); + evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 0, + _obj_event_cb, (void *) 2); + evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 10, + _obj_event_cb, (void *) 3); + evas_object_move(rect, 2, 2); + + /* Make sure we got through all the callbacks */ + fail_if(counter != 4); + + /* Delete _obj_event_cb 3 times */ + evas_object_event_callback_del(rect, EVAS_CALLBACK_MOVE, _obj_event_cb); + evas_object_event_callback_del(rect, EVAS_CALLBACK_MOVE, _obj_event_cb); + evas_object_event_callback_del(rect, EVAS_CALLBACK_MOVE, _obj_event_cb); + counter = 1; + evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 0, + _obj_event_cb, (void *) 2); + evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, -10, + _obj_event_cb, (void *) 1); + evas_object_event_callback_priority_add(rect, EVAS_CALLBACK_MOVE, 10, + _obj_event_cb, (void *) 3); + evas_object_move(rect, 3, 3); + + /* Make sure we got through all the callbacks */ + fail_if(counter != 4); + + END_CALLBACK_TEST(); +} +END_TEST + +static void +_event_cb(void *data, Evas *e, void *event_info) +{ + (void) e; + (void) event_info; + + fail_if(((int) data) != counter); + + counter++; +} + +START_TEST(evas_event_callbacks_priority) +{ + START_CALLBACK_TEST(); + evas_object_focus_set(rect, EINA_FALSE); + counter = 1; + evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + -10, _event_cb, (void *) 1); + evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + 0, _event_cb, (void *) 2); + evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + 10, _event_cb, (void *) 3); + evas_object_focus_set(rect, EINA_TRUE); + + /* Make sure we got through all the callbacks */ + fail_if(counter != 4); + + /* Delete _event_cb 3 times */ + evas_event_callback_del(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + _event_cb); + evas_event_callback_del(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + _event_cb); + evas_event_callback_del(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + _event_cb); + evas_object_focus_set(rect, EINA_FALSE); + counter = 1; + evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + 0, _event_cb, (void *) 2); + evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + -10, _event_cb, (void *) 1); + evas_event_callback_priority_add(evas, EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, + 10, _event_cb, (void *) 3); + evas_object_focus_set(rect, EINA_TRUE); + + /* Make sure we got through all the callbacks */ + fail_if(counter != 4); + + END_CALLBACK_TEST(); +} +END_TEST + +void evas_test_callbacks(TCase *tc) +{ + tcase_add_test(tc, evas_object_event_callbacks_priority); + tcase_add_test(tc, evas_event_callbacks_priority); +} 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 @@ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "evas_suite.h" +#include "Evas.h" + +START_TEST(evas_simple) +{ + fail_if(evas_init() != 1); /* one init by test suite */ + fail_if(evas_shutdown() != 0); +} +END_TEST + +void evas_test_init(TCase *tc) +{ + tcase_add_test(tc, evas_simple); +} 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 @@ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "evas_suite.h" +#include "Evas.h" +#include "evas_tests_helpers.h" + +#define START_TEXT_TEST() \ + Evas *evas; \ + Evas_Object *to; \ + evas = EVAS_TEST_INIT_EVAS(); \ + evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \ + to = evas_object_text_add(evas); \ +do \ +{ \ +} \ +while (0) + +#define END_TEXT_TEST() \ +do \ +{ \ + evas_object_del(to); \ + evas_free(evas); \ + evas_shutdown(); \ +} \ +while (0) + +START_TEST(evas_text_simple) +{ + START_TEXT_TEST(); + const char *buf = "Test - בדיקה"; + evas_object_text_text_set(to, buf); + fail_if(strcmp(evas_object_text_text_get(to), buf)); + END_TEXT_TEST(); +} +END_TEST + +/* Various text related geometries */ +START_TEST(evas_text_geometries) +{ + START_TEXT_TEST(); + const char *buf = "Tests"; + const char *font = "Sans"; + Evas_Font_Size size = 14; + Evas_Coord prev; + int i; + Evas_Coord x, y, w, h, px; + + evas_object_text_text_set(to, buf); + + /* All should be 0 without a font set */ + fail_if(evas_object_text_ascent_get(to) != 0); + fail_if(evas_object_text_descent_get(to) != 0); + fail_if(evas_object_text_max_ascent_get(to) != 0); + fail_if(evas_object_text_max_descent_get(to) != 0); + fail_if(evas_object_text_horiz_advance_get(to) != 0); + fail_if(evas_object_text_vert_advance_get(to) != 0); + + evas_object_text_font_set(to, font, size); + + /* Check that they are bigger than 0. */ + fail_if(evas_object_text_ascent_get(to) <= 0); + fail_if(evas_object_text_descent_get(to) <= 0); + fail_if(evas_object_text_max_ascent_get(to) <= 0); + fail_if(evas_object_text_max_descent_get(to) <= 0); + fail_if(evas_object_text_horiz_advance_get(to) <= 0); + fail_if(evas_object_text_vert_advance_get(to) <= 0); + + /* Check that expanding the text does what we expect it */ + evas_object_text_text_set(to, "Test"); + prev = evas_object_text_ascent_get(to); + evas_object_text_text_set(to, "Testing"); + fail_if(evas_object_text_ascent_get(to) != prev); + + evas_object_text_text_set(to, "Test"); + prev = evas_object_text_descent_get(to); + evas_object_text_text_set(to, "Testing"); + fail_if(evas_object_text_descent_get(to) != prev); + + evas_object_text_text_set(to, "Test"); + prev = evas_object_text_max_ascent_get(to); + evas_object_text_text_set(to, "Testing"); + fail_if(evas_object_text_max_ascent_get(to) != prev); + + evas_object_text_text_set(to, "Test"); + prev = evas_object_text_max_descent_get(to); + evas_object_text_text_set(to, "Testing"); + fail_if(evas_object_text_max_descent_get(to) != prev); + + evas_object_text_text_set(to, "Test"); + prev = evas_object_text_horiz_advance_get(to); + evas_object_text_text_set(to, "Testing"); + fail_if(evas_object_text_horiz_advance_get(to) <= prev); + + evas_object_text_text_set(to, "Test"); + prev = evas_object_text_vert_advance_get(to); + evas_object_text_text_set(to, "Testing"); + fail_if(evas_object_text_vert_advance_get(to) != prev); + + /* Go through all the characters, making sure the geometries we get + * are in a monotonically increasing order and that all sizes are + * bigger than 0. */ + evas_object_text_text_set(to, "Testing..."); + x = 0; + px = -100; + for (i = 0 ; i < eina_unicode_utf8_get_len("Testing...") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x <= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + + /* Last up to pos */ + Evas_Coord adv; + int pos, prev_pos; + evas_object_text_text_set(to, "Test - 유니코드"); + adv = evas_object_text_horiz_advance_get(to); + pos = prev_pos = 0; + for (x = 0 ; x <= (adv - 1) ; x++) + { + pos = evas_object_text_last_up_to_pos(to, x, 0); + fail_if(pos < prev_pos); + prev_pos = pos; + } + pos = evas_object_text_last_up_to_pos(to, x, 0); + fail_if(pos != -1); + pos = evas_object_text_last_up_to_pos(to, -50, 0); + fail_if(pos != -1); + + END_TEXT_TEST(); +} +END_TEST + +/* Various evas stuff, such as scale */ +START_TEST(evas_text_evas) +{ + Evas_Coord w, h, bw, bh; + START_TEXT_TEST(); + const char *buf = "Test - בדיקה"; + const char *font = "Sans"; + Evas_Font_Size size = 14; + + evas_object_text_font_set(to, font, size); + evas_object_text_text_set(to, buf); + evas_object_geometry_get(to, NULL, NULL, &bw, &bh); + evas_object_scale_set(to, 3.0); + evas_object_geometry_get(to, NULL, NULL, &w, &h); + fail_if((w <= bw) || (h <= bh)); + + evas_object_scale_set(to, 0.5); + evas_object_geometry_get(to, NULL, NULL, &w, &h); + fail_if((w >= bw) || (h >= bh)); + + END_TEXT_TEST(); +} +END_TEST + +/* Tests for functions that are in evas_object_text.c but + * don't really have anything to do with it. */ +START_TEST(evas_text_unrelated) +{ + START_TEXT_TEST(); + const char *buf = "נסיון"; + int pos; + Eina_Unicode value; + /* Actually, they are tested in eina, just doing it for completeness. */ + fail_if(evas_string_char_len_get(buf) != 5); + + pos = 0; + fail_if(2 != evas_string_char_next_get(buf, pos, &value)); + fail_if(value != L'נ'); + + pos = 2; + fail_if(0 != evas_string_char_prev_get(buf, pos, &value)); + fail_if(value != L'ס'); + + END_TEXT_TEST(); +} +END_TEST + +#define _CHECK_SET_GET(x) \ +do \ +{ \ + Evas_Coord r, g, b, a; \ + evas_object_text_##x##_set(to, 100, 150, 125, 12); \ + evas_object_text_##x##_get(to, &r, &g, &b, &a); \ + fail_if((r != 100) || (g != 150) || (b != 125) || (a != 12)); \ + /* Set to the same value */ \ + evas_object_text_##x##_set(to, 100, 150, 125, 12); \ + evas_object_text_##x##_get(to, &r, &g, &b, &a); \ + fail_if((r != 100) || (g != 150) || (b != 125) || (a != 12)); \ +} \ +while (0) + +START_TEST(evas_text_set_get) +{ + START_TEXT_TEST(); + const char *buf = "Test - בדיקה"; + /* Text */ + evas_object_text_text_set(to, buf); + fail_if(strcmp(evas_object_text_text_get(to), buf)); + + /* Colors */ + _CHECK_SET_GET(shadow_color); + _CHECK_SET_GET(glow_color); + _CHECK_SET_GET(glow2_color); + _CHECK_SET_GET(outline_color); + + /* Font and size */ + const char *font = "Sans"; + Evas_Font_Size size = 14; + evas_object_text_font_set(to, font, size); + font = NULL; + size = 0; + evas_object_text_font_get(to, &font, &size); + fail_if(strcmp(font, "Sans")); + fail_if(size != 14); + evas_object_text_font_set(to, font, size); + font = NULL; + size = 0; + evas_object_text_font_get(to, &font, &size); + fail_if(strcmp(font, "Sans")); + fail_if(size != 14); + + font = "NON-EXISTING-FONT"; + size = 14; + evas_object_text_font_set(to, font, size); + font = NULL; + size = 0; + evas_object_text_font_get(to, &font, &size); + fail_if(strcmp(font, "NON-EXISTING-FONT")); + + font = "Serif"; + size = 2; + evas_object_text_font_set(to, font, size); + font = NULL; + size = 0; + evas_object_text_font_get(to, &font, &size); + fail_if(strcmp(font, "Serif")); + fail_if(size != 2); + + evas_object_text_font_source_set(to, "/usr/share/fonts/Sans.ttf"); + font = evas_object_text_font_source_get(to); + fail_if(strcmp(font, "/usr/share/fonts/Sans.ttf")); + evas_object_text_font_source_set(to, "/usr/share/fonts/Sans.ttf"); + font = evas_object_text_font_source_get(to); + fail_if(strcmp(font, "/usr/share/fonts/Sans.ttf")); + + /* BiDi Delimiters */ + evas_object_text_bidi_delimiters_set(to, ",.|"); + fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",.|")); + evas_object_text_bidi_delimiters_set(to, ",|"); + fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",|")); + evas_object_text_bidi_delimiters_set(to, NULL); + fail_if(evas_object_text_bidi_delimiters_get(to)); + evas_object_text_bidi_delimiters_set(to, ",|"); + fail_if(strcmp(evas_object_text_bidi_delimiters_get(to), ",|")); + + /* Style */ + evas_object_text_text_set(to, ""); + evas_object_text_style_set(to, EVAS_TEXT_STYLE_SHADOW); + fail_if(evas_object_text_style_get(to) != EVAS_TEXT_STYLE_SHADOW); + evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE); + fail_if(evas_object_text_style_get(to) != EVAS_TEXT_STYLE_OUTLINE); + + /* Rehinting */ + evas_object_text_text_set(to, "Bla"); + evas_font_hinting_set(evas, EVAS_FONT_HINTING_NONE); + evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); + evas_font_hinting_set(evas, EVAS_FONT_HINTING_BYTECODE); + + /* Direction of an empty text should be NEUTRAL */ + evas_object_text_text_set(to, ""); + fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_NEUTRAL); + + END_TEXT_TEST(); +} +END_TEST + +START_TEST(evas_text_style) +{ + Evas_Coord l, r, t, b; + START_TEXT_TEST(); + const char *buf = "Test"; + evas_object_text_text_set(to, buf); + evas_object_text_style_set(to, EVAS_TEXT_STYLE_PLAIN); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 0) || (r != 0) || (t != 0) || (b != 0)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_SHADOW); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 0) || (r != 1) || (t != 0) || (b != 1)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 1) || (r != 1) || (t != 1) || (b != 1)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_SOFT_OUTLINE); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_GLOW); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE_SHADOW); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_FAR_SHADOW); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_SOFT_SHADOW); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3)); + + evas_object_text_style_set(to, EVAS_TEXT_STYLE_FAR_SOFT_SHADOW); + evas_object_text_style_pad_get(to, &l, &r, &t, &b); + fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4)); + + fail_if(strcmp(evas_object_text_text_get(to), buf)); + END_TEXT_TEST(); +} +END_TEST + +#ifdef HAVE_FRIBIDI +START_TEST(evas_text_bidi) +{ + START_TEXT_TEST(); + const char *buf = "Test - בדיקה"; + int i; + Evas_Coord x, y, w, h, px; + const char *font = "Sans"; + Evas_Font_Size size = 14; + + evas_object_text_font_set(to, font, size); + + evas_object_text_text_set(to, buf); + fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_LTR); + evas_object_text_text_set(to, "בדיקה"); + fail_if(evas_object_text_direction_get(to) != EVAS_BIDI_DIRECTION_RTL); + + /* With RTL text coords should be monotontically decreasing. */ + evas_object_text_text_set(to, "נסיון..."); + x = 0; + px = 200; + for (i = 0 ; i < eina_unicode_utf8_get_len("נסיון...") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x >= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + + /* Bidi text is a bit more complex */ + evas_object_text_text_set(to, "Test - נסיון..."); + x = 0; + px = -100; + for (i = 0 ; i < eina_unicode_utf8_get_len("Test - ") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x <= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + + /* First rtl char requires more specific handling */ + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x <= px); + px = x; + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + i++; + for ( ; i < eina_unicode_utf8_get_len("Test - נסיון") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x >= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + /* First ltr char requires more specific handling */ + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x <= px); + px = x; + i++; + for ( ; i < eina_unicode_utf8_get_len("Test - נסיון...") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x <= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + + /* And with an rtl text */ + evas_object_text_text_set(to, "נסיון - test..."); + x = 0; + px = 100; + for (i = 0 ; i < eina_unicode_utf8_get_len("נסיון - ") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x >= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + + /* First ltr char requires more specific handling */ + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x >= px); + px = x; + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + i++; + for ( ; i < eina_unicode_utf8_get_len("נסיון - test") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x <= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + /* First rtl char requires more specific handling */ + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x >= px); + px = x; + i++; + for ( ; i < eina_unicode_utf8_get_len("נסיון - test...") ; i++) + { + fail_if(!evas_object_text_char_pos_get(to, i, &x, &y, &w, &h)); + fail_if(x >= px); + px = x; + /* Get back the coords */ + fail_if(i != evas_object_text_char_coords_get(to, x + (w / 2), + y + (h / 2), &x, &y, &w, &h)); + } + + /* And some last up to pos tests */ + Evas_Coord adv; + int pos, prev_pos; + evas_object_text_text_set(to, "Test - נסיון..."); + adv = evas_object_text_horiz_advance_get(to); + pos = prev_pos = 0; + for (x = 0 ; x <= (adv - 1) ; x++) + { + pos = evas_object_text_last_up_to_pos(to, x, 0); + fail_if(pos < prev_pos); + prev_pos = pos; + } + pos = evas_object_text_last_up_to_pos(to, x, 0); + fail_if(pos != -1); + pos = evas_object_text_last_up_to_pos(to, -50, 0); + fail_if(pos != -1); + + END_TEXT_TEST(); +} +END_TEST +#endif + +void evas_test_text(TCase *tc) +{ + tcase_add_test(tc, evas_text_simple); + tcase_add_test(tc, evas_text_style); + tcase_add_test(tc, evas_text_set_get); + tcase_add_test(tc, evas_text_geometries); + tcase_add_test(tc, evas_text_evas); +#ifdef HAVE_FRIBIDI + tcase_add_test(tc, evas_text_bidi); +#endif + + tcase_add_test(tc, evas_text_unrelated); +} 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 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include + +#include "evas_suite.h" +#include "Evas.h" + +#include "evas_tests_helpers.h" + +/* Functions defined in evas_object_textblock.c */ +EAPI Eina_Bool +_evas_textblock_check_item_node_link(Evas_Object *obj); +EAPI int +_evas_textblock_format_offset_get(const Evas_Object_Textblock_Node_Format *n); +/* end of functions defined in evas_object_textblock.c */ + + +static const char *style_buf = + "DEFAULT='font=Sans font_size=10 color=#000 text_class=entry'" + "br='\n'" + "ps='ps'" + "tab='\t'" + "b='+ font=Sans:style=bold'"; + +#define START_TB_TEST() \ + Evas *evas; \ + Evas_Object *tb; \ + Evas_Textblock_Style *st; \ + Evas_Textblock_Cursor *cur; \ + evas = EVAS_TEST_INIT_EVAS(); \ + evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \ + tb = evas_object_textblock_add(evas); \ + fail_if(!tb); \ + evas_object_textblock_legacy_newline_set(tb, EINA_FALSE); \ + st = evas_textblock_style_new(); \ + fail_if(!st); \ + evas_textblock_style_set(st, style_buf); \ + fail_if(strcmp(style_buf, evas_textblock_style_get(st))); \ + evas_object_textblock_style_set(tb, st); \ + cur = evas_object_textblock_cursor_new(tb); \ +do \ +{ \ +} \ +while (0) + +#define END_TB_TEST() \ +do \ +{ \ + evas_textblock_cursor_free(cur); \ + evas_object_del(tb); \ + evas_textblock_style_free(st); \ + evas_free(evas); \ + evas_shutdown(); \ +} \ +while (0) + +START_TEST(evas_textblock_simple) +{ + START_TB_TEST(); + const char *buf = "This is a
test."; + evas_object_textblock_text_markup_set(tb, buf); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf)); + END_TB_TEST(); +} +END_TEST + +#define _CHECK_CURSOR_COORDS() \ +do \ +{ \ + Evas_Coord cx, cy, cw, ch; \ + int ret; \ + ret = evas_textblock_cursor_geometry_get(cur, &cx, &cy, &cw, &ch, \ + NULL, EVAS_TEXTBLOCK_CURSOR_UNDER); \ + fail_if(ret == -1); \ + ret = evas_textblock_cursor_geometry_get(cur, &cx, &cy, &cw, &ch, \ + NULL, EVAS_TEXTBLOCK_CURSOR_BEFORE); \ + fail_if(ret == -1); \ + ret = evas_textblock_cursor_char_geometry_get(cur, \ + &cx, &cy, &cw, &ch); \ + fail_if(ret == -1); \ + ret = evas_textblock_cursor_pen_geometry_get(cur, &cx, &cy, &cw, &ch); \ + fail_if(ret == -1); \ + ret = evas_textblock_cursor_line_geometry_get(cur, \ + &cx, &cy, &cw, &ch); \ + fail_if(ret == -1); \ +} \ +while (0) +START_TEST(evas_textblock_cursor) +{ + START_TB_TEST(); + Evas_Coord x, y, w, h; + size_t i, len; + Evas_Coord nw, nh; + const char *buf = "This is a
test.Lets see if this works.עוד פסקה."; + + /* Walk the textblock using cursor_char_next */ + evas_object_textblock_text_markup_set(tb, buf); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf)); + len = eina_unicode_utf8_get_len(buf) - 9; /* 9 because len(
) == 1 and len() == 1 */ + for (i = 0 ; i < len ; i++) + { + _CHECK_CURSOR_COORDS(); + + fail_if(evas_textblock_cursor_pos_get(cur) != (int) i); + + fail_if(!evas_textblock_cursor_char_next(cur) && (i < len - 1)); + } + fail_if(evas_textblock_cursor_char_next(cur)); + + /* Jump to positions all aronud the textblock */ + evas_textblock_cursor_pos_set(cur, -1); + fail_if(evas_textblock_cursor_pos_get(cur) != 0); + + evas_textblock_cursor_pos_set(cur, len + 5); + fail_if(evas_textblock_cursor_pos_get(cur) != (int) len); + + for (i = 0 ; i < len ; i++) + { + evas_textblock_cursor_pos_set(cur, i); + + _CHECK_CURSOR_COORDS(); + + fail_if(evas_textblock_cursor_pos_get(cur) != (int) i); + } + + /* Create another cursor and insert text, making sure everything + * is in sync. */ + evas_object_textblock_clear(tb); + Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb); + evas_textblock_cursor_copy(main_cur, cur); + fail_if(evas_textblock_cursor_pos_get(cur) != + evas_textblock_cursor_pos_get(main_cur)); + + evas_textblock_cursor_text_prepend(main_cur, "a"); + fail_if(evas_textblock_cursor_pos_get(cur) == + evas_textblock_cursor_pos_get(main_cur)); + evas_textblock_cursor_text_prepend(main_cur, "a"); + fail_if(evas_textblock_cursor_pos_get(cur) == + evas_textblock_cursor_pos_get(main_cur)); + + /* Insert text to a non-empty textblock */ + evas_object_textblock_clear(tb); + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_copy(main_cur, cur); + fail_if(evas_textblock_cursor_pos_get(cur) != + evas_textblock_cursor_pos_get(main_cur)); + + evas_textblock_cursor_text_prepend(main_cur, "a"); + fail_if(evas_textblock_cursor_pos_get(cur) == + evas_textblock_cursor_pos_get(main_cur)); + evas_textblock_cursor_text_prepend(main_cur, "a"); + fail_if(evas_textblock_cursor_pos_get(cur) == + evas_textblock_cursor_pos_get(main_cur)); + + /* Make sure append works */ + evas_textblock_cursor_copy(main_cur, cur); + fail_if(evas_textblock_cursor_pos_get(cur) != + evas_textblock_cursor_pos_get(main_cur)); + evas_textblock_cursor_text_append(main_cur, "a"); + fail_if(evas_textblock_cursor_pos_get(cur) != + evas_textblock_cursor_pos_get(main_cur)); + + /* Cursor comparison */ + evas_textblock_cursor_pos_set(cur, 1); + evas_textblock_cursor_pos_set(main_cur, 2); + fail_if(evas_textblock_cursor_compare(cur, main_cur) != -1); + + evas_textblock_cursor_pos_set(cur, 2); + evas_textblock_cursor_pos_set(main_cur, 2); + fail_if(evas_textblock_cursor_compare(cur, main_cur) != 0); + + evas_textblock_cursor_pos_set(cur, 3); + evas_textblock_cursor_pos_set(main_cur, 2); + fail_if(evas_textblock_cursor_compare(cur, main_cur) != 1); + + /* Paragraph first */ + evas_object_textblock_text_markup_set(tb, buf); + for (i = 0 ; i < len ; i++) + { + evas_textblock_cursor_pos_set(cur, i); + + evas_textblock_cursor_paragraph_first(cur); + fail_if(evas_textblock_cursor_pos_get(cur) != 0); + } + + /* Paragraph last */ + for (i = 0 ; i < len ; i++) + { + evas_textblock_cursor_pos_set(cur, i); + + evas_textblock_cursor_paragraph_last(cur); + fail_if(evas_textblock_cursor_pos_get(cur) != (int) len); + } + + /* Paragraph next */ + evas_textblock_cursor_paragraph_last(cur); + fail_if(evas_textblock_cursor_paragraph_next(cur)); + + evas_textblock_cursor_paragraph_first(cur); + fail_if(!evas_textblock_cursor_paragraph_next(cur)); + fail_if(!evas_textblock_cursor_paragraph_next(cur)); + + /* Paragraph prev */ + evas_textblock_cursor_paragraph_first(cur); + fail_if(evas_textblock_cursor_paragraph_prev(cur)); + + evas_textblock_cursor_paragraph_last(cur); + fail_if(!evas_textblock_cursor_paragraph_prev(cur)); + fail_if(!evas_textblock_cursor_paragraph_prev(cur)); + + /* Cher next */ + evas_textblock_cursor_paragraph_last(cur); + fail_if(evas_textblock_cursor_char_next(cur)); + + evas_textblock_cursor_paragraph_first(cur); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(!evas_textblock_cursor_paragraph_next(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(!evas_textblock_cursor_paragraph_next(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + + /* Cher prev */ + evas_textblock_cursor_paragraph_first(cur); + fail_if(evas_textblock_cursor_char_prev(cur)); + + evas_textblock_cursor_paragraph_last(cur); + fail_if(!evas_textblock_cursor_char_prev(cur)); + fail_if(!evas_textblock_cursor_paragraph_prev(cur)); + fail_if(!evas_textblock_cursor_char_prev(cur)); + + /* Paragraph char first */ + evas_textblock_cursor_paragraph_first(main_cur); + evas_textblock_cursor_paragraph_first(cur); + fail_if(!evas_textblock_cursor_char_next(cur)); + evas_textblock_cursor_paragraph_char_first(cur); + fail_if(evas_textblock_cursor_compare(cur, main_cur)); + + /* Paragraph char last */ + evas_textblock_cursor_paragraph_last(main_cur); + evas_textblock_cursor_paragraph_last(cur); + fail_if(!evas_textblock_cursor_char_prev(cur)); + evas_textblock_cursor_paragraph_char_last(cur); + fail_if(evas_textblock_cursor_compare(cur, main_cur)); + + /* Line char first */ + evas_textblock_cursor_paragraph_first(main_cur); + evas_textblock_cursor_paragraph_first(cur); + fail_if(!evas_textblock_cursor_char_next(cur)); + evas_textblock_cursor_line_char_first(cur); + fail_if(evas_textblock_cursor_compare(cur, main_cur)); + + evas_textblock_cursor_pos_set(cur, 12); + evas_textblock_cursor_line_char_first(cur); + fail_if(evas_textblock_cursor_pos_get(cur) != 10); + + /* Line char first */ + evas_textblock_cursor_paragraph_last(main_cur); + evas_textblock_cursor_paragraph_last(cur); + fail_if(!evas_textblock_cursor_char_prev(cur)); + evas_textblock_cursor_line_char_last(cur); + fail_if(evas_textblock_cursor_compare(cur, main_cur)); + + evas_textblock_cursor_pos_set(cur, 12); + evas_textblock_cursor_line_char_last(cur); + fail_if(evas_textblock_cursor_pos_get(cur) != 16); + + /* Line set */ + evas_textblock_cursor_paragraph_first(main_cur); + evas_textblock_cursor_paragraph_last(cur); + + fail_if(!evas_textblock_cursor_line_set(cur, 0)); + fail_if(evas_textblock_cursor_compare(cur, main_cur)); + fail_if(!evas_textblock_cursor_line_set(cur, 1)); + fail_if(!evas_textblock_cursor_line_set(cur, 2)); + fail_if(!evas_textblock_cursor_line_set(cur, 3)); + + fail_if(evas_textblock_cursor_line_set(cur, -1)); + fail_if(evas_textblock_cursor_line_set(cur, 99)); + + /* Paragraph text get */ + evas_textblock_cursor_paragraph_first(cur); + fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur), + "This is a
test.")); + evas_textblock_cursor_paragraph_next(cur); + fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur), + "Lets see if this works.")); + evas_textblock_cursor_paragraph_next(cur); + fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur), + "עוד פסקה.")); + + /* Paragraph length get */ + evas_textblock_cursor_paragraph_first(cur); + /* -3 because len(
) == 1 */ + fail_if(evas_textblock_cursor_paragraph_text_length_get(cur) != + eina_unicode_utf8_get_len("This is a
test.") - 3); + evas_textblock_cursor_paragraph_next(cur); + fail_if(evas_textblock_cursor_paragraph_text_length_get(cur) != + eina_unicode_utf8_get_len("Lets see if this works.")); + evas_textblock_cursor_paragraph_next(cur); + fail_if(evas_textblock_cursor_paragraph_text_length_get(cur) != + eina_unicode_utf8_get_len("עוד פסקה.")); + + /* Cursor content get */ + evas_textblock_cursor_pos_set(cur, 0); + fail_if(strcmp(evas_textblock_cursor_content_get(cur), "T")); + evas_textblock_cursor_pos_set(cur, 9); + fail_if(strcmp(evas_textblock_cursor_content_get(cur), "
")); + evas_textblock_cursor_pos_set(cur, 43); + fail_if(strcmp(evas_textblock_cursor_content_get(cur), "ד")); + + /* Eol get */ + for (i = 0 ; i < len ; i++) + { + evas_textblock_cursor_pos_set(cur, i); + evas_textblock_cursor_copy(cur, main_cur); + evas_textblock_cursor_line_char_last(main_cur); + + if (!evas_textblock_cursor_compare(cur, main_cur)) + { + fail_if(!evas_textblock_cursor_eol_get(cur)); + } + else + { + fail_if(evas_textblock_cursor_eol_get(cur)); + } + } + + /* Format positions */ + const Evas_Object_Textblock_Node_Format *fnode; + fnode = evas_textblock_node_format_first_get(tb); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + evas_textblock_cursor_copy(cur, main_cur); + fail_if(evas_textblock_cursor_pos_get(cur) != 9); + fail_if(evas_textblock_cursor_format_get(cur) != fnode); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(evas_textblock_cursor_pos_get(cur) != 16); + fail_if(evas_textblock_cursor_format_get(cur) != fnode); + evas_textblock_cursor_format_next(main_cur); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(evas_textblock_cursor_pos_get(cur) != 9); + fail_if(evas_textblock_cursor_format_get(cur) != fnode); + evas_textblock_cursor_format_prev(main_cur); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + evas_textblock_cursor_char_next(main_cur); + evas_textblock_cursor_format_prev(main_cur); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + + evas_object_textblock_text_markup_set(tb, buf); + + /* Check that pen geometry and getting char at coord are in sync. */ + do + { + int cur_pos; + + /* Check if it's the last char, if it is, break, otherwise, go back + * to the current char because our test advanced the cursor. */ + if (!evas_textblock_cursor_char_next(cur)) + break; + else + evas_textblock_cursor_char_prev(cur); + + cur_pos = evas_textblock_cursor_pos_get(cur); + evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h); + evas_textblock_cursor_char_coord_set(cur, x + (w / 2), y + (h / 2)); + fail_if(cur_pos != evas_textblock_cursor_pos_get(cur)); + } + while (evas_textblock_cursor_char_next(cur)); + + /* Try positions before the first paragraph, and after the last paragraph */ + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, nw, nh); + evas_textblock_cursor_pos_set(cur, 5); + evas_textblock_cursor_char_coord_set(cur, nw / 2, + -50); + evas_textblock_cursor_paragraph_first(main_cur); + fail_if(evas_textblock_cursor_compare(cur, main_cur)); + + evas_textblock_cursor_pos_set(cur, 5); + evas_textblock_cursor_char_coord_set(cur, nw / 2, + nh + 50); + evas_textblock_cursor_paragraph_last(main_cur); + fail_if(evas_textblock_cursor_compare(cur, main_cur)); + + /* Try positions beyond the left/right limits of lines. */ + for (i = 0 ; i < 2 ; i++) + { + evas_textblock_cursor_line_set(cur, i); + evas_textblock_cursor_line_geometry_get(cur, &x, &y, &w, &h); + + evas_textblock_cursor_pos_set(main_cur, 5); + evas_textblock_cursor_char_coord_set(main_cur, x - 50, y); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + evas_textblock_cursor_line_char_last(cur); + evas_textblock_cursor_pos_set(main_cur, 5); + evas_textblock_cursor_char_coord_set(main_cur, x + w + 50, y); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + } + +#ifdef HAVE_FRIBIDI + evas_object_textblock_text_markup_set(tb, + "testנסיוןtestנסיון" + "נסיוןtestנסיוןtest" + "testנסיוןtest" + "נסיוןtestנסיון" + "testנסיון
נסיון" + "נסיוןtest
test" + ); + + for (i = 0 ; i < 8 ; i++) + { + evas_textblock_cursor_line_set(cur, i); + evas_textblock_cursor_line_geometry_get(cur, &x, &y, &w, &h); + switch (i) + { + case 0: + case 2: + case 4: + case 5: + /* Ltr paragraph */ + evas_textblock_cursor_pos_set(main_cur, 7); + evas_textblock_cursor_char_coord_set(main_cur, x - 50, y); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + evas_textblock_cursor_line_char_last(cur); + evas_textblock_cursor_pos_set(main_cur, 7); + evas_textblock_cursor_char_coord_set(main_cur, x + w + 50, y); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + break; + case 1: + case 3: + case 6: + case 7: + /* Rtl paragraph */ + evas_textblock_cursor_line_char_last(cur); + evas_textblock_cursor_pos_set(main_cur, 7); + evas_textblock_cursor_char_coord_set(main_cur, x - 50, y); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + evas_textblock_cursor_line_char_first(cur); + evas_textblock_cursor_pos_set(main_cur, 7); + evas_textblock_cursor_char_coord_set(main_cur, x + w + 50, y); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + break; + } + } +#endif + + evas_object_textblock_text_markup_set(tb, buf); + /* Testing line geometry.*/ + { + Evas_Coord lx, ly, lw, lh; + Evas_Coord plx, ply, plw, plh; + evas_textblock_cursor_line_set(cur, 0); + evas_textblock_cursor_copy(cur, main_cur); + evas_textblock_cursor_line_char_last(main_cur); + evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh); + + while (evas_textblock_cursor_compare(cur, main_cur) <= 0) + { + evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h); + fail_if(0 != evas_textblock_cursor_line_geometry_get( + cur, &lx, &ly, &lw, &lh)); + fail_if((x < lx) || (x + w > lx + lw) || + (y < ly) || (y + h > ly + lh)); + fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh)); + + plx = lx; + ply = ly; + plw = lw; + plh = lh; + evas_textblock_cursor_char_next(cur); + } + + evas_textblock_cursor_line_set(cur, 1); + evas_textblock_cursor_copy(cur, main_cur); + evas_textblock_cursor_line_char_last(main_cur); + evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh); + + while (evas_textblock_cursor_compare(cur, main_cur) <= 0) + { + evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h); + fail_if(1 != evas_textblock_cursor_line_geometry_get( + cur, &lx, &ly, &lw, &lh)); + fail_if((x < lx) || (x + w > lx + lw) || + (y < ly) || (y + h > ly + lh)); + fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh)); + + plx = lx; + ply = ly; + plw = lw; + plh = lh; + evas_textblock_cursor_char_next(cur); + } + + evas_textblock_cursor_paragraph_last(cur); + evas_textblock_cursor_line_set(cur, 0); + evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh); + evas_object_textblock_line_number_geometry_get(tb, 0, + &lx, &ly, &lw, &lh); + fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh)); + fail_if(0 != evas_textblock_cursor_line_coord_set(cur, ly + (lh / 2))); + + evas_textblock_cursor_line_set(cur, 1); + evas_textblock_cursor_line_geometry_get(cur, &plx, &ply, &plw, &plh); + evas_object_textblock_line_number_geometry_get(tb, 1, + &lx, &ly, &lw, &lh); + fail_if((lx != plx) || (ly != ply) || (lw != plw) || (lh != plh)); + fail_if(1 != evas_textblock_cursor_line_coord_set(cur, ly + (lh / 2))); + + /* Before the start of the textblock */ + fail_if(0 != evas_textblock_cursor_line_coord_set(cur, -50)); + fail_if(3 != evas_textblock_cursor_line_coord_set(cur, 100000)); + + /* And now with a valigned textblock. */ + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, 2 * nw, 2 * nh); + + evas_object_textblock_valign_set(tb, 0.5); + evas_textblock_cursor_paragraph_first(cur); + evas_textblock_cursor_pen_geometry_get(cur, &x, &y, &w, &h); + fail_if(y <= 0); + + evas_textblock_cursor_paragraph_last(main_cur); + evas_textblock_cursor_char_coord_set(main_cur, x + w, y / 2); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + evas_textblock_cursor_paragraph_last(main_cur); + evas_textblock_cursor_line_coord_set(main_cur, y / 2); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + /* Fail if they are equal, i.e if it for some reason thinks it should + * go to the end. */ + evas_textblock_cursor_paragraph_first(main_cur); + evas_textblock_cursor_paragraph_last(cur); + evas_textblock_cursor_char_coord_set(main_cur, x + w, nh + 1); + fail_if(!evas_textblock_cursor_compare(main_cur, cur)); + + evas_textblock_cursor_paragraph_first(main_cur); + evas_textblock_cursor_paragraph_last(cur); + evas_textblock_cursor_line_coord_set(main_cur, nh + 1); + fail_if(!evas_textblock_cursor_compare(main_cur, cur)); + + /* Fail if it doesn't go to the end. */ + evas_textblock_cursor_paragraph_last(cur); + evas_textblock_cursor_paragraph_first(main_cur); + evas_textblock_cursor_char_coord_set(main_cur, x + w, (2 * nh) - 1); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + + evas_textblock_cursor_paragraph_first(main_cur); + evas_textblock_cursor_line_coord_set(main_cur, (2 * nh) - 1); + fail_if(evas_textblock_cursor_compare(main_cur, cur)); + } + + END_TB_TEST(); +} +END_TEST + +START_TEST(evas_textblock_format_removal) +{ + START_TB_TEST(); + int i; + const char *buf = "This atesst."; + const Evas_Object_Textblock_Node_Format *fnode; + Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb); + evas_object_textblock_text_markup_set(tb, buf); + + /* Remove the "b" pair. */ + fnode = evas_textblock_node_format_first_get(tb); + evas_textblock_node_format_remove_pair(tb, + (Evas_Object_Textblock_Node_Format *) fnode); + + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ a")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- a")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* Now also remove the a pair */ + fnode = evas_textblock_node_format_first_get(tb); + evas_textblock_node_format_remove_pair(tb, + (Evas_Object_Textblock_Node_Format *) fnode); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Remove the "a" pair. */ + evas_object_textblock_text_markup_set(tb, buf); + + fnode = evas_textblock_node_format_first_get(tb); + fnode = evas_textblock_node_format_next_get(fnode); + evas_textblock_node_format_remove_pair(tb, + (Evas_Object_Textblock_Node_Format *) fnode); + + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* Now also remove the b pair */ + fnode = evas_textblock_node_format_first_get(tb); + evas_textblock_node_format_remove_pair(tb, + (Evas_Object_Textblock_Node_Format *) fnode); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Now remove formats by removing text */ + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_pos_set(cur, 6); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + /* Only b formats should remain */ + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* No formats should remain. */ + evas_textblock_cursor_pos_set(cur, 2); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Try to remove the formats in a way that shouldn't remove them */ + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_pos_set(cur, 7); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + evas_textblock_cursor_char_delete(cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ a")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- a")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* Try range deletion to delete a */ + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_pos_set(cur, 6); + evas_textblock_cursor_pos_set(main_cur, 9); + evas_textblock_cursor_range_delete(cur, main_cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* Range deletion to delete both */ + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_pos_set(cur, 2); + evas_textblock_cursor_pos_set(main_cur, 11); + evas_textblock_cursor_range_delete(cur, main_cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Range deletion across paragraphs */ + evas_object_textblock_text_markup_set(tb, + "This ate" + "sst."); + evas_textblock_cursor_pos_set(cur, 6); + evas_textblock_cursor_pos_set(main_cur, 10); + evas_textblock_cursor_range_delete(cur, main_cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* Two formats in the same place. */ + evas_object_textblock_text_markup_set(tb, "abb"); + evas_textblock_cursor_pos_set(cur, 1); + evas_textblock_cursor_char_delete(cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Two formats across different paragraphs with notihng in between. */ + evas_object_textblock_text_markup_set(tb, ""); + evas_textblock_cursor_pos_set(cur, 0); + evas_textblock_cursor_char_delete(cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Try with range */ + evas_object_textblock_text_markup_set(tb, ""); + evas_textblock_cursor_pos_set(cur, 0); + evas_textblock_cursor_pos_set(main_cur, 1); + evas_textblock_cursor_range_delete(cur, main_cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Verify fmt position and REP_CHAR positions are the same */ + evas_object_textblock_text_markup_set(tb, + "This isan a."); + evas_textblock_cursor_pos_set(cur, 7); + evas_textblock_cursor_char_delete(cur); + fnode = evas_textblock_node_format_first_get(tb); + fail_if(_evas_textblock_format_offset_get(fnode) != 10); + + /* Out of order mixes. */ + evas_object_textblock_text_markup_set(tb, "abcde"); + evas_textblock_cursor_pos_set(cur, 2); + + for (i = 0 ; i < 2 ; i++) + { + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + evas_textblock_cursor_char_delete(cur); + } + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* This time with a generic closer */ + evas_object_textblock_text_markup_set(tb, "abcde"); + evas_textblock_cursor_pos_set(cur, 2); + + for (i = 0 ; i < 2 ; i++) + { + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- ")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + evas_textblock_cursor_char_delete(cur); + } + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* And now with remove pair. */ + evas_object_textblock_text_markup_set(tb, "abcde"); + evas_textblock_cursor_pos_set(cur, 2); + fnode = evas_textblock_node_format_first_get(tb); + evas_textblock_node_format_remove_pair(tb, + (Evas_Object_Textblock_Node_Format *) fnode); + + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* Remove the other pair */ + evas_object_textblock_text_markup_set(tb, "abcde"); + evas_textblock_cursor_pos_set(cur, 2); + fnode = evas_textblock_node_format_first_get(tb); + fnode = evas_textblock_node_format_next_get(fnode); + evas_textblock_node_format_remove_pair(tb, + (Evas_Object_Textblock_Node_Format *) fnode); + + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + /* Remove two pairs with the same name and same positions. */ + evas_object_textblock_text_markup_set(tb, "A"); + evas_textblock_cursor_pos_set(cur, 0); + evas_textblock_cursor_char_delete(cur); + + fnode = evas_textblock_node_format_first_get(tb); + fail_if (fnode); + + /* Try to remove a format that doesn't have a pair (with a bad mkup) */ + evas_object_textblock_text_markup_set(tb, "abcde"); + evas_textblock_cursor_pos_set(cur, 2); + fnode = evas_textblock_node_format_first_get(tb); + evas_textblock_node_format_remove_pair(tb, + (Evas_Object_Textblock_Node_Format *) fnode); + + fnode = evas_textblock_node_format_first_get(tb); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- ")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- i")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if (fnode); + + END_TB_TEST(); +} +END_TEST + +/* Testing items */ +START_TEST(evas_textblock_items) +{ + Evas_Coord w, h, w2, h2, nw, nh, ih; + START_TB_TEST(); + const char *buf = "This is an ."; + + /* Absolute item size */ + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w < 93) || (h != 152)); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + fail_if((w != 93) || (h != 152)); + + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w < 93) || (h <= 152)); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + fail_if((w != 93) || (h != 152)); + + /* Size is the same as abssize, unless there's scaling applied. */ + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w < 93) || (h != 152)); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + fail_if((w != 93) || (h != 152)); + + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w < 93) || (h <= 152)); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + fail_if((w != 93) || (h != 152)); + + evas_object_scale_set(tb, 2.0); + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w < (2 * 93)) || (h != (2 * 152))); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + fail_if((w != (2 * 93)) || (h != (2 * 152))); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + fail_if((w != (2 * 93)) || (h != (2 * 152))); + + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w < (2 * 93)) || (h <= (2 * 152))); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + fail_if((w != (2 * 93)) || (h != (2 * 152))); + + evas_object_scale_set(tb, 1.0); + + /* Relsize */ + /* relsize means it should adjust itself to the size of the line */ + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w >= 93) || (h >= 152)); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &ih); + fail_if((w > 90) || (h != ih)); + + buf = "This is an ."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w >= 93) || (h >= 152)); + evas_textblock_cursor_pos_set(cur, 11); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &ih); + fail_if((w > 90) || (h <= ih)); + + /* Relsize and abs size in the same line, all should be the same size */ + buf = ""; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + evas_object_textblock_size_native_get(tb, &nw, &nh); + fail_if((nw != w) || (nh != h)); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + evas_textblock_cursor_char_next(cur); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w2, &h2); + fail_if((w != w2) || (h != h2)); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w, &h); + evas_textblock_cursor_char_next(cur); + evas_textblock_cursor_format_item_geometry_get(cur, NULL, NULL, &w2, &h2); + fail_if((w != w2) || (h != h2)); + + /* FIXME: Also verify x,y positions of the item. */ + + /* FIXME We need some item tests that involve line wrapping that make the + * items move between lines that are in different sizes. + * Also, tests that involve wrapping positions with relsized items. We + * want to make sure the item gets a relsize on the correct time (before + * the wrapping, and then is updated after the wrapping) and that + * all the lines have the correct sizes afterwards. */ + + END_TB_TEST(); +} +END_TEST + +/* Wrapping tests */ +START_TEST(evas_textblock_wrapping) +{ + Evas_Coord bw, bh, w, h, nw, nh; + int i; + START_TB_TEST(); + evas_object_textblock_text_markup_set(tb, "a"); + evas_object_textblock_size_formatted_get(tb, &bw, &bh); + + /* Char wrap */ + evas_object_textblock_text_markup_set(tb, "aaaaaaa"); + evas_textblock_cursor_format_prepend(cur, "+ wrap=char"); + evas_object_resize(tb, bw, bh); + evas_object_textblock_size_formatted_get(tb, &w, &h); + /* Wrap to minimum */ + fail_if(w != bw); + fail_if(h <= bh); + + /* Mixed - fallback to char wrap */ + evas_object_textblock_text_markup_set(tb, "aaaaaaa"); + evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed"); + evas_object_resize(tb, bw, bh); + evas_object_textblock_size_formatted_get(tb, &w, &h); + /* Wrap to minimum */ + fail_if(w != bw); + fail_if(h <= bh); + + /* Basic Word wrap */ + evas_object_textblock_text_markup_set(tb, "aaaa"); + evas_object_textblock_size_formatted_get(tb, &bw, &bh); + + evas_object_textblock_text_markup_set(tb, "aaaa aa"); + evas_textblock_cursor_format_prepend(cur, "+ wrap=word"); + evas_object_resize(tb, bw, bh); + evas_object_textblock_size_formatted_get(tb, &w, &h); + /* Wrap to minimum */ + fail_if(w != bw); + fail_if(h <= bh); + + /* Mixed - fallback to word wrap */ + evas_object_textblock_text_markup_set(tb, "aaaa aa"); + evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed"); + evas_object_resize(tb, bw + 1, bh); + evas_object_textblock_size_formatted_get(tb, &w, &h); + /* Wrap to minimum */ + fail_if(w != bw); + fail_if(h <= bh); + + /* Wrap and then expand again. */ + evas_object_textblock_text_markup_set(tb, "aaaa aa"); + evas_textblock_cursor_format_prepend(cur, "+ wrap=word"); + evas_object_resize(tb, bw, bh); + evas_object_textblock_size_formatted_get(tb, &w, &h); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, nw, nh); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w != nw) || (h != nh)); + + /* Reduce size until reaching the minimum, making sure we don't + * get something wrong along the way */ + /* Char wrap */ + evas_object_textblock_text_markup_set(tb, "a"); + evas_object_textblock_size_formatted_get(tb, &bw, &bh); + evas_object_textblock_text_markup_set(tb, + "aaaa aaaa aaa aa aaa" + "aaaa aaa aaa aaa aaa" + "a aaaaa aaaaaaaaaaaaaa
aaaaa" + "aaaaaa" + ); + evas_textblock_cursor_format_prepend(cur, "+ wrap=char"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + + Evas_Coord iw; + for (iw = nw ; iw >= bw ; iw--) + { + evas_object_resize(tb, iw, 1000); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if(w < bw); + fail_if(w > iw); + } + fail_if(w != bw); + + /* Word wrap */ + evas_object_textblock_text_markup_set(tb, "aaaaaa"); + evas_object_textblock_size_formatted_get(tb, &bw, &bh); + evas_object_textblock_text_markup_set(tb, + "aaaa aaaa aaa aa aaa" + "aaaa aaa aaa aaa aaa" + "a aaaaa aaaaaa
aaaaa" + "aaaaa" + ); + evas_textblock_cursor_format_prepend(cur, "+ wrap=word"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + + for (iw = nw ; iw >= bw ; iw--) + { + evas_object_resize(tb, iw, 1000); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if(w < bw); + fail_if(w > iw); + } + fail_if(w != bw); + + /* Mixed wrap */ + evas_object_textblock_text_markup_set(tb, "a"); + evas_object_textblock_size_formatted_get(tb, &bw, &bh); + evas_object_textblock_text_markup_set(tb, + "aaaa aaaa aaa aa aaa" + "aaaa aaa aaa aaa aaa" + "a aaaaa aaaaaa
aaaaa" + "aaaaa" + ); + evas_textblock_cursor_format_prepend(cur, "+ wrap=mixed"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + + for (iw = nw ; iw >= bw ; iw--) + { + evas_object_resize(tb, iw, 1000); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if(w < bw); + fail_if(w > iw); + } + fail_if(w != bw); + + /* Resize, making sure we keep going down in the minimum size. */ + char *wrap_style[] = { "+ wrap=word", "+ wrap=char", "+ wrap=mixed" }; + int wrap_items = sizeof(wrap_style) / sizeof(*wrap_style); + + evas_object_textblock_text_markup_set(tb, + "This is an entry widget in this window that
" + "uses markup like this for styling and
" + "formatting like this, as well as
" + "links in the text, so enter text
" + "in here to edit it. By the way, links are
" + "called Anchors so you will need
" + "to refer to them this way.
" + "
" + + "Also you can stick in items with (relsize + ascent): " + "" + " (full) " + "" + " (to the left)
" + + "Also (size + ascent): " + "" + " (full) " + "" + " (before this)
" + + "And as well (absize + ascent): " + "" + " (full) " + "" + " or even paths to image files on disk too like: " + "" + " ... end." + ); + + /* Get minimum size */ + evas_object_textblock_size_native_get(tb, &nw, &nh); + + for (i = 0 ; i < wrap_items ; i++) + { + evas_textblock_cursor_format_prepend(cur, wrap_style[i]); + evas_object_resize(tb, 0, 0); + evas_object_textblock_size_formatted_get(tb, &bw, &bh); + + for (iw = nw ; iw >= bw ; iw--) + { + evas_object_resize(tb, iw, 1000); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if(w < bw); + fail_if(w > iw); + } + fail_if(w != bw); + } + + + /* Ellipsis */ + evas_object_textblock_text_markup_set(tb, "aaaaaaaaaa"); + evas_textblock_cursor_format_prepend(cur, "+ ellipsis=1.0"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, nw / 2, nh); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w > (nw / 2)) || (h != nh)); + + END_TB_TEST(); +} +END_TEST + +/* Various textblock stuff */ +START_TEST(evas_textblock_various) +{ + Evas_Coord w, h, bw, bh; + START_TB_TEST(); + const char *buf = "Thistextblockhasalotoflines."; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + /* Move outside of the screen so it'll have to search for the correct + * paragraph and etc. */ + evas_object_move(tb, -(w / 2), -(h / 2)); + + /* Replacement char */ + evas_object_textblock_text_markup_set(tb, "*"); + evas_object_textblock_size_formatted_get(tb, &bw, &bh); + evas_object_textblock_replace_char_set(tb, "*"); + evas_object_textblock_text_markup_set(tb, "|"); + evas_object_textblock_size_formatted_get(tb, &w, &h); + fail_if((w != bw) || (h != bh)); + + /* Items have correct text node information */ + evas_object_textblock_text_markup_set(tb, ""); + fail_if(!_evas_textblock_check_item_node_link(tb)); + evas_object_textblock_text_markup_set(tb, ""); + fail_if(!_evas_textblock_check_item_node_link(tb)); + evas_object_textblock_text_markup_set(tb, "a"); + fail_if(!_evas_textblock_check_item_node_link(tb)); + evas_object_textblock_text_markup_set(tb, "aa"); + fail_if(!_evas_textblock_check_item_node_link(tb)); + evas_object_textblock_text_markup_set(tb, "aa"); + fail_if(!_evas_textblock_check_item_node_link(tb)); + evas_object_textblock_text_markup_set(tb, "aaa"); + fail_if(!_evas_textblock_check_item_node_link(tb)); + + END_TB_TEST(); +} +END_TEST + +/* Various geometries. e.g. range geometry. */ +START_TEST(evas_textblock_geometries) +{ + START_TB_TEST(); + const char *buf = "This is a
test."; + evas_object_textblock_text_markup_set(tb, buf); + + /* Single line range */ + Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb); + evas_textblock_cursor_pos_set(cur, 0); + evas_textblock_cursor_pos_set(main_cur, 6); + + Eina_List *rects, *rects2; + Evas_Textblock_Rectangle *tr, *tr2; + rects = evas_textblock_cursor_range_geometry_get(cur, main_cur); + fail_if(!rects); + rects2 = evas_textblock_cursor_range_geometry_get(main_cur, cur); + fail_if(!rects2); + + fail_if(eina_list_count(rects) != 1); + fail_if(eina_list_count(rects2) != 1); + + tr = eina_list_data_get(rects); + fail_if((tr->h <= 0) || (tr->w <= 0)); + tr2 = eina_list_data_get(rects2); + fail_if((tr2->h <= 0) || (tr2->w <= 0)); + + fail_if((tr->x != tr2->x) || (tr->y != tr2->y) || (tr->w != tr2->w) || + (tr->h != tr2->h)); + + /* Multiline range */ + evas_textblock_cursor_pos_set(cur, 0); + evas_textblock_cursor_pos_set(main_cur, 14); + + rects = evas_textblock_cursor_range_geometry_get(cur, main_cur); + fail_if(!rects); + rects2 = evas_textblock_cursor_range_geometry_get(main_cur, cur); + fail_if(!rects2); + + fail_if(eina_list_count(rects) != 2); + fail_if(eina_list_count(rects2) != 2); + + tr = eina_list_data_get(rects); + fail_if((tr->h <= 0) || (tr->w <= 0)); + tr2 = eina_list_data_get(rects2); + fail_if((tr2->h <= 0) || (tr2->w <= 0)); + + fail_if((tr->x != tr2->x) || (tr->y != tr2->y) || (tr->w != tr2->w) || + (tr->h != tr2->h)); + + tr = eina_list_data_get(eina_list_next(rects)); + fail_if((tr->h <= 0) || (tr->w <= 0)); + tr2 = eina_list_data_get(eina_list_next(rects2)); + fail_if((tr2->h <= 0) || (tr2->w <= 0)); + + fail_if((tr->x != tr2->x) || (tr->y != tr2->y) || (tr->w != tr2->w) || + (tr->h != tr2->h)); + + /* Check that the second line is positioned below the first */ + tr = eina_list_data_get(rects); + tr2 = eina_list_data_get(eina_list_next(rects)); + fail_if(tr->y >= tr2->y); + + END_TB_TEST(); +} +END_TEST + +/* Should handle all the text editing. */ +START_TEST(evas_textblock_editing) +{ + START_TB_TEST(); + const char *buf = "First par.Second par."; + evas_object_textblock_text_markup_set(tb, buf); + Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb); + + /* Check deletion works */ + /* Try deleting after the end of the textblock */ + { + char *content; + evas_textblock_cursor_paragraph_last(cur); + content = strdup(evas_object_textblock_text_markup_get(tb)); + evas_textblock_cursor_char_delete(cur); + fail_if(strcmp(content, evas_object_textblock_text_markup_get(tb))); + free(content); + } + + /* Delete the first char */ + evas_textblock_cursor_paragraph_first(cur); + evas_textblock_cursor_char_delete(cur); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), + "irst par.Second par.")); + + /* Delete some arbitrary char */ + evas_textblock_cursor_char_next(cur); + evas_textblock_cursor_char_next(cur); + evas_textblock_cursor_char_next(cur); + evas_textblock_cursor_char_delete(cur); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), + "irs par.Second par.")); + + /* Delete a range */ + evas_textblock_cursor_pos_set(main_cur, 1); + evas_textblock_cursor_pos_set(cur, 6); + evas_textblock_cursor_range_delete(cur, main_cur); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), + "ir.Second par.")); + evas_textblock_cursor_paragraph_char_first(main_cur); + evas_textblock_cursor_paragraph_char_last(cur); + evas_textblock_cursor_char_next(cur); + evas_textblock_cursor_range_delete(cur, main_cur); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), + "Second par.")); + + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_paragraph_last(main_cur); + evas_object_textblock_text_markup_prepend(main_cur, "Testblabla."); + evas_textblock_cursor_paragraph_last(cur); + evas_textblock_cursor_paragraph_char_first(main_cur); + evas_textblock_cursor_range_delete(cur, main_cur); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), + "First par.")); + + /* Merging paragraphs */ + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_paragraph_char_last(cur); + evas_textblock_cursor_copy(cur, main_cur); + evas_textblock_cursor_char_delete(cur); + + evas_textblock_cursor_paragraph_first(cur); + fail_if(evas_textblock_cursor_paragraph_next(cur)); + + /* Split paragraphs */ + evas_textblock_cursor_format_prepend(cur, "ps"); + + evas_textblock_cursor_paragraph_first(cur); + fail_if(!evas_textblock_cursor_paragraph_next(cur)); + fail_if(evas_textblock_cursor_paragraph_next(cur)); + + /* Merge paragraphs using range deletion */ + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_paragraph_first(cur); + evas_textblock_cursor_paragraph_char_last(cur); + evas_textblock_cursor_copy(cur, main_cur); + evas_textblock_cursor_char_prev(cur); + evas_textblock_cursor_char_next(main_cur); + + evas_textblock_cursor_range_delete(cur, main_cur); + evas_textblock_cursor_paragraph_first(cur); + fail_if(evas_textblock_cursor_paragraph_next(cur)); + + /* FIXME: Also add text appending/prepending */ + + END_TB_TEST(); +} +END_TEST + +/* Text getters */ +START_TEST(evas_textblock_text_getters) +{ + START_TB_TEST(); + const char *buf = "This is a
test." + "טקסט בעבריתand now in english."; + evas_object_textblock_text_markup_set(tb, buf); + evas_textblock_cursor_paragraph_first(cur); + + fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur), + "This is a
test.")); + + evas_textblock_cursor_paragraph_next(cur); + fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur), + "טקסט בעברית")); + + evas_textblock_cursor_paragraph_next(cur); + fail_if(strcmp(evas_textblock_cursor_paragraph_text_get(cur), + "and now in english.")); + + /* Range get */ + Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb); + evas_textblock_cursor_pos_set(main_cur, 2); + evas_textblock_cursor_pos_set(cur, 2); + fail_if(*evas_textblock_cursor_range_text_get(main_cur, cur, + EVAS_TEXTBLOCK_TEXT_MARKUP)); + + evas_textblock_cursor_pos_set(main_cur, 2); + evas_textblock_cursor_pos_set(cur, 6); + fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "is i")); + + evas_textblock_cursor_pos_set(main_cur, 5); + evas_textblock_cursor_pos_set(cur, 14); + fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "is a
te")); + + evas_textblock_cursor_pos_set(main_cur, 14); + evas_textblock_cursor_pos_set(cur, 20); + fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "st.טק")); + + evas_textblock_cursor_pos_set(main_cur, 14); + evas_textblock_cursor_pos_set(cur, 32); + fail_if(strcmp(evas_textblock_cursor_range_text_get(main_cur, cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "st.טקסט בעבריתan")); + + /* Backward range get */ + evas_textblock_cursor_pos_set(main_cur, 2); + evas_textblock_cursor_pos_set(cur, 2); + fail_if(*evas_textblock_cursor_range_text_get(cur, main_cur, + EVAS_TEXTBLOCK_TEXT_MARKUP)); + + evas_textblock_cursor_pos_set(main_cur, 2); + evas_textblock_cursor_pos_set(cur, 6); + fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "is i")); + + evas_textblock_cursor_pos_set(main_cur, 5); + evas_textblock_cursor_pos_set(cur, 14); + fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "is a
te")); + + evas_textblock_cursor_pos_set(main_cur, 14); + evas_textblock_cursor_pos_set(cur, 20); + fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "st.טק")); + + evas_textblock_cursor_pos_set(main_cur, 14); + evas_textblock_cursor_pos_set(cur, 32); + fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "st.טקסט בעבריתan")); + + /* Uninit cursors and other weird cases */ + evas_object_textblock_clear(tb); + evas_textblock_cursor_copy(main_cur, cur); + evas_textblock_cursor_text_prepend(main_cur, "aaa"); + fail_if(strcmp(evas_textblock_cursor_range_text_get(cur, main_cur, + EVAS_TEXTBLOCK_TEXT_MARKUP), "aaa")); + + END_TB_TEST(); +} +END_TEST + +/* Formats */ +START_TEST(evas_textblock_formats) +{ + START_TB_TEST(); + const char *buf = "This is a
test."; + const Evas_Object_Textblock_Node_Format *fnode; + evas_object_textblock_text_markup_set(tb, buf); + + /* Walk from the start */ + fnode = evas_textblock_node_format_first_get(tb); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ font_size=15 wrap=none")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- font_size=13")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- ")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "br")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "ps")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ item")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- ")); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(fnode); + + /* Walk backwards */ + fnode = evas_textblock_node_format_last_get(tb); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- ")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ item")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "ps")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "br")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- ")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "- font_size=13")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), + "+ font_size=15 wrap=none")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + + fnode = evas_textblock_node_format_prev_get(fnode); + fail_if(fnode); + + /* Cursor and format detection */ + fnode = evas_textblock_node_format_first_get(tb); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(evas_textblock_cursor_format_is_visible_get(cur)); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(evas_textblock_cursor_format_is_visible_get(cur)); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(evas_textblock_cursor_format_is_visible_get(cur)); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(evas_textblock_cursor_format_is_visible_get(cur)); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(!evas_textblock_cursor_format_is_visible_get(cur)); + + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + evas_textblock_cursor_at_format_set(cur, fnode); + fail_if(!evas_textblock_cursor_format_is_visible_get(cur)); + + size_t i = 0; + evas_textblock_cursor_paragraph_first(cur); + do + { + switch (i) + { + case 2: + case 3: + case 6: + case 7: + case 10: + case 14: + case 17: + case 18: + fail_if(!evas_textblock_cursor_is_format(cur)); + break; + default: + fail_if(evas_textblock_cursor_is_format(cur)); + fail_if(evas_textblock_cursor_format_is_visible_get(cur)); + break; + } + i++; + } + while (evas_textblock_cursor_char_next(cur)); + + /* Format text nodes invalidation */ + { + Evas_Coord w, h, nw, nh; + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_size_formatted_get(tb, &w, &h); + evas_textblock_cursor_paragraph_first(cur); + evas_textblock_cursor_format_prepend(cur, "+ font_size=40"); + evas_object_textblock_size_formatted_get(tb, &nw, &nh); + fail_if((w >= nw) || (h >= nh)); + } + /* FIXME: Should extend invalidation tests. */ + + /* Various formats, just verify there's no seg, we can't really + * verify them visually, well, we can some of them. Possibly in the + * future we will */ + evas_object_textblock_text_markup_set(tb, + "font_size=40" + "color=#F210B3FF" + "underline=single underline_color=#A2B3C4" + "underline=double underline_color=#F00 underline2_color=#00F" + "underline=dashed underline_dash_color=#0F0 underline_dash_width=2 underline_dash_gap=1" + "style=outline outline_color=#F0FA" + "style=shadow shadow_color=#F0F" + "style=glow glow_color=#BBB" + "style=glow glow2_color=#0F0" + "style=glow color=#fff glow2_color=#fe87 glow_color=#f214" + "backing=on backing_color=#00F" + "strikethrough=on strikethrough_color=#FF0" + "align=right" + "valign=0.0" + "tabstops=<\\t>50" + "linesize=40" + "linerelsize=200%" + "linegap=20" + "linerelgap=100%"); + + /* Force a relayout */ + evas_object_textblock_size_formatted_get(tb, NULL, NULL); + + /* Removing paired formats. */ + evas_object_textblock_text_markup_set(tb, "aabbcc"); + fnode = evas_textblock_node_format_first_get(tb); + evas_textblock_node_format_remove_pair(tb, (Evas_Object_Textblock_Node_Format *) fnode); + fnode = evas_textblock_node_format_first_get(tb); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ b")); + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- b")); + + evas_object_textblock_text_markup_set(tb, "aabbcc"); + fnode = evas_textblock_node_format_first_get(tb); + fnode = evas_textblock_node_format_next_get(fnode); + evas_textblock_node_format_remove_pair(tb, (Evas_Object_Textblock_Node_Format *) fnode); + fnode = evas_textblock_node_format_first_get(tb); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ a")); + fnode = evas_textblock_node_format_next_get(fnode); + fail_if(!fnode); + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "- a")); + + /* Format list get */ + evas_object_textblock_text_markup_set(tb, "aab" + "bbcc"); + const Eina_List *flist = evas_textblock_node_format_list_get(tb, "a"); + const Eina_List *itr; + EINA_LIST_FOREACH(flist, itr, fnode) + { + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ a")); + } + + flist = evas_textblock_node_format_list_get(tb, "item"); + EINA_LIST_FOREACH(flist, itr, fnode) + { + fail_if(strcmp(evas_textblock_node_format_text_get(fnode), "+ item")); + } + + /* Make sure we get all the types of visible formats correctly. */ + evas_object_textblock_text_markup_set(tb, "a
aa"); + fail_if(strcmp(evas_textblock_node_format_text_get( + evas_textblock_cursor_format_get(cur)), "ps")); + fail_if(strcmp(evas_textblock_cursor_content_get(cur), "")); + fail_if(!evas_textblock_cursor_format_is_visible_get(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(strcmp(evas_textblock_node_format_text_get( + evas_textblock_cursor_format_get(cur)), "br")); + fail_if(strcmp(evas_textblock_cursor_content_get(cur), "
")); + fail_if(!evas_textblock_cursor_format_is_visible_get(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(strcmp(evas_textblock_node_format_text_get( + evas_textblock_cursor_format_get(cur)), "tab")); + fail_if(strcmp(evas_textblock_cursor_content_get(cur), "")); + fail_if(!evas_textblock_cursor_format_is_visible_get(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(!evas_textblock_cursor_char_next(cur)); + fail_if(strcmp(evas_textblock_node_format_text_get( + evas_textblock_cursor_format_get(cur)), "+ item")); + fail_if(strcmp(evas_textblock_cursor_content_get(cur), "")); + fail_if(!evas_textblock_cursor_format_is_visible_get(cur)); + + END_TB_TEST(); +} +END_TEST + +/* Different text styles, for example, shadow. */ +START_TEST(evas_textblock_style) +{ + Evas_Coord w, h, nw, nh; + Evas_Coord l, r, t, b; + START_TB_TEST(); + Evas_Textblock_Style *newst; + const char *buf = "TestTest2נסיון"; + evas_object_textblock_text_markup_set(tb, buf); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf)); + + evas_object_textblock_size_formatted_get(tb, &w, &h); + newst = evas_textblock_style_new(); + fail_if(!newst); + evas_textblock_style_set(newst, + "DEFAULT='font=Sans font_size=20 color=#000 text_class=entry'" + "br='\n'" + "ps='ps'" + "tab='\t'"); + evas_object_textblock_style_set(tb, newst); + evas_object_textblock_size_formatted_get(tb, &nw, &nh); + fail_if((w >= nw) || (h >= nh)); + + /* Style padding. */ + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 0) || (r != 0) || (t != 0) || (b != 0)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 0) || (r != 1) || (t != 0) || (b != 1)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 1) || (r != 1) || (t != 1) || (b != 1)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 2) || (r != 2) || (t != 2) || (b != 2)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 1) || (r != 2) || (t != 1) || (b != 2)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 1) || (r != 3) || (t != 1) || (b != 3)); + + evas_object_textblock_text_markup_set(tb, "Test"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4)); + + /* Mixed style padding */ + evas_object_textblock_text_markup_set(tb, + "TestTest"); + evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b); + fail_if((l != 1) || (r != 4) || (t != 1) || (b != 4)); + + END_TB_TEST(); +} +END_TEST + +/* Various setters and getters */ +START_TEST(evas_textblock_set_get) +{ + START_TB_TEST(); + const char *buf = ""; + evas_object_textblock_text_markup_set(tb, buf); + fail_if(strcmp(evas_textblock_style_get(st), style_buf)); + fail_if(evas_object_textblock_style_get(tb) != st); + evas_object_textblock_replace_char_set(tb, "|"); + fail_if(strcmp(evas_object_textblock_replace_char_get(tb), "|")); + evas_object_textblock_replace_char_set(tb, "ש"); + fail_if(strcmp(evas_object_textblock_replace_char_get(tb), "ש")); + + evas_object_textblock_valign_set(tb, -1.0); + fail_if(evas_object_textblock_valign_get(tb) != 0.0); + evas_object_textblock_valign_set(tb, 0.0); + fail_if(evas_object_textblock_valign_get(tb) != 0.0); + evas_object_textblock_valign_set(tb, 0.432); + fail_if(evas_object_textblock_valign_get(tb) != 0.432); + evas_object_textblock_valign_set(tb, 1.0); + fail_if(evas_object_textblock_valign_get(tb) != 1.0); + evas_object_textblock_valign_set(tb, 1.5); + fail_if(evas_object_textblock_valign_get(tb) != 1.0); + + evas_object_textblock_bidi_delimiters_set(tb, ",.|"); + fail_if(strcmp(evas_object_textblock_bidi_delimiters_get(tb), ",.|")); + evas_object_textblock_bidi_delimiters_set(tb, ",|"); + fail_if(strcmp(evas_object_textblock_bidi_delimiters_get(tb), ",|")); + evas_object_textblock_bidi_delimiters_set(tb, NULL); + fail_if(evas_object_textblock_bidi_delimiters_get(tb)); + evas_object_textblock_bidi_delimiters_set(tb, ",|"); + fail_if(strcmp(evas_object_textblock_bidi_delimiters_get(tb), ",|")); + + /* Hinting */ + evas_object_textblock_text_markup_set(tb, "This isa test
bla"); + /* Force relayout */ + evas_object_textblock_size_formatted_get(tb, NULL, NULL); + evas_font_hinting_set(evas, EVAS_FONT_HINTING_NONE); + evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); + evas_font_hinting_set(evas, EVAS_FONT_HINTING_BYTECODE); + END_TB_TEST(); +} +END_TEST + +/* Aux evas stuff, such as scale. */ +START_TEST(evas_textblock_evas) +{ + Evas_Coord w, h, sw, sh; + START_TB_TEST(); + const char *buf = "Test"; + evas_object_textblock_text_markup_set(tb, buf); + evas_object_textblock_size_formatted_get(tb, &w, &h); + evas_object_scale_set(tb, 3.0); + evas_object_textblock_size_formatted_get(tb, &sw, &sh); + fail_if((sw <= w) || (sh <= h)); + + evas_object_scale_set(tb, 0.5); + evas_object_textblock_size_formatted_get(tb, &sw, &sh); + fail_if((sw >= w) || (sh >= h)); + + END_TB_TEST(); +} +END_TEST + +/* All the string escaping stuff */ +START_TEST(evas_textblock_escaping) +{ + int len; + START_TB_TEST(); + fail_if(strcmp(evas_textblock_escape_string_get("&"), "&")); + fail_if(strcmp(evas_textblock_string_escape_get("&", &len), "&")); + fail_if(len != 1); + + fail_if(strcmp(evas_textblock_escape_string_get("·"), "\xc2\xb7")); + fail_if(strcmp(evas_textblock_string_escape_get("\xc2\xb7", &len), + "·")); + fail_if(len != 2); + + fail_if(strcmp(evas_textblock_escape_string_get("👙"), + "\xF0\x9F\x91\x99")); + fail_if(strcmp(evas_textblock_escape_string_get("👙"), + "\xF0\x9F\x91\x99")); + + fail_if(evas_textblock_escape_string_get("·aa")); + const char *tmp = "·aa"; + fail_if(strcmp(evas_textblock_escape_string_range_get(tmp, tmp + 8), + "\xc2\xb7")); + fail_if(evas_textblock_escape_string_range_get(tmp, tmp + 9)); + fail_if(evas_textblock_escape_string_range_get(tmp, tmp + 7)); + fail_if(evas_textblock_escape_string_range_get(tmp, tmp + 5)); + + const char *buf = "This · is"; + evas_object_textblock_text_markup_set(tb, buf); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf)); + + buf = "This   is"; + evas_object_textblock_text_markup_set(tb, buf); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), buf)); + + END_TB_TEST(); +} +END_TEST + +START_TEST(evas_textblock_size) +{ + START_TB_TEST(); + Evas_Coord w, h, h2, nw, nh; + const char *buf = "This is a
test.
גם בעברית"; + /* When wrapping is off, native size should be the same as formatted + * size */ + + evas_object_textblock_size_formatted_get(tb, &w, &h); + evas_object_textblock_size_native_get(tb, &nw, &nh); + fail_if((w != nw) || (h != nh)); + fail_if(w != 0); + + evas_object_textblock_text_markup_set(tb, "a
a"); + evas_object_textblock_size_formatted_get(tb, &w, &h2); + evas_object_textblock_size_native_get(tb, &nw, &nh); + fail_if((w != nw) || (h2 != nh)); + + /* Two lines == double the height */ + fail_if(h * 2 != h2); + + evas_object_textblock_text_markup_set(tb, buf); + + evas_object_textblock_size_formatted_get(tb, &w, &h); + evas_object_textblock_size_native_get(tb, &nw, &nh); + fail_if((w != nw) || (h != nh)); + fail_if(w <= 0); + + /* FIXME: There is a lot more to be done. */ + END_TB_TEST(); +} +END_TEST + +void evas_test_textblock(TCase *tc) +{ + tcase_add_test(tc, evas_textblock_simple); + tcase_add_test(tc, evas_textblock_cursor); + tcase_add_test(tc, evas_textblock_size); + tcase_add_test(tc, evas_textblock_editing); + tcase_add_test(tc, evas_textblock_style); + tcase_add_test(tc, evas_textblock_evas); + tcase_add_test(tc, evas_textblock_text_getters); + tcase_add_test(tc, evas_textblock_formats); + tcase_add_test(tc, evas_textblock_format_removal); + tcase_add_test(tc, evas_textblock_escaping); + tcase_add_test(tc, evas_textblock_set_get); + tcase_add_test(tc, evas_textblock_geometries); + tcase_add_test(tc, evas_textblock_various); + tcase_add_test(tc, evas_textblock_wrapping); + tcase_add_test(tc, evas_textblock_items); +} + 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 @@ +#ifndef EVAS_TEST_HELPERS_H +#define EVAS_TEST_HELPERS_H + +/* FIXME: Currently depends on the buffer engine, should we do anything + * fancier? */ + +#define EVAS_TEST_INIT_EVAS() _setup_evas() + +#define EVAS_TEST_FREE_EVAS() \ +do \ +{ \ + evas_textblock_cursor_free(cur); \ + evas_object_del(tb); \ + evas_textblock_style_free(st); \ + evas_free(evas); \ + evas_shutdown(); \ +} \ +while (0) + +static Evas * +_setup_evas() +{ + Evas *evas; + Evas_Engine_Info *einfo; + + evas_init(); + evas = evas_new(); + + evas_output_method_set(evas, evas_render_method_lookup("buffer")); + einfo = evas_engine_info_get(evas); + evas_engine_info_set(evas, einfo); + + evas_output_size_set(evas, 500, 500); + evas_output_viewport_set(evas, 0, 0, 500, 500); + + return evas; +} + +#endif + -- cgit v1.1