# get rid of that stupid cache mechanism
rm -f config.cache
-AC_INIT([e_test_case], [0.1.0], [enlightenment-devel@lists.sourceforge.net])
+AC_INIT([e_test_runner], [0.1.0], [enlightenment-devel@lists.sourceforge.net])
AC_PREREQ([2.52])
AC_CONFIG_SRCDIR([configure.ac])
AM_INIT_AUTOMAKE([1.11])
-GETTEXT_PACKAGE="e_test_case"
+GETTEXT_PACKAGE="e_test_runner"
AC_SUBST([GETTEXT_PACKAGE])
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "$GETTEXT_PACKAGE", [Gettext package])
capi-ui-efl-util \
"
-PKG_CHECK_MODULES(E_TEST_CASE, [${requirements}])
+PKG_CHECK_MODULES(E_TEST_RUNNER, [${requirements}])
AC_CONFIG_FILES([
Makefile
Name: e-tizen-testcase
Version: 0.0.1
Release: 1
-Summary: The test case module for enlightenment
+Summary: The test case runner for enlightenment
URL: http://www.enlightenment.org
Group: Graphics & UI Framework/Other
Source0: %{name}-%{version}.tar.gz
%endif
%description
-This package is a test case module for enlightenment.
+This package is a test case runner for enlightenment.
%prep
%setup -q
%files
%defattr(-,root,root,-)
/usr/share/license/%{name}
-%{_bindir}/e_test_case
+%{_bindir}/e_test_runner
-#include "e_tc_main.h"
+#include "e_test_runner.h"
static void
_cb_introspect(void *data,
res = eldbus_message_arguments_get(msg, "s", &arg);
EINA_SAFETY_ON_FALSE_GOTO(res, finish);
- if ((!strstr(arg, "method name=\"RegisterWindow\"" )) ||
- (!strstr(arg, "method name=\"DeregisterWindow\"")) ||
- (!strstr(arg, "method name=\"GetClients\"" )) ||
- (!strstr(arg, "method name=\"ChangeStack\"" )) ||
- (!strstr(arg, "signal name=\"ChangeVisibility\"")) ||
- (!strstr(arg, "signal name=\"Restack\"" )) ||
- (!strstr(arg, "property name=\"Registrant\"" )))
+ if ((!strstr(arg, "method name=\"RegisterWindow\"" )) ||
+ (!strstr(arg, "method name=\"DeregisterWindow\"" )) ||
+ (!strstr(arg, "method name=\"SetWindowStack\"" )) ||
+ (!strstr(arg, "method name=\"GetWindowInfo\"" )) ||
+ (!strstr(arg, "signal name=\"VisibilityChanged\"")) ||
+ (!strstr(arg, "signal name=\"StackChanged\"" )) ||
+ (!strstr(arg, "property name=\"Registrant\"" )))
{
+ ERR("missing mehod, signal or property:%s\n", arg);
goto finish;
}
EINA_SAFETY_ON_NULL_GOTO(tw, finish);
/* check RegisterWindow method */
- res = e_tc_runner_req_win_register(tc->runner, tw);
+ res = e_test_runner_req_win_register(tc->runner, tw);
EINA_SAFETY_ON_FALSE_GOTO(res, finish);
/* check whether registered window id is same */
EINA_SAFETY_ON_FALSE_RETURN_VAL(tc->passed, EINA_FALSE);
/* check DeregisterWindow method */
- res = e_tc_runner_req_win_deregister(tc->runner, tw);
+ res = e_test_runner_req_win_deregister(tc->runner, tw);
EINA_SAFETY_ON_FALSE_GOTO(res, finish);
tc->passed = EINA_TRUE;
-#include "e_tc_main.h"
+#include "e_test_runner.h"
struct _E_TC_Data
{
200);
EINA_SAFETY_ON_NULL_GOTO(tc->data->tw, cleanup);
- res = e_tc_runner_req_win_register(tc->runner, tc->data->tw);
+ res = e_test_runner_req_win_register(tc->runner, tc->data->tw);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
e_tc_win_geom_update(tc->data->tw);
e_tc_win_show(tc->data->tw);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_VIS_ON);
+ res = e_test_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_VIS_ON);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
return EINA_TRUE;
e_tc_win_hide(tc->data->tw);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_VIS_OFF);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
-
return EINA_TRUE;
}
{
EINA_SAFETY_ON_NULL_RETURN(tc->data);
- e_tc_runner_req_win_deregister(tc->runner, tc->data->tw);
+ e_test_runner_req_win_deregister(tc->runner, tc->data->tw);
e_tc_win_del(tc->data->tw);
E_FREE(tc->data);
tw = tc->data->tw;
- list = e_tc_runner_req_win_info_list_get(tc->runner);
+ list = e_test_runner_req_win_info_list_get(tc->runner);
EINA_SAFETY_ON_NULL_GOTO(list, cleanup);
EINA_LIST_FOREACH(list, l, tw2)
tw = tc->data->tw;
- list = e_tc_runner_req_win_info_list_get(tc->runner);
+ list = e_test_runner_req_win_info_list_get(tc->runner);
EINA_SAFETY_ON_NULL_GOTO(list, cleanup);
EINA_LIST_FOREACH(list, l, tw2)
-#include "e_tc_main.h"
+#include "e_test_runner.h"
struct _E_TC_Data
{
200);
EINA_SAFETY_ON_NULL_GOTO(tc->data->tw, cleanup);
- res = e_tc_runner_req_win_register(tc->runner, tc->data->tw);
+ res = e_test_runner_req_win_register(tc->runner, tc->data->tw);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
e_tc_win_geom_update(tc->data->tw_parent);
e_tc_win_geom_update(tc->data->tw_child);
e_tc_win_show(tc->data->tw_child);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_VIS_ON);
+ res = e_test_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_VIS_ON);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
return EINA_TRUE;
e_tc_win_hide(tc->data->tw);
e_tc_win_hide(tc->data->tw_parent);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_VIS_OFF);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
-
return EINA_TRUE;
}
{
EINA_SAFETY_ON_NULL_RETURN(tc->data);
- e_tc_runner_req_win_deregister(tc->runner, tc->data->tw);
+ e_test_runner_req_win_deregister(tc->runner, tc->data->tw);
e_tc_win_del(tc->data->tw_parent);
e_tc_win_del(tc->data->tw);
e_tc_win_del(tc->data->tw_child);
res = _tc_pre_run(tc);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
- list = e_tc_runner_req_win_info_list_get(tc->runner);
+ list = e_test_runner_req_win_info_list_get(tc->runner);
EINA_SAFETY_ON_NULL_GOTO(list, cleanup);
tw = tc->data->tw;
e_tc_win_stack_change(tw, NULL, EINA_TRUE);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_RAISE);
+ res = e_test_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_RAISE);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
- list = e_tc_runner_req_win_info_list_get(tc->runner);
+ list = e_test_runner_req_win_info_list_get(tc->runner);
EINA_SAFETY_ON_NULL_GOTO(list, cleanup);
tw2 = eina_list_nth(list, 0);
e_tc_win_stack_change(tw, NULL, EINA_FALSE);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_LOWER);
+ res = e_test_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_LOWER);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
- list = e_tc_runner_req_win_info_list_get(tc->runner);
+ list = e_test_runner_req_win_info_list_get(tc->runner);
EINA_SAFETY_ON_NULL_GOTO(list, cleanup);
tw2 = eina_list_last_data_get(list);
e_tc_win_stack_change(tw_parent, tw, EINA_TRUE);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_ABOVE);
+ res = e_test_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_ABOVE);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
- list = e_tc_runner_req_win_info_list_get(tc->runner);
+ list = e_test_runner_req_win_info_list_get(tc->runner);
EINA_SAFETY_ON_NULL_GOTO(list, cleanup);
EINA_LIST_FOREACH(list, l, tw2)
e_tc_win_stack_change(tw_parent, tw, EINA_FALSE);
- res = e_tc_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_BELOW);
+ res = e_test_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_STACK_BELOW);
EINA_SAFETY_ON_FALSE_GOTO(res, cleanup);
- list = e_tc_runner_req_win_info_list_get(tc->runner);
+ list = e_test_runner_req_win_info_list_get(tc->runner);
EINA_SAFETY_ON_NULL_GOTO(list, cleanup);
EINA_LIST_FOREACH(list, l, tw2)
#include <efl_util.h>
-#include "e_tc_main.h"
+#include "e_test_runner.h"
#if 0
#define TC_NWIN_W 400
-bin_PROGRAMS = e_test_case
+bin_PROGRAMS = e_test_runner
-e_test_case_CPPFLAGS = \
+e_test_runner_CPPFLAGS = \
-I. \
-@E_TEST_CASE_CFLAGS@
+@E_TEST_RUNNER_CFLAGS@
-e_test_case_LDADD = \
-@E_TEST_CASE_LIBS@
+e_test_runner_LDADD = \
+@E_TEST_RUNNER_LIBS@
-e_test_case_SOURCES = \
-e_tc_main.c \
-e_tc_main.h \
+e_test_runner_SOURCES = \
+e_test_runner.c \
+e_test_runner.h \
0000_easy.c \
0100_base_operation.c \
0200_transient_for.c \
+++ /dev/null
-#include "e_tc_main.h"
-
-int _log_dom = -1;
-
-static void
-_cb_method_win_info_list_get(void *data,
- const Eldbus_Message *msg,
- Eldbus_Pending *p EINA_UNUSED)
-{
- const char *name = NULL, *text = NULL;
- Eldbus_Message_Iter *array, *ec;
- Ecore_Window target_win = 0;
- Eina_List *list = data;
- Eina_Bool res;
-
- res = eldbus_message_error_get(msg, &name, &text);
- EINA_SAFETY_ON_TRUE_GOTO(res, finish);
-
- res = eldbus_message_arguments_get(msg, "ua(usiiiiibb)", &target_win, &array);
- EINA_SAFETY_ON_FALSE_GOTO(res, finish);
-
- list = eina_list_free(list);
-
- while (eldbus_message_iter_get_and_next(array, 'r', &ec))
- {
- const char *win_name;
- int x, y, w, h, layer;
- Eina_Bool visible, alpha;
- Ecore_Window native_win;
- E_TC_Win *tw = NULL;
-
- res = eldbus_message_iter_arguments_get(ec,
- "usiiiiibb",
- &native_win,
- &win_name,
- &x,
- &y,
- &w,
- &h,
- &layer,
- &visible,
- &alpha);
- if (!res)
- {
- WRN("Failed to get win info\n");
- continue;
- }
-
- tw = e_tc_win_info_add(native_win, alpha, win_name, x, y, w, h, layer);
- list = eina_list_append(list, tw);
- }
-
-finish:
- if ((name) || (text))
- {
- ERR("errname:%s errmsg:%s\n", name, text);
- }
-
- elm_exit();
-}
-
-static void
-_cb_method_window_register(void *data,
- const Eldbus_Message *msg,
- Eldbus_Pending *p EINA_UNUSED)
-{
- const char *name = NULL, *text = NULL;
- Eina_Bool res;
- Eina_Bool *accepted = data;
-
- *accepted = EINA_FALSE;
-
- res = eldbus_message_error_get(msg, &name, &text);
- EINA_SAFETY_ON_TRUE_GOTO(res, finish);
-
- res = eldbus_message_arguments_get(msg, "b", accepted);
- EINA_SAFETY_ON_FALSE_GOTO(res, finish);
- EINA_SAFETY_ON_FALSE_GOTO(*accepted, finish);
-
-finish:
- if ((name) || (text))
- {
- ERR("errname:%s errmsg:%s\n", name, text);
- }
-
- elm_exit();
-}
-
-static void
-_cb_method_window_deregister(void *data,
- const Eldbus_Message *msg,
- Eldbus_Pending *p EINA_UNUSED)
-{
- const char *name = NULL, *text = NULL;
- Eina_Bool res;
- Eina_Bool *allowed = data;
-
- *allowed = EINA_FALSE;
-
- res = eldbus_message_error_get(msg, &name, &text);
- EINA_SAFETY_ON_TRUE_GOTO(res, finish);
-
- res = eldbus_message_arguments_get(msg, "b", allowed);
- EINA_SAFETY_ON_FALSE_GOTO(res, finish);
- EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
-
-finish:
- if ((name) || (text))
- {
- ERR("errname:%s errmsg:%s\n", name, text);
- }
-
- elm_exit();
-}
-
-static void
-_cb_signal_vis_changed(void *data,
- const Eldbus_Message *msg)
-{
- E_TC_Runner *runner = data;
- const char *name = NULL, *text = NULL;
- Eina_Bool res;
- int vis = 0;
- Ecore_Window id;
-
- res = eldbus_message_error_get(msg, &name, &text);
- EINA_SAFETY_ON_TRUE_GOTO(res, finish);
-
- res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
- EINA_SAFETY_ON_FALSE_GOTO(res, finish);
-
- /* TODO */
- if (((E_TC_EVENT_TYPE_VIS_ON == runner->ev.expect) && ( vis)) ||
- ((E_TC_EVENT_TYPE_VIS_OFF == runner->ev.expect) && (!vis)))
- {
- runner->ev.response = runner->ev.expect;
- elm_exit();
- }
-
-finish:
- if ((name) || (text))
- {
- ERR("errname:%s errmsg:%s\n", name, text);
- }
-}
-
-static void
-_cb_signal_stack_changed(void *data,
- const Eldbus_Message *msg)
-{
- E_TC_Runner *runner = data;
- const char *name = NULL, *text = NULL;
- Eina_Bool res;
-
- res = eldbus_message_error_get(msg, &name, &text);
- EINA_SAFETY_ON_TRUE_GOTO(res, finish);
-
- /* TODO */
- if ((E_TC_EVENT_TYPE_STACK_RAISE <= runner->ev.expect) &&
- (E_TC_EVENT_TYPE_STACK_BELOW >= runner->ev.expect))
- {
- runner->ev.response = runner->ev.expect;
- elm_exit();
- }
-
-finish:
- if ((name) || (text))
- {
- ERR("errname:%s errmsg:%s\n", name, text);
- }
-}
-
-static Eina_Bool
-_ev_wait_timeout(void *data)
-{
- E_TC_Runner *runner = data;
-
- runner->ev.expire_timer = NULL;
- runner->ev.response = E_TC_EVENT_TYPE_TIMEOUT;
-
- ERR("ev:%d\n", runner->ev.expect);
-
- elm_exit();
-
- return ECORE_CALLBACK_DONE;
-}
-
-Eina_Bool
-e_tc_runner_req_win_register(E_TC_Runner *runner,
- E_TC_Win *tw)
-{
- Eldbus_Pending *p;
- Eina_Bool accepted = EINA_FALSE;
-
- p = eldbus_proxy_call(runner->dbus.proxy,
- "RegisterWindow",
- _cb_method_window_register,
- &accepted,
- -1,
- "u",
- tw->native_win);
- EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
-
- elm_run();
-
- return accepted;
-}
-
-Eina_Bool
-e_tc_runner_req_win_deregister(E_TC_Runner *runner,
- E_TC_Win *tw)
-{
- Eldbus_Pending *p;
- Eina_Bool allowed = EINA_FALSE;
-
- p = eldbus_proxy_call(runner->dbus.proxy,
- "DeregisterWindow",
- _cb_method_window_deregister,
- &allowed,
- -1,
- "u",
- tw->native_win);
- EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
-
- elm_run();
-
- return allowed;
-}
-
-Eina_List *
-e_tc_runner_req_win_info_list_get(E_TC_Runner *runner)
-{
- Eldbus_Pending *p;
- Eina_List *list = NULL;
-
- p = eldbus_proxy_call(runner->dbus.proxy,
- "GetClients",
- _cb_method_win_info_list_get,
- list,
- -1,
- "");
- EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
-
- elm_run();
-
- return list;
-}
-
-Eina_Bool
-e_tc_runner_ev_wait(E_TC_Runner *runner,
- E_TC_Event_Type ev)
-{
- Eldbus_Signal_Handler *sh;
- Eina_Bool res = EINA_FALSE;
-
- EINA_SAFETY_ON_FALSE_RETURN_VAL((E_TC_EVENT_TYPE_NONE < ev), res);
- EINA_SAFETY_ON_FALSE_RETURN_VAL((E_TC_EVENT_TYPE_MAX > ev), res);
-
- switch (ev)
- {
- case E_TC_EVENT_TYPE_VIS_ON:
- case E_TC_EVENT_TYPE_VIS_OFF:
- sh = eldbus_proxy_signal_handler_add(runner->dbus.proxy,
- "ChangeVisibility",
- _cb_signal_vis_changed,
- runner);
- EINA_SAFETY_ON_NULL_GOTO(sh, finish);
- break;
-
- case E_TC_EVENT_TYPE_STACK_RAISE:
- case E_TC_EVENT_TYPE_STACK_LOWER:
- case E_TC_EVENT_TYPE_STACK_ABOVE:
- case E_TC_EVENT_TYPE_STACK_BELOW:
- sh = eldbus_proxy_signal_handler_add(runner->dbus.proxy,
- "ChangeStack",
- _cb_signal_stack_changed,
- runner);
- EINA_SAFETY_ON_NULL_GOTO(sh, finish);
- break;
-
- default:
- goto finish;
- break;
- }
-
- if (runner->ev.expire_timer)
- ecore_timer_del(runner->ev.expire_timer);
-
- runner->ev.expect = ev;
- runner->ev.response = E_TC_EVENT_TYPE_NONE;
- runner->ev.expire_timer = ecore_timer_add(2.0, _ev_wait_timeout, runner);
-
- elm_run();
-
- if (runner->ev.expire_timer)
- {
- ecore_timer_del(runner->ev.expire_timer);
- runner->ev.expire_timer = NULL;
- }
-
- eldbus_signal_handler_del(sh);
-
- res = (runner->ev.response == runner->ev.expect);
- EINA_SAFETY_ON_FALSE_GOTO(res, finish);
-
-finish:
- runner->ev.expect = E_TC_EVENT_TYPE_NONE;
- runner->ev.response = E_TC_EVENT_TYPE_NONE;
-
- return res;
-}
-
-E_TC_Win *
-e_tc_win_add(E_TC_Win *parent,
- Elm_Win_Type type,
- Eina_Bool alpha,
- const char *name,
- int x, int y,
- int w, int h,
- int layer)
-{
- E_TC_Win *tw = NULL;
- Evas_Object *elm_win = NULL, *bg = NULL;
- Evas_Object *p_elm_win = NULL;
-
- if (parent) p_elm_win = parent->elm_win;
-
- elm_win = elm_win_add(p_elm_win, name, ELM_WIN_BASIC);
- EINA_SAFETY_ON_NULL_GOTO(elm_win, err);
-
- if (alpha) elm_win_alpha_set(elm_win, EINA_TRUE);
-
- elm_win_title_set(elm_win, name);
- elm_win_autodel_set(elm_win, EINA_FALSE);
-
- bg = elm_bg_add(elm_win);
- evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(elm_win, bg);
- elm_bg_color_set(bg, 0, 120, 100);
- evas_object_show(bg);
-
- tw = E_NEW(E_TC_Win, 1);
- EINA_SAFETY_ON_NULL_RETURN_VAL(tw, NULL);
-
- tw->elm_win = elm_win;
- tw->native_win = elm_win_xwindow_get(elm_win); // TODO: wayland
- tw->name = eina_stringshare_add(name);
- tw->x = x;
- tw->y = y;
- tw->w = w;
- tw->h = h;
- tw->layer = layer;
- tw->alpha = alpha;
-
- return tw;
-
-err:
- evas_object_del(elm_win);
- E_FREE(tw);
-
- return NULL;
-}
-
-E_TC_Win *
-e_tc_win_info_add(Ecore_Window native_win,
- Eina_Bool alpha,
- const char *name,
- int x, int y,
- int w, int h,
- int layer)
-{
- E_TC_Win *tw = NULL;
-
- tw = E_NEW(E_TC_Win, 1);
- EINA_SAFETY_ON_NULL_RETURN_VAL(tw, NULL);
-
- tw->elm_win = NULL;
- tw->native_win = native_win;
- tw->name = eina_stringshare_add(name);
- tw->x = x;
- tw->y = y;
- tw->w = w;
- tw->h = h;
- tw->layer = layer;
- tw->alpha = alpha;
-
- return tw;
-}
-
-void
-e_tc_win_del(E_TC_Win *tw)
-{
- EINA_SAFETY_ON_NULL_RETURN(tw);
-
- if (tw->elm_win)
- evas_object_del(tw->elm_win);
-
- if (tw->name)
- eina_stringshare_del(tw->name);
-
- E_FREE(tw);
-}
-
-void
-e_tc_win_geom_update(E_TC_Win *tw)
-{
- evas_object_move(tw->elm_win, tw->x, tw->y);
- evas_object_resize(tw->elm_win, tw->w, tw->h);
-}
-
-void
-e_tc_win_show(E_TC_Win *tw)
-{
- evas_object_show(tw->elm_win);
-}
-
-void
-e_tc_win_hide(E_TC_Win *tw)
-{
- evas_object_hide(tw->elm_win);
-}
-
-void
-e_tc_win_stack_change(E_TC_Win *tw, E_TC_Win *sibling, Eina_Bool above)
-{
- /* TODO */
- if (sibling)
- {
- if (above)
- {
- ; // stack above: window is placed above sibling window.
- }
- else
- {
- ; // stack below: window is placed below sibling window.
- }
- }
- else
- {
- if (above)
- {
- ; // raise: window is placed at the top of stack.
- }
- else
- {
- ; // lower: window is placed at the bottom of stack.
- }
- }
-}
-
-static E_TC *
-_e_tc_add(unsigned int num,
- const char *name,
- Eina_Bool (*func)(E_TC*),
- Eina_Bool expect,
- E_TC_Runner *runner)
-{
- E_TC *tc;
-
- tc = E_NEW(E_TC, 1);
-
- tc->num = num;
- tc->name = name;
- tc->func = func;
- tc->expect = expect;
- tc->runner = runner;
-
- runner->tc_list = eina_list_append(runner->tc_list, tc);
-
- return tc;
-}
-
-#undef TC_ADD
-#define TC_ADD(num, name, func, expect) _e_tc_add(num, name, func, expect, runner)
-
-static void
-_e_tc_runner_init(E_TC_Runner *runner)
-{
-#undef T_FUNC
-#define T_FUNC(num_, test_) tc_000##num_##_##test_
- /* [0000 - 0099] test runner verification */
- TC_ADD( 0, "Base: Pass", T_FUNC( 0, base_pass ), 1);
- TC_ADD( 1, "Base: Fail", T_FUNC( 1, base_fail ), 0);
-#undef T_FUNC
-#define T_FUNC(num_, test_) tc_00##num_##_##test_
- TC_ADD( 10, "DBus: Introspect", T_FUNC( 10, introspect ), 1);
- TC_ADD( 11, "DBus: Window register", T_FUNC( 11, win_register ), 1);
-#undef T_FUNC
-#define T_FUNC(num_, test_) tc_0##num_##_##test_
- /* [0100 - 0199] window base operation */
- TC_ADD( 100, "Basic window: Show", T_FUNC( 100, win_show ), 1);
- TC_ADD( 101, "Basic window: Stack", T_FUNC( 101, win_stack ), 1);
- TC_ADD( 110, "Alpha window: Show", T_FUNC( 110, alpha_win_show ), 1);
- TC_ADD( 111, "Alpha window: Stack", T_FUNC( 111, alpha_win_stack ), 1);
- /* [0200 - 0299] transient for */
- TC_ADD( 200, "Transient for: Basic", T_FUNC( 200, transient_for_basic ), 1);
- TC_ADD( 201, "Transient for: Raise", T_FUNC( 201, transient_for_raise ), 1);
- TC_ADD( 202, "Transient for: Lower", T_FUNC( 202, transient_for_lower ), 1);
- TC_ADD( 203, "Transient for: Stack above", T_FUNC( 203, transient_for_stack_above), 1);
- TC_ADD( 204, "Transient for: Stack below", T_FUNC( 204, transient_for_stack_below), 1);
- /* [0300 - 0399] notification */
- /* TODO */
-#undef T_FUNC
-}
-
-static void
-_e_tc_runner_shutdown(E_TC_Runner *runner)
-{
- E_TC *tc;
-
- EINA_LIST_FREE(runner->tc_list, tc)
- {
- E_FREE(tc);
- }
-}
-
-static void
-_e_tc_runner_run(E_TC_Runner *runner)
-{
- Eina_List *l;
- E_TC *tc;
- Eina_Bool pass;
-
- EINA_LIST_FOREACH(runner->tc_list, l, tc)
- {
- pass = tc->func(tc);
- tc->passed = (pass == tc->expect);
-
- printf("TEST \"%s\" : %s\n",
- tc->name,
- tc->passed ? "PASS" : "FAIL");
- }
-}
-
-static void
-_e_tc_runner_result(E_TC_Runner *runner)
-{
- Eina_Strbuf *buf;
- Eina_List *l;
- E_TC *tc;
- int pass_case = 0;
- int fail_case = 0;
- int total = 0;
-
- if (!(buf = eina_strbuf_new())) return;
-
- eina_strbuf_append(buf, "\n\n");
- eina_strbuf_append(buf, "==============================================\n");
- eina_strbuf_append(buf, "TEST CASE RESULT\n");
- eina_strbuf_append(buf, "==============================================\n");
-
- EINA_LIST_FOREACH(runner->tc_list, l, tc)
- {
- eina_strbuf_append_printf(buf,
- "[%04d] TEST \"%-30.30s\" : %s\n",
- tc->num,
- tc->name,
- tc->passed ? "PASS" : "FAIL");
-
- total++;
- tc->passed ? pass_case++ : fail_case++;
- }
-
- eina_strbuf_append(buf, "==============================================\n");
- eina_strbuf_append_printf(buf, "TOTAL: %4d Cases\n", total);
- eina_strbuf_append_printf(buf, "PASS : %4d Cases\n", pass_case);
- eina_strbuf_append_printf(buf, "FAIL : %4d Cases\n", fail_case);
- eina_strbuf_append(buf, "==============================================\n");
-
- printf("%s", eina_strbuf_string_get(buf));
-}
-
-EAPI_MAIN int
-elm_main(int argc EINA_UNUSED,
- char **argv EINA_UNUSED)
-{
- E_TC_Runner *runner = NULL;
- int res;
-
- runner = E_NEW(E_TC_Runner, 1);
- EINA_SAFETY_ON_NULL_GOTO(runner, err);
-
- _log_dom = eina_log_domain_register("e-tc", EINA_COLOR_BLUE);
- if (_log_dom < 0)
- {
- ERR("Can't register e-tc log domain.");
- goto err;
- }
-
- res = eldbus_init();
- EINA_SAFETY_ON_FALSE_GOTO((res > 0), err);
-
- runner->dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
- if (!runner->dbus.conn)
- {
- ERR("Can't get dbus connection.");
- goto err;
- }
-
- runner->dbus.obj = eldbus_object_get(runner->dbus.conn,
- "org.enlightenment.wm",
- "/org/enlightenment/wm");
- if (!runner->dbus.obj)
- {
- ERR("Can't get dbus object.");
- goto err;
- }
-
- runner->dbus.proxy = eldbus_proxy_get(runner->dbus.obj,
- "org.enlightenment.wm.Test");
- if (!runner->dbus.proxy)
- {
- ERR("Can't get dbus proxy.");
- goto err;
- }
-
- _e_tc_runner_init(runner);
- _e_tc_runner_run(runner);
- _e_tc_runner_result(runner);
- _e_tc_runner_shutdown(runner);
-
- eldbus_proxy_unref(runner->dbus.proxy);
- eldbus_object_unref(runner->dbus.obj);
- eldbus_connection_unref(runner->dbus.conn);
- eldbus_shutdown();
- eina_log_domain_unregister(_log_dom);
-
- E_FREE(runner);
- return 0;
-
-err:
- E_FREE(runner);
- return -1;
-}
-ELM_MAIN()
+++ /dev/null
-#ifndef E_TC_MAIN_H
-#define E_TC_MAIN_H
-
-#include <Eldbus.h>
-#include <Elementary.h>
-
-extern int _log_dom;
-
-#ifdef ERR
-# undef ERR
-#endif
-#define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__)
-
-#ifdef DBG
-# undef DBG
-#endif
-#define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__)
-
-#ifdef INF
-# undef INF
-#endif
-#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
-
-#ifdef WRN
-# undef WRN
-#endif
-#define WRN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__)
-
-#ifdef CRI
-# undef CRI
-#endif
-#define CRI(...) EINA_LOG_DOM_CRIT(_log_dom, __VA_ARGS__)
-
-#ifdef E_NEW
-# undef E_NEW
-#endif
-# define E_NEW(s, n) (s *)calloc(n, sizeof(s))
-
-#ifdef E_FREE
-# undef E_FREE
-#endif
-# define E_FREE(p) do { free(p); p = NULL; } while (0)
-
-#ifdef E_FREE_LIST
-# undef E_FREE_LIST
-#endif
-# define E_FREE_LIST(list, free) \
- do \
- { \
- void *_tmp_; \
- EINA_LIST_FREE(list, _tmp_) \
- { \
- free(_tmp_); \
- } \
- } \
- while (0)
-
-typedef enum _E_TC_Event_Type
-{
- E_TC_EVENT_TYPE_NONE = 0,
- E_TC_EVENT_TYPE_TIMEOUT,
- E_TC_EVENT_TYPE_VIS_ON,
- E_TC_EVENT_TYPE_VIS_OFF,
- E_TC_EVENT_TYPE_STACK_RAISE,
- E_TC_EVENT_TYPE_STACK_LOWER,
- E_TC_EVENT_TYPE_STACK_ABOVE,
- E_TC_EVENT_TYPE_STACK_BELOW,
- E_TC_EVENT_TYPE_MAX
-} E_TC_Event_Type;
-
-typedef struct _E_TC_Runner E_TC_Runner;
-typedef struct _E_TC_Win E_TC_Win;
-typedef struct _E_TC E_TC;
-typedef struct _E_TC_Data E_TC_Data;
-
-struct _E_TC_Runner
-{
- Eina_List *tc_list; // test suite
-
- struct
- {
- Ecore_Timer *expire_timer;
- E_TC_Event_Type expect;
- E_TC_Event_Type response;
- } ev;
-
- struct
- {
- Eldbus_Connection *conn;
- Eldbus_Proxy *proxy;
- Eldbus_Object *obj;
- } dbus;
-};
-
-struct _E_TC_Win
-{
- Evas_Object *elm_win; // elm_win evas object
- Ecore_Window native_win; // native window id
- const char *name; // name of client window
- int x, y, w, h; // geometry
- int layer; // value of E_Layer
- int vis; // visibility
- int alpha; // alpha window
-};
-
-struct _E_TC
-{
- const char *name;
- unsigned int num;
- Eina_Bool (*func) (E_TC *tc);
- Eina_Bool passed;
- Eina_Bool expect;
- E_TC_Runner *runner;
- E_TC_Data *data;
-};
-
-Eina_Bool e_tc_runner_req_win_register(E_TC_Runner *runner, E_TC_Win *tw);
-Eina_Bool e_tc_runner_req_win_deregister(E_TC_Runner *runner, E_TC_Win *tw);
-Eina_List *e_tc_runner_req_win_info_list_get(E_TC_Runner *runner);
-Eina_Bool e_tc_runner_ev_wait(E_TC_Runner *runner, E_TC_Event_Type ev);
-
-E_TC_Win *e_tc_win_add(E_TC_Win *parent, Elm_Win_Type type, Eina_Bool alpha, const char *name, int x, int y, int w, int h, int layer);
-E_TC_Win *e_tc_win_info_add(Ecore_Window native_win, Eina_Bool alpha, const char *name, int x, int y, int w, int h, int layer);
-void e_tc_win_del(E_TC_Win *tw);
-void e_tc_win_geom_update(E_TC_Win *tw);
-void e_tc_win_show(E_TC_Win *tw);
-void e_tc_win_hide(E_TC_Win *tw);
-void e_tc_win_stack_change(E_TC_Win *tw, E_TC_Win *sibling, Eina_Bool above);
-
-/* test cases */
-Eina_Bool tc_0000_base_pass(E_TC *tc);
-Eina_Bool tc_0001_base_fail(E_TC *tc);
-Eina_Bool tc_0010_introspect(E_TC *tc);
-Eina_Bool tc_0011_win_register(E_TC *tc);
-
-Eina_Bool tc_0100_win_show(E_TC *tc);
-Eina_Bool tc_0101_win_stack(E_TC *tc);
-Eina_Bool tc_0110_alpha_win_show(E_TC *tc);
-Eina_Bool tc_0111_alpha_win_stack(E_TC *tc);
-
-Eina_Bool tc_0200_transient_for_basic(E_TC *tc);
-Eina_Bool tc_0201_transient_for_raise(E_TC *tc);
-Eina_Bool tc_0202_transient_for_lower(E_TC *tc);
-Eina_Bool tc_0203_transient_for_stack_above(E_TC *tc);
-Eina_Bool tc_0204_transient_for_stack_below(E_TC *tc);
-
-#endif
--- /dev/null
+#include "e_test_runner.h"
+
+int _log_dom = -1;
+
+static void
+_cb_method_win_info_list_get(void *data,
+ const Eldbus_Message *msg,
+ Eldbus_Pending *p EINA_UNUSED)
+{
+ const char *name = NULL, *text = NULL;
+ Eldbus_Message_Iter *array, *ec;
+ Ecore_Window target_win = 0;
+ Eina_List *list = data;
+ Eina_Bool res;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get(msg, "ua(usiiiiibb)", &target_win, &array);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+
+ list = eina_list_free(list);
+
+ while (eldbus_message_iter_get_and_next(array, 'r', &ec))
+ {
+ const char *win_name;
+ int x, y, w, h, layer;
+ Eina_Bool visible, alpha;
+ Ecore_Window native_win;
+ E_TC_Win *tw = NULL;
+
+ res = eldbus_message_iter_arguments_get(ec,
+ "usiiiiibb",
+ &native_win,
+ &win_name,
+ &x,
+ &y,
+ &w,
+ &h,
+ &layer,
+ &visible,
+ &alpha);
+ if (!res)
+ {
+ WRN("Failed to get win info\n");
+ continue;
+ }
+
+ tw = e_tc_win_info_add(native_win, alpha, win_name, x, y, w, h, layer);
+ list = eina_list_append(list, tw);
+ }
+
+finish:
+ if ((name) || (text))
+ {
+ ERR("errname:%s errmsg:%s\n", name, text);
+ }
+
+ elm_exit();
+}
+
+static void
+_cb_method_window_register(void *data,
+ const Eldbus_Message *msg,
+ Eldbus_Pending *p EINA_UNUSED)
+{
+ const char *name = NULL, *text = NULL;
+ Eina_Bool res;
+ Eina_Bool *accepted = data;
+
+ *accepted = EINA_FALSE;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get(msg, "b", accepted);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+ EINA_SAFETY_ON_FALSE_GOTO(*accepted, finish);
+
+finish:
+ if ((name) || (text))
+ {
+ ERR("errname:%s errmsg:%s\n", name, text);
+ }
+
+ elm_exit();
+}
+
+static void
+_cb_method_window_deregister(void *data,
+ const Eldbus_Message *msg,
+ Eldbus_Pending *p EINA_UNUSED)
+{
+ const char *name = NULL, *text = NULL;
+ Eina_Bool res;
+ Eina_Bool *allowed = data;
+
+ *allowed = EINA_FALSE;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get(msg, "b", allowed);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+ EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
+
+finish:
+ if ((name) || (text))
+ {
+ ERR("errname:%s errmsg:%s\n", name, text);
+ }
+
+ elm_exit();
+}
+
+static void
+_cb_signal_vis_changed(void *data,
+ const Eldbus_Message *msg)
+{
+ E_Test_Runner *runner = data;
+ const char *name = NULL, *text = NULL;
+ Eina_Bool res;
+ int vis = 0;
+ Ecore_Window id;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+
+ /* TODO */
+ if (((E_TC_EVENT_TYPE_VIS_ON == runner->ev.expect) && ( vis)) ||
+ ((E_TC_EVENT_TYPE_VIS_OFF == runner->ev.expect) && (!vis)))
+ {
+ runner->ev.response = runner->ev.expect;
+ elm_exit();
+ }
+
+finish:
+ if ((name) || (text))
+ {
+ ERR("errname:%s errmsg:%s\n", name, text);
+ }
+}
+
+static void
+_cb_signal_stack_changed(void *data,
+ const Eldbus_Message *msg)
+{
+ E_Test_Runner *runner = data;
+ const char *name = NULL, *text = NULL;
+ Eina_Bool res;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ /* TODO */
+ if ((E_TC_EVENT_TYPE_STACK_RAISE <= runner->ev.expect) &&
+ (E_TC_EVENT_TYPE_STACK_BELOW >= runner->ev.expect))
+ {
+ runner->ev.response = runner->ev.expect;
+ elm_exit();
+ }
+
+finish:
+ if ((name) || (text))
+ {
+ ERR("errname:%s errmsg:%s\n", name, text);
+ }
+}
+
+static Eina_Bool
+_ev_wait_timeout(void *data)
+{
+ E_Test_Runner *runner = data;
+
+ runner->ev.expire_timer = NULL;
+ runner->ev.response = E_TC_EVENT_TYPE_TIMEOUT;
+
+ ERR("ev:%d\n", runner->ev.expect);
+
+ elm_exit();
+
+ return ECORE_CALLBACK_DONE;
+}
+
+Eina_Bool
+e_test_runner_req_win_register(E_Test_Runner *runner,
+ E_TC_Win *tw)
+{
+ Eldbus_Pending *p;
+ Eina_Bool accepted = EINA_FALSE;
+
+ p = eldbus_proxy_call(runner->dbus.proxy,
+ "RegisterWindow",
+ _cb_method_window_register,
+ &accepted,
+ -1,
+ "u",
+ tw->native_win);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
+
+ elm_run();
+
+ return accepted;
+}
+
+Eina_Bool
+e_test_runner_req_win_deregister(E_Test_Runner *runner,
+ E_TC_Win *tw)
+{
+ Eldbus_Pending *p;
+ Eina_Bool allowed = EINA_FALSE;
+
+ p = eldbus_proxy_call(runner->dbus.proxy,
+ "DeregisterWindow",
+ _cb_method_window_deregister,
+ &allowed,
+ -1,
+ "u",
+ tw->native_win);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
+
+ elm_run();
+
+ return allowed;
+}
+
+Eina_List *
+e_test_runner_req_win_info_list_get(E_Test_Runner *runner)
+{
+ Eldbus_Pending *p;
+ Eina_List *list = NULL;
+
+ p = eldbus_proxy_call(runner->dbus.proxy,
+ "GetClients",
+ _cb_method_win_info_list_get,
+ list,
+ -1,
+ "");
+ EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
+
+ elm_run();
+
+ return list;
+}
+
+Eina_Bool
+e_test_runner_ev_wait(E_Test_Runner *runner,
+ E_TC_Event_Type ev)
+{
+ Eldbus_Signal_Handler *sh;
+ Eina_Bool res = EINA_FALSE;
+
+ EINA_SAFETY_ON_FALSE_RETURN_VAL((E_TC_EVENT_TYPE_NONE < ev), res);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL((E_TC_EVENT_TYPE_MAX > ev), res);
+
+ switch (ev)
+ {
+ case E_TC_EVENT_TYPE_VIS_ON:
+ case E_TC_EVENT_TYPE_VIS_OFF:
+ sh = eldbus_proxy_signal_handler_add(runner->dbus.proxy,
+ "VisibilityChanged",
+ _cb_signal_vis_changed,
+ runner);
+ EINA_SAFETY_ON_NULL_GOTO(sh, finish);
+ break;
+
+ case E_TC_EVENT_TYPE_STACK_RAISE:
+ case E_TC_EVENT_TYPE_STACK_LOWER:
+ case E_TC_EVENT_TYPE_STACK_ABOVE:
+ case E_TC_EVENT_TYPE_STACK_BELOW:
+ sh = eldbus_proxy_signal_handler_add(runner->dbus.proxy,
+ "StackChanged",
+ _cb_signal_stack_changed,
+ runner);
+ EINA_SAFETY_ON_NULL_GOTO(sh, finish);
+ break;
+
+ default:
+ goto finish;
+ break;
+ }
+
+ if (runner->ev.expire_timer)
+ ecore_timer_del(runner->ev.expire_timer);
+
+ runner->ev.expect = ev;
+ runner->ev.response = E_TC_EVENT_TYPE_NONE;
+ runner->ev.expire_timer = ecore_timer_add(5.0, _ev_wait_timeout, runner);
+
+ elm_run();
+
+ if (runner->ev.expire_timer)
+ {
+ ecore_timer_del(runner->ev.expire_timer);
+ runner->ev.expire_timer = NULL;
+ }
+
+ eldbus_signal_handler_del(sh);
+
+ res = (runner->ev.response == runner->ev.expect);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+
+finish:
+ runner->ev.expect = E_TC_EVENT_TYPE_NONE;
+ runner->ev.response = E_TC_EVENT_TYPE_NONE;
+
+ return res;
+}
+
+E_TC_Win *
+e_tc_win_add(E_TC_Win *parent,
+ Elm_Win_Type type,
+ Eina_Bool alpha,
+ const char *name,
+ int x, int y,
+ int w, int h,
+ int layer)
+{
+ E_TC_Win *tw = NULL;
+ Evas_Object *elm_win = NULL, *bg = NULL;
+ Evas_Object *p_elm_win = NULL;
+
+ if (parent) p_elm_win = parent->elm_win;
+
+ elm_win = elm_win_add(p_elm_win, name, ELM_WIN_BASIC);
+ EINA_SAFETY_ON_NULL_GOTO(elm_win, err);
+
+ if (alpha) elm_win_alpha_set(elm_win, EINA_TRUE);
+
+ elm_win_title_set(elm_win, name);
+ elm_win_autodel_set(elm_win, EINA_FALSE);
+
+ bg = elm_bg_add(elm_win);
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(elm_win, bg);
+ elm_bg_color_set(bg, 0, 120, 100);
+ evas_object_show(bg);
+
+ tw = E_NEW(E_TC_Win, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(tw, NULL);
+
+ tw->elm_win = elm_win;
+ tw->native_win = elm_win_xwindow_get(elm_win); // TODO: wayland
+ tw->name = eina_stringshare_add(name);
+ tw->x = x;
+ tw->y = y;
+ tw->w = w;
+ tw->h = h;
+ tw->layer = layer;
+ tw->alpha = alpha;
+
+ return tw;
+
+err:
+ evas_object_del(elm_win);
+ E_FREE(tw);
+
+ return NULL;
+}
+
+E_TC_Win *
+e_tc_win_info_add(Ecore_Window native_win,
+ Eina_Bool alpha,
+ const char *name,
+ int x, int y,
+ int w, int h,
+ int layer)
+{
+ E_TC_Win *tw = NULL;
+
+ tw = E_NEW(E_TC_Win, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(tw, NULL);
+
+ tw->elm_win = NULL;
+ tw->native_win = native_win;
+ tw->name = eina_stringshare_add(name);
+ tw->x = x;
+ tw->y = y;
+ tw->w = w;
+ tw->h = h;
+ tw->layer = layer;
+ tw->alpha = alpha;
+
+ return tw;
+}
+
+void
+e_tc_win_del(E_TC_Win *tw)
+{
+ EINA_SAFETY_ON_NULL_RETURN(tw);
+
+ if (tw->elm_win)
+ evas_object_del(tw->elm_win);
+
+ if (tw->name)
+ eina_stringshare_del(tw->name);
+
+ E_FREE(tw);
+}
+
+void
+e_tc_win_geom_update(E_TC_Win *tw)
+{
+ evas_object_move(tw->elm_win, tw->x, tw->y);
+ evas_object_resize(tw->elm_win, tw->w, tw->h);
+}
+
+void
+e_tc_win_show(E_TC_Win *tw)
+{
+ evas_object_show(tw->elm_win);
+}
+
+void
+e_tc_win_hide(E_TC_Win *tw)
+{
+ evas_object_hide(tw->elm_win);
+}
+
+void
+e_tc_win_stack_change(E_TC_Win *tw, E_TC_Win *sibling, Eina_Bool above)
+{
+ /* TODO */
+ if (sibling)
+ {
+ if (above)
+ {
+ ; // stack above: window is placed above sibling window.
+ }
+ else
+ {
+ ; // stack below: window is placed below sibling window.
+ }
+ }
+ else
+ {
+ if (above)
+ {
+ ; // raise: window is placed at the top of stack.
+ }
+ else
+ {
+ ; // lower: window is placed at the bottom of stack.
+ }
+ }
+}
+
+static E_TC *
+_e_tc_add(unsigned int num,
+ const char *name,
+ Eina_Bool (*func)(E_TC*),
+ Eina_Bool expect,
+ E_Test_Runner *runner)
+{
+ E_TC *tc;
+
+ tc = E_NEW(E_TC, 1);
+
+ tc->num = num;
+ tc->name = name;
+ tc->func = func;
+ tc->expect = expect;
+ tc->runner = runner;
+
+ runner->tc_list = eina_list_append(runner->tc_list, tc);
+
+ return tc;
+}
+
+#undef TC_ADD
+#define TC_ADD(num, name, func, expect) _e_tc_add(num, name, func, expect, runner)
+
+static void
+_e_test_runner_init(E_Test_Runner *runner)
+{
+#undef T_FUNC
+#define T_FUNC(num_, test_) tc_000##num_##_##test_
+ /* [0000 - 0099] test runner verification */
+ TC_ADD( 0, "Base: Pass", T_FUNC( 0, base_pass ), 1);
+ TC_ADD( 1, "Base: Fail", T_FUNC( 1, base_fail ), 0);
+#undef T_FUNC
+#define T_FUNC(num_, test_) tc_00##num_##_##test_
+ TC_ADD( 10, "DBus: Introspect", T_FUNC( 10, introspect ), 1);
+ TC_ADD( 11, "DBus: Window register", T_FUNC( 11, win_register ), 1);
+#undef T_FUNC
+#define T_FUNC(num_, test_) tc_0##num_##_##test_
+ /* [0100 - 0199] window base operation */
+ TC_ADD( 100, "Basic window: Show", T_FUNC( 100, win_show ), 1);
+ TC_ADD( 101, "Basic window: Stack", T_FUNC( 101, win_stack ), 1);
+ TC_ADD( 110, "Alpha window: Show", T_FUNC( 110, alpha_win_show ), 1);
+ TC_ADD( 111, "Alpha window: Stack", T_FUNC( 111, alpha_win_stack ), 1);
+ /* [0200 - 0299] transient for */
+ TC_ADD( 200, "Transient for: Basic", T_FUNC( 200, transient_for_basic ), 1);
+ TC_ADD( 201, "Transient for: Raise", T_FUNC( 201, transient_for_raise ), 1);
+ TC_ADD( 202, "Transient for: Lower", T_FUNC( 202, transient_for_lower ), 1);
+ TC_ADD( 203, "Transient for: Stack above", T_FUNC( 203, transient_for_stack_above), 1);
+ TC_ADD( 204, "Transient for: Stack below", T_FUNC( 204, transient_for_stack_below), 1);
+ /* [0300 - 0399] notification */
+ /* TODO */
+#undef T_FUNC
+}
+
+static void
+_e_test_runner_shutdown(E_Test_Runner *runner)
+{
+ E_TC *tc;
+
+ EINA_LIST_FREE(runner->tc_list, tc)
+ {
+ E_FREE(tc);
+ }
+}
+
+static void
+_e_test_runner_run(E_Test_Runner *runner)
+{
+ Eina_List *l;
+ E_TC *tc;
+ Eina_Bool pass;
+
+ EINA_LIST_FOREACH(runner->tc_list, l, tc)
+ {
+ pass = tc->func(tc);
+ tc->passed = (pass == tc->expect);
+
+ printf("TEST \"%s\" : %s\n",
+ tc->name,
+ tc->passed ? "PASS" : "FAIL");
+ }
+}
+
+static void
+_e_test_runner_result(E_Test_Runner *runner)
+{
+ Eina_Strbuf *buf;
+ Eina_List *l;
+ E_TC *tc;
+ int pass_case = 0;
+ int fail_case = 0;
+ int total = 0;
+
+ if (!(buf = eina_strbuf_new())) return;
+
+ eina_strbuf_append(buf, "\n\n");
+ eina_strbuf_append(buf, "==============================================\n");
+ eina_strbuf_append(buf, "TEST CASE RESULT\n");
+ eina_strbuf_append(buf, "==============================================\n");
+
+ EINA_LIST_FOREACH(runner->tc_list, l, tc)
+ {
+ eina_strbuf_append_printf(buf,
+ "[%04d] TEST \"%-30.30s\" : %s\n",
+ tc->num,
+ tc->name,
+ tc->passed ? "PASS" : "FAIL");
+
+ total++;
+ tc->passed ? pass_case++ : fail_case++;
+ }
+
+ eina_strbuf_append(buf, "==============================================\n");
+ eina_strbuf_append_printf(buf, "TOTAL: %4d Cases\n", total);
+ eina_strbuf_append_printf(buf, "PASS : %4d Cases\n", pass_case);
+ eina_strbuf_append_printf(buf, "FAIL : %4d Cases\n", fail_case);
+ eina_strbuf_append(buf, "==============================================\n");
+
+ printf("%s", eina_strbuf_string_get(buf));
+}
+
+EAPI_MAIN int
+elm_main(int argc EINA_UNUSED,
+ char **argv EINA_UNUSED)
+{
+ E_Test_Runner *runner = NULL;
+ int res;
+
+ runner = E_NEW(E_Test_Runner, 1);
+ EINA_SAFETY_ON_NULL_GOTO(runner, err);
+
+ _log_dom = eina_log_domain_register("e-tc", EINA_COLOR_BLUE);
+ if (_log_dom < 0)
+ {
+ ERR("Can't register e-tc log domain.");
+ goto err;
+ }
+
+ res = eldbus_init();
+ EINA_SAFETY_ON_FALSE_GOTO((res > 0), err);
+
+ runner->dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
+ if (!runner->dbus.conn)
+ {
+ ERR("Can't get dbus connection.");
+ goto err;
+ }
+
+ runner->dbus.obj = eldbus_object_get(runner->dbus.conn,
+ "org.enlightenment.wm",
+ "/org/enlightenment/wm");
+ if (!runner->dbus.obj)
+ {
+ ERR("Can't get dbus object.");
+ goto err;
+ }
+
+ runner->dbus.proxy = eldbus_proxy_get(runner->dbus.obj,
+ "org.enlightenment.wm.Test");
+ if (!runner->dbus.proxy)
+ {
+ ERR("Can't get dbus proxy.");
+ goto err;
+ }
+
+ _e_test_runner_init(runner);
+ _e_test_runner_run(runner);
+ _e_test_runner_result(runner);
+ _e_test_runner_shutdown(runner);
+
+ eldbus_proxy_unref(runner->dbus.proxy);
+ eldbus_object_unref(runner->dbus.obj);
+ eldbus_connection_unref(runner->dbus.conn);
+ eldbus_shutdown();
+ eina_log_domain_unregister(_log_dom);
+
+ E_FREE(runner);
+ return 0;
+
+err:
+ E_FREE(runner);
+ return -1;
+}
+ELM_MAIN()
--- /dev/null
+#ifndef E_TC_MAIN_H
+#define E_TC_MAIN_H
+
+#include <Eldbus.h>
+#include <Elementary.h>
+
+extern int _log_dom;
+
+#ifdef ERR
+# undef ERR
+#endif
+#define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__)
+
+#ifdef DBG
+# undef DBG
+#endif
+#define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__)
+
+#ifdef INF
+# undef INF
+#endif
+#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
+
+#ifdef WRN
+# undef WRN
+#endif
+#define WRN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__)
+
+#ifdef CRI
+# undef CRI
+#endif
+#define CRI(...) EINA_LOG_DOM_CRIT(_log_dom, __VA_ARGS__)
+
+#ifdef E_NEW
+# undef E_NEW
+#endif
+# define E_NEW(s, n) (s *)calloc(n, sizeof(s))
+
+#ifdef E_FREE
+# undef E_FREE
+#endif
+# define E_FREE(p) do { free(p); p = NULL; } while (0)
+
+#ifdef E_FREE_LIST
+# undef E_FREE_LIST
+#endif
+# define E_FREE_LIST(list, free) \
+ do \
+ { \
+ void *_tmp_; \
+ EINA_LIST_FREE(list, _tmp_) \
+ { \
+ free(_tmp_); \
+ } \
+ } \
+ while (0)
+
+typedef enum _E_TC_Event_Type
+{
+ E_TC_EVENT_TYPE_NONE = 0,
+ E_TC_EVENT_TYPE_TIMEOUT,
+ E_TC_EVENT_TYPE_VIS_ON,
+ E_TC_EVENT_TYPE_VIS_OFF,
+ E_TC_EVENT_TYPE_STACK_RAISE,
+ E_TC_EVENT_TYPE_STACK_LOWER,
+ E_TC_EVENT_TYPE_STACK_ABOVE,
+ E_TC_EVENT_TYPE_STACK_BELOW,
+ E_TC_EVENT_TYPE_MAX
+} E_TC_Event_Type;
+
+typedef struct _E_Test_Runner E_Test_Runner;
+typedef struct _E_TC_Win E_TC_Win;
+typedef struct _E_TC E_TC;
+typedef struct _E_TC_Data E_TC_Data;
+
+struct _E_Test_Runner
+{
+ Eina_List *tc_list; // test suite
+
+ struct
+ {
+ Ecore_Timer *expire_timer;
+ E_TC_Event_Type expect;
+ E_TC_Event_Type response;
+ } ev;
+
+ struct
+ {
+ Eldbus_Connection *conn;
+ Eldbus_Proxy *proxy;
+ Eldbus_Object *obj;
+ } dbus;
+};
+
+struct _E_TC_Win
+{
+ Evas_Object *elm_win; // elm_win evas object
+ Ecore_Window native_win; // native window id
+ const char *name; // name of client window
+ int x, y, w, h; // geometry
+ int layer; // value of E_Layer
+ int vis; // visibility
+ int alpha; // alpha window
+};
+
+struct _E_TC
+{
+ const char *name;
+ unsigned int num;
+ Eina_Bool (*func) (E_TC *tc);
+ Eina_Bool passed;
+ Eina_Bool expect;
+ E_Test_Runner *runner;
+ E_TC_Data *data;
+};
+
+Eina_Bool e_test_runner_req_win_register(E_Test_Runner *runner, E_TC_Win *tw);
+Eina_Bool e_test_runner_req_win_deregister(E_Test_Runner *runner, E_TC_Win *tw);
+Eina_List *e_test_runner_req_win_info_list_get(E_Test_Runner *runner);
+Eina_Bool e_test_runner_ev_wait(E_Test_Runner *runner, E_TC_Event_Type ev);
+
+E_TC_Win *e_tc_win_add(E_TC_Win *parent, Elm_Win_Type type, Eina_Bool alpha, const char *name, int x, int y, int w, int h, int layer);
+E_TC_Win *e_tc_win_info_add(Ecore_Window native_win, Eina_Bool alpha, const char *name, int x, int y, int w, int h, int layer);
+void e_tc_win_del(E_TC_Win *tw);
+void e_tc_win_geom_update(E_TC_Win *tw);
+void e_tc_win_show(E_TC_Win *tw);
+void e_tc_win_hide(E_TC_Win *tw);
+void e_tc_win_stack_change(E_TC_Win *tw, E_TC_Win *sibling, Eina_Bool above);
+
+/* test cases */
+Eina_Bool tc_0000_base_pass(E_TC *tc);
+Eina_Bool tc_0001_base_fail(E_TC *tc);
+Eina_Bool tc_0010_introspect(E_TC *tc);
+Eina_Bool tc_0011_win_register(E_TC *tc);
+
+Eina_Bool tc_0100_win_show(E_TC *tc);
+Eina_Bool tc_0101_win_stack(E_TC *tc);
+Eina_Bool tc_0110_alpha_win_show(E_TC *tc);
+Eina_Bool tc_0111_alpha_win_stack(E_TC *tc);
+
+Eina_Bool tc_0200_transient_for_basic(E_TC *tc);
+Eina_Bool tc_0201_transient_for_raise(E_TC *tc);
+Eina_Bool tc_0202_transient_for_lower(E_TC *tc);
+Eina_Bool tc_0203_transient_for_stack_above(E_TC *tc);
+Eina_Bool tc_0204_transient_for_stack_below(E_TC *tc);
+
+#endif