From c2f2c2101d138bf018fbddd8d329f7646cb58efc Mon Sep 17 00:00:00 2001 From: Ryuan Choi Date: Tue, 19 Nov 2013 13:18:02 +0000 Subject: [PATCH] Introduce check for unit testing framework of Elementary Reviewers: seoz, tasn CC: tasn, cedric Differential Revision: https://phab.enlightenment.org/D91 --- legacy/elementary/.gitignore | 1 + legacy/elementary/configure.ac | 18 ++++++ legacy/elementary/src/Makefile.am | 4 ++ legacy/elementary/src/tests/.gitignore | 5 ++ legacy/elementary/src/tests/Makefile.am | 37 ++++++++++++ legacy/elementary/src/tests/elm_suite.c | 59 ++++++++++++++++++++ legacy/elementary/src/tests/elm_suite.h | 9 +++ legacy/elementary/src/tests/elm_test_check.c | 56 +++++++++++++++++++ legacy/elementary/src/tests/elm_test_init.c | 18 ++++++ 9 files changed, 207 insertions(+) create mode 100644 legacy/elementary/src/tests/.gitignore create mode 100644 legacy/elementary/src/tests/Makefile.am create mode 100644 legacy/elementary/src/tests/elm_suite.c create mode 100644 legacy/elementary/src/tests/elm_suite.h create mode 100644 legacy/elementary/src/tests/elm_test_check.c create mode 100644 legacy/elementary/src/tests/elm_test_init.c diff --git a/legacy/elementary/.gitignore b/legacy/elementary/.gitignore index abdbd65fc3..8a3caf14ef 100644 --- a/legacy/elementary/.gitignore +++ b/legacy/elementary/.gitignore @@ -38,6 +38,7 @@ elementary-*-doc.tar.bz2 /ltmain.sh /missing /stamp-h1 +/test-driver core cscope.* tags diff --git a/legacy/elementary/configure.ac b/legacy/elementary/configure.ac index 3358d6e1e1..7188d394ce 100644 --- a/legacy/elementary/configure.ac +++ b/legacy/elementary/configure.ac @@ -617,6 +617,17 @@ if test "x$want_elementary_debug" = "xyes"; then fi AC_SUBST(ELM_DEBUG_DEF) +AC_ARG_WITH([tests], + [AC_HELP_STRING([--with-tests=none|regular], + [choose elementary testing method: regular or none.(coverage will be supported)@<:@default=none@:>@])], + [build_tests=${withval}], + [build_tests=none]) + +if test "${build_tests}" = "regular"; then + PKG_CHECK_MODULES([CHECK], [check >= 0.9.5]) +fi +AM_CONDITIONAL([ENABLE_ELEMENTARY_TESTS], [test "${build_tests}" = "regular"]) + ELM_ALLOCA_H_DEF="#undef" AC_CHECK_HEADER(alloca.h, [ELM_ALLOCA_H_DEF="#define"]) AC_SUBST(ELM_ALLOCA_H_DEF) @@ -714,6 +725,7 @@ src/modules/test_entry/Makefile src/modules/test_map/Makefile src/edje_externals/Makefile src/examples/Makefile +src/tests/Makefile data/Makefile data/themes/Makefile data/images/Makefile @@ -777,6 +789,12 @@ echo " CPPFLAGS.................: $CPPFLAGS" echo " CFLAGS...................: $CFLAGS" echo " LDFLAGS..................: $LDFLAGS" echo +if test "${build_tests}" = "none"; then +echo "Tests......................: no" +else +echo "Tests......................: make check" +fi +echo echo "Installation...............: make install (as root if needed, with 'su' or 'sudo')" echo " prefix...................: $prefix" echo diff --git a/legacy/elementary/src/Makefile.am b/legacy/elementary/src/Makefile.am index abaa75d7dd..b6dda4e5e1 100644 --- a/legacy/elementary/src/Makefile.am +++ b/legacy/elementary/src/Makefile.am @@ -8,3 +8,7 @@ SUBDIRS += modules edje_externals endif SUBDIRS += examples + +if ENABLE_ELEMENTARY_TESTS +SUBDIRS += tests +endif diff --git a/legacy/elementary/src/tests/.gitignore b/legacy/elementary/src/tests/.gitignore new file mode 100644 index 0000000000..4a2ff4da7a --- /dev/null +++ b/legacy/elementary/src/tests/.gitignore @@ -0,0 +1,5 @@ +/elm_suite +/check-results.xml +/elm_suite.log +/elm_suite.trs +/test-suite.log diff --git a/legacy/elementary/src/tests/Makefile.am b/legacy/elementary/src/tests/Makefile.am new file mode 100644 index 0000000000..49fc645ac0 --- /dev/null +++ b/legacy/elementary/src/tests/Makefile.am @@ -0,0 +1,37 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in + +TESTS = elm_suite +check_PROGRAMS = elm_suite +elm_suite_SOURCES = \ + elm_suite.c \ + elm_test_check.c \ + elm_test_init.c + +elm_suite_CPPFLAGS = \ + -DTESTS_BUILD_DIR=\"${top_builddir}/src/tests\" \ + -I$(top_srcdir)/src/lib \ + -I$(top_builddir)/src/lib \ + @CHECK_CFLAGS@ \ + @ELEMENTARY_CFLAGS@ \ + @ELEMENTARY_X_CFLAGS@ \ + @ELEMENTARY_FB_CFLAGS@ \ + @ELEMENTARY_SDL_CFLAGS@ \ + @ELEMENTARY_WIN32_CFLAGS@ \ + @ELEMENTARY_WINCE_CFLAGS@ \ + @ELEMENTARY_ELOCATION_CFLAGS@ \ + @ELEMENTARY_EWEATHER_CFLAGS@ \ + @ELEMENTARY_WEB_CFLAGS@ \ + @ELEMENTARY_EMAP_CFLAGS@ \ + @ELEMENTARY_WAYLAND_CFLAGS@ \ + @EVIL_CFLAGS@ + +elm_suite_LDADD = \ + $(top_builddir)/src/lib/libelementary.la \ + @CHECK_LIBS@ \ + @ELEMENTARY_EWEATHER_LIBS@ \ + @ELEMENTARY_ELOCATION_LIBS@ \ + @ELEMENTARY_EMAP_LIBS@ \ + @ELEMENTARY_LIBS@ \ + @ELEMENTARY_WEB_LIBS@ \ + @my_libs@ diff --git a/legacy/elementary/src/tests/elm_suite.c b/legacy/elementary/src/tests/elm_suite.c new file mode 100644 index 0000000000..d3c09236c4 --- /dev/null +++ b/legacy/elementary/src/tests/elm_suite.c @@ -0,0 +1,59 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include +#include "elm_suite.h" + +typedef struct _Elementary_Test_Case Elementary_Test_Case; + +struct _Elementary_Test_Case +{ + const char *test_case; + void (*build)(TCase *tc); +}; + +static const Elementary_Test_Case etc[] = { + { "Elementary", elm_test_init }, + { "elm_check", elm_test_check }, + { NULL, NULL } +}; + +Suite * +elm_suite() +{ + TCase *tc; + Suite *s; + int i; + + s = suite_create("Elementary"); + + for (i = 0; etc[i].test_case; ++i) + { + 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 __UNUSED__, char **argv __UNUSED__) +{ + int failed_count; + Suite *s; + SRunner *sr; + + s = elm_suite(); + sr = srunner_create(s); + + srunner_set_xml(sr, TESTS_BUILD_DIR "/check-results.xml"); + + srunner_run_all(sr, CK_ENV); + failed_count = srunner_ntests_failed(sr); + srunner_free(sr); + + return (failed_count == 0) ? 0 : 255; +} diff --git a/legacy/elementary/src/tests/elm_suite.h b/legacy/elementary/src/tests/elm_suite.h new file mode 100644 index 0000000000..ec13e38b26 --- /dev/null +++ b/legacy/elementary/src/tests/elm_suite.h @@ -0,0 +1,9 @@ +#ifndef _ELM_SUITE_H +#define _ELM_SUITE_H + +#include + +void elm_test_init(TCase *tc); +void elm_test_check(TCase *tc); + +#endif /* _ELM_SUITE_H */ diff --git a/legacy/elementary/src/tests/elm_test_check.c b/legacy/elementary/src/tests/elm_test_check.c new file mode 100644 index 0000000000..5c3eb2d08d --- /dev/null +++ b/legacy/elementary/src/tests/elm_test_check.c @@ -0,0 +1,56 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include +#include "elm_suite.h" + +START_TEST (elm_check_onoff_text) +{ + Evas_Object *win, *check; + + elm_init(1, NULL); + win = elm_win_add(NULL, "check", ELM_WIN_BASIC); + + check = elm_check_add(win); + elm_object_style_set(check, "toggle"); + elm_object_part_text_set(check, "on", "OnText"); + elm_object_part_text_set(check, "off", "OffText"); + + ck_assert_str_eq(elm_object_part_text_get(check, "on"), "OnText"); + ck_assert_str_eq(elm_object_part_text_get(check, "off"), "OffText"); + + elm_object_style_set(check, "default"); + ck_assert(elm_object_part_text_get(check, "on") == NULL); + ck_assert(elm_object_part_text_get(check, "off") == NULL); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_check_state) +{ + Evas_Object *win, *check; + Eina_Bool state = EINA_TRUE; + + elm_init(1, NULL); + win = elm_win_add(NULL, "check", ELM_WIN_BASIC); + + check = elm_check_add(win); + elm_check_state_pointer_set(check, &state); + ck_assert(elm_check_state_get(check) == EINA_TRUE); + ck_assert(state == EINA_TRUE); + + elm_check_state_set(check, EINA_FALSE); + ck_assert(elm_check_state_get(check) == EINA_FALSE); + ck_assert(state == EINA_FALSE); + + elm_shutdown(); +} +END_TEST + +void elm_test_check(TCase *tc) +{ + tcase_add_test(tc, elm_check_onoff_text); + tcase_add_test(tc, elm_check_state); +} diff --git a/legacy/elementary/src/tests/elm_test_init.c b/legacy/elementary/src/tests/elm_test_init.c new file mode 100644 index 0000000000..3e3210c9f7 --- /dev/null +++ b/legacy/elementary/src/tests/elm_test_init.c @@ -0,0 +1,18 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include +#include "elm_suite.h" + +START_TEST (elm_main) +{ + ck_assert(elm_init(1, NULL) == 1); + ck_assert(elm_shutdown() == 0); +} +END_TEST + +void elm_test_init(TCase *tc) +{ + tcase_add_test(tc, elm_main); +}