6 #include "e_test_event.h"
8 #define E_TEST_WORK_TIME 3.0
9 #define E_TC_SIGN_WIN_INFO "usiiiiibbbiibibbbi"
11 #define UT_WAIT(fmt, ...) \
17 printf(fmt" [n]):next ", ##__VA_ARGS__); \
19 } while (ch != 'n'); \
28 if (ch == '\n' || ch == '\r')
33 while (c != '\n' && c != EOF)
39 static const char effect_started[] = "effect,started";
40 static const char effect_done[] = "effect,done";
41 static const char launch_done[] = "launch,done";
43 /* callbacks - event */
45 _cb_resource_id(void *data,
46 struct tizen_resource *tizen_resource,
49 Ecore_Window *res_id = (Ecore_Window *)data;
51 etRunner::get().finishWork();
55 _cb_geometry(void *data EINA_UNUSED,
56 struct wl_output *wl_output EINA_UNUSED,
57 int x, int y, int w, int h,
58 int subpixel EINA_UNUSED,
59 const char *make EINA_UNUSED,
60 const char *model EINA_UNUSED,
61 int transform EINA_UNUSED)
63 etRunner::get().output.x = x;
64 etRunner::get().output.y = y;
65 etRunner::get().output.w = w;
66 etRunner::get().output.h = h;
70 _cb_mode(void *data EINA_UNUSED,
71 struct wl_output *wl_output EINA_UNUSED,
74 int refresh EINA_UNUSED)
76 if (flags & WL_OUTPUT_MODE_CURRENT)
78 etRunner::get().output.w = w;
79 etRunner::get().output.h = h;
82 etRunner::get().finishWork();
86 _cb_done(void *data EINA_UNUSED,
87 struct wl_output *output EINA_UNUSED)
93 _cb_scale(void *data EINA_UNUSED,
94 struct wl_output *output EINA_UNUSED,
95 int scale EINA_UNUSED)
100 /* callbacks - method */
101 static void _cb_method_win_info_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
102 static void _cb_method_win_info_list_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
103 static void _cb_method_window_register(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
104 static void _cb_method_zone_rotation_change(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
105 static void _cb_method_window_effect(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
106 static void _cb_method_set_tc_start_end(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
107 static void _cb_method_set_tc_timeout(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
108 static void _cb_method_transient_for_below(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
109 static void _cb_method_aux_hint_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
111 /* callbacks - signal */
112 static void _cb_signal_vis_changed(void *data, const Eldbus_Message *msg);
113 static void _cb_signal_stack_changed(void *data, const Eldbus_Message *msg);
114 static void _cb_signal_win_rot_changed(void *data, const Eldbus_Message *msg);
115 static void _cb_signal_focus_changed(void *data, const Eldbus_Message *msg);
116 static void _cb_signal_render_while_effect_run(void *data, const Eldbus_Message *msg);
117 static void _cb_signal_aux_hint_changed(void *data, const Eldbus_Message *msg);
118 static void _cb_signal_iconic_state_changed(void *data, const Eldbus_Message *msg);
120 /* callbacks - ecore */
121 static Eina_Bool _cb_ecore_key_down(void *data, int type, void *event);
122 static Eina_Bool _cb_ecore_key_up(void *data, int type, void *event);
124 /* callbacks - evas */
125 static void _cb_evas_key_down(void * data, Evas * evas, Evas_Object * obj, void * event_info);
126 static void _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info);
128 /* callbacks - smart */
129 static void _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info);
130 static void _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info);
131 static void _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info);
133 /* callbacks - timer */
134 static Eina_Bool _cb_work_timeout(void *data);
136 /* callbacks - gesture */
137 #ifndef DISABLE_GESTURE_TESTS
138 static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
139 static Eina_Bool _cb_gesture_edge_swipe(void *data, int type, void *event);
140 static Eina_Bool _cb_gesture_edge_drag(void *data, int type, void *event);
143 /**********************
145 **********************/
146 static const struct tizen_resource_listener _e_test_tizen_resource_listener =
151 static const struct wl_output_listener _e_test_output_listener =
159 /**********************
161 **********************/
162 etRunner etRunner::inst;
167 Eina_Bool res = EINA_FALSE;
168 int screenshot_w = 0, screenshot_h = 0;
170 worker.waitTime = E_TEST_WORK_TIME;
172 logDomain = eina_log_domain_register("e-tc", EINA_COLOR_BLUE);
175 if (!ecore_wl2_connected_display_get(NULL))
176 ecore_wl2_display_connect(NULL);
178 // init tizen_extension protocol
179 res = initProtocols();
180 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
185 dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
186 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.conn, EINA_FALSE);
188 dbus.ds_obj = eldbus_object_get(dbus.conn,
189 "org.enlightenment.wm",
190 "/org/enlightenment/wm");
191 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_obj, EINA_FALSE);
193 dbus.ds_proxy = eldbus_proxy_get(dbus.ds_obj,
194 "org.enlightenment.wm.Test");
195 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_proxy, EINA_FALSE);
197 dbus.deviced_obj = eldbus_object_get(dbus.conn,
198 "org.tizen.system.deviced",
199 "/Org/Tizen/System/DeviceD/Display");
200 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_obj, EINA_FALSE);
202 dbus.deviced_proxy = eldbus_proxy_get(dbus.deviced_obj,
203 "org.tizen.system.deviced.display");
204 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_proxy, EINA_FALSE);
206 // reset registered window of e_test_helper
207 res = resetRegisterWin();
208 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
210 // add signal handlers
211 res = addSignalHandlers();
212 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
214 execute_verifyTC = EINA_FALSE;
215 if (target.compare("mobile") == 0)
217 if ((output.w == CAPTURE_WIDTH_MOBILE) && (output.h == CAPTURE_HEIGHT_MOBILE))
219 execute_verifyTC = EINA_TRUE;
220 screenshot_w = CAPTURE_WIDTH_MOBILE;
221 screenshot_h = CAPTURE_HEIGHT_MOBILE;
224 /* //currently not supported
225 else if (target.compare("common") == 0)
227 if ((output.w == CAPTURE_WIDTH_COMMON) && (output.h == CAPTURE_HEIGHT_COMMON))
229 execute_verifyTC = EINA_TRUE;
230 screenshot_w = CAPTURE_WIDTH_COMMON;
231 screenshot_h = CAPTURE_HEIGHT_COMMON;
235 if (execute_verifyTC == EINA_TRUE)
237 screenshot = efl_util_screenshot_initialize(screenshot_w, screenshot_h);
238 if (screenshot == NULL)
239 ERR("efl_util_screenshot_initialize fail\n");
243 ERR("not supported resolution. do not execute verifyTC");
252 eina_log_domain_unregister(logDomain);
254 freeLastWinInfoList();
258 efl_util_screenshot_deinitialize(screenshot);
263 delGestureSignalHandlers();
265 // deinit tizen_extension protocol
268 tizen_policy_destroy(tzPolicy);
274 tizen_surface_destroy(tzSurface);
280 tizen_launch_splash_destroy(tzlaunch_splash);
281 tzlaunch_splash = NULL;
286 tizen_launch_effect_destroy(tzlaunch_effect);
287 tzlaunch_effect = NULL;
291 eldbus_proxy_unref(dbus.deviced_proxy);
292 eldbus_object_unref(dbus.deviced_obj);
293 eldbus_proxy_unref(dbus.ds_proxy);
294 eldbus_object_unref(dbus.ds_obj);
295 eldbus_connection_unref(dbus.conn);
300 etRunner::registerWin(etWin *tw)
302 Eldbus_Pending *p = NULL;
303 Eina_Bool accepted = EINA_FALSE;
305 p = eldbus_proxy_call(dbus.ds_proxy,
307 _cb_method_window_register,
312 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
320 etRunner::deregisterWin(etWin *tw)
322 Eldbus_Pending *p = NULL;
323 Eina_Bool accepted = EINA_FALSE;
325 p = eldbus_proxy_call(dbus.ds_proxy,
327 _cb_method_window_register,
332 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
340 etRunner::resetRegisterWin()
342 Eldbus_Pending *p = NULL;
343 Eina_Bool accepted = EINA_FALSE;
345 p = eldbus_proxy_call(dbus.ds_proxy,
346 "ResetRegisterWindow",
347 _cb_method_window_register,
351 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
359 etRunner::setWinActivate(etWin *tw)
361 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
363 tw->updateGeometry();
365 tizen_policy_activate(tzPolicy,
366 getWlSurface(tw->elm_win));
372 etRunner::setWinActivateAbove(etWin *tw, etWin *above_tw)
374 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
375 EINA_SAFETY_ON_NULL_RETURN_VAL(above_tw, EINA_FALSE);
377 tw->updateGeometry();
379 tizen_policy_activate_above_by_res_id(tzPolicy,
380 tw->native_win, above_tw->native_win);
386 etRunner::setWinActivateBelow(etWin *tw, etWin *below_tw)
388 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
389 EINA_SAFETY_ON_NULL_RETURN_VAL(below_tw, EINA_FALSE);
391 tw->updateGeometry();
393 tizen_policy_activate_below_by_res_id(tzPolicy,
394 tw->native_win, below_tw->native_win);
400 etRunner::requestKillWinByName(const char *name)
402 Eldbus_Pending *p = NULL;
404 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
406 p = eldbus_proxy_call(dbus.ds_proxy,
413 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
419 etRunner::setWinIconic(etWin *tw,
422 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
425 tizen_policy_iconify(tzPolicy,
426 getWlSurface(tw->elm_win));
429 tizen_policy_uniconify(tzPolicy,
430 getWlSurface(tw->elm_win));
438 etRunner::setWinStack(etWin *tw,
442 Eldbus_Pending *p = NULL;
443 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
445 p = eldbus_proxy_call(dbus.ds_proxy,
452 sibiling? sibiling->native_win : 0,
454 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
460 etRunner::setWinRaise(etWin *tw)
462 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
464 tizen_policy_raise(tzPolicy, getWlSurface(tw->elm_win));
470 etRunner::setWinLower(etWin *tw)
472 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
474 tizen_policy_lower(tzPolicy, getWlSurface(tw->elm_win));
480 etRunner::setWinBgState(etWin *tw, Eina_Bool set)
482 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
485 tizen_policy_set_background_state(tzPolicy,
488 tizen_policy_unset_background_state(tzPolicy,
495 etRunner::setWinTransientFor(etWin *tw_child,
499 EINA_SAFETY_ON_NULL_RETURN_VAL(tw_child, EINA_FALSE);
500 EINA_SAFETY_ON_NULL_RETURN_VAL(tw_parent, EINA_FALSE);
503 tizen_policy_set_transient_for(tzPolicy,
504 tw_child->native_win,
505 tw_parent->native_win);
507 tizen_policy_unset_transient_for(tzPolicy,
508 tw_child->native_win);
514 etRunner::setWinTransientForBelow(etWin *tw_child,
518 Eina_Bool accepted = EINA_FALSE;
519 Eldbus_Pending *p = NULL;
521 p = eldbus_proxy_call(dbus.ds_proxy,
522 "SetWindowTransientForBelow",
523 _cb_method_transient_for_below,
527 tw_child->native_win,
528 tw_parent->native_win,
530 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
538 etRunner::setWinNotiLevel(etWin *tw,
539 efl_util_notification_level_e lv)
543 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
545 res = efl_util_set_notification_window_level(tw->elm_win, lv);
546 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EINA_FALSE);
551 efl_util_notification_level_e
552 etRunner::getWinNotiLevel(etWin *tw)
555 efl_util_notification_level_e lv = EFL_UTIL_NOTIFICATION_LEVEL_NONE;
557 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
559 res = efl_util_get_notification_window_level(tw->elm_win, &lv);
560 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
566 etRunner::setFocusSkip(etWin *tw, Eina_Bool set)
568 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
571 tizen_policy_set_focus_skip(tzPolicy,
572 getWlSurface(tw->elm_win));
574 tizen_policy_unset_focus_skip(tzPolicy,
575 getWlSurface(tw->elm_win));
581 etRunner::setFocusSkipEcoreWl2(etWin *tw, Eina_Bool set)
583 Ecore_Wl2_Window *wlwin = NULL;
585 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
587 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
588 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
590 ecore_wl2_window_focus_skip_set(wlwin, set);
596 etRunner::setZoneRotation(int angle)
598 Eldbus_Pending *p = NULL;
599 Eina_Bool allowed = EINA_FALSE;
601 p = eldbus_proxy_call(dbus.ds_proxy,
602 "ChangeZoneRotation",
603 _cb_method_zone_rotation_change,
608 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
616 etRunner::addAuxHint(etWin *tw, int hint_id, const char *hint_key, const char *hint_val)
618 Ecore_Wl2_Window *wlwin = NULL;
620 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
622 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
623 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
625 ecore_wl2_window_aux_hint_add(wlwin, hint_id, hint_key, hint_val);
631 etRunner::changeAuxHint(etWin *tw, int hint_id, const char *hint_val)
633 Ecore_Wl2_Window *wlwin = NULL;
635 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
637 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
638 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
640 ecore_wl2_window_aux_hint_change(wlwin, hint_id, hint_val);
646 etRunner::delAuxHint(etWin *tw, int hint_id)
648 Ecore_Wl2_Window *wlwin = NULL;
650 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
652 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
653 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
655 ecore_wl2_window_aux_hint_del(wlwin, hint_id);
661 etRunner::generateAuxHint(etWin *tw, const char *hint_key, const char *hint_val)
663 Ecore_Wl2_Window *wlwin = NULL;
665 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
667 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
668 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
670 return ecore_wl2_window_aux_hint_generate(wlwin, hint_key, hint_val);
674 etRunner::getAuxHintID(etWin *tw, const char *hint_key)
676 Ecore_Wl2_Window *wlwin = NULL;
678 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, -1);
680 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
681 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, -1);
683 return ecore_wl2_window_aux_hint_id_get(wlwin, hint_key);
687 etRunner::getAuxHintValue(etWin *tw, int hint_id)
689 Ecore_Wl2_Window *wlwin = NULL;
691 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, std::string(""));
693 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
694 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, std::string(""));
696 return std::string(ecore_wl2_window_aux_hint_value_get(wlwin, hint_id));
700 etRunner::setTCStart()
702 Eldbus_Pending *p = NULL;
703 Eina_Bool res = EINA_FALSE;
705 p = eldbus_proxy_call(dbus.ds_proxy,
707 _cb_method_set_tc_start_end,
711 EINA_SAFETY_ON_NULL_GOTO(p, err);
715 EINA_SAFETY_ON_FALSE_GOTO(res, err);
727 Eldbus_Pending *p = NULL;
728 Eina_Bool res = EINA_FALSE;
730 p = eldbus_proxy_call(dbus.ds_proxy,
732 _cb_method_set_tc_start_end,
736 if (p == NULL) res = EINA_FALSE;
740 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
746 etRunner::setTCTimeout(Eina_Bool set, int timeout)
748 Eldbus_Pending *p = NULL;
749 Eina_Bool res = EINA_FALSE;
751 if (timeout < 0) return EINA_FALSE;
753 p = eldbus_proxy_call(dbus.ds_proxy,
755 _cb_method_set_tc_timeout,
761 EINA_SAFETY_ON_NULL_GOTO(p, err);
765 EINA_SAFETY_ON_FALSE_GOTO(res, err);
775 etRunner::getWinInfo(etWin *tw)
777 Eldbus_Pending *p = NULL;
781 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
783 win = tw->native_win;
788 p = eldbus_proxy_call(dbus.ds_proxy,
790 _cb_method_win_info_get,
795 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
799 if ((tw->native_win == win) && (!tw->effect))
805 if (tw->native_win != win)
807 ERR("Something Wrong. Difference with quering window"
808 "and received window from server");
809 tw->native_win = win;
816 etRunner::getWinInfoList()
818 Eldbus_Pending *p = NULL;
819 Window_Info_List *info_list = NULL;
821 Eina_List *result = NULL;
823 info_list = E_NEW(Window_Info_List, 1);
824 EINA_SAFETY_ON_NULL_RETURN_VAL(info_list, NULL);
828 p = eldbus_proxy_call(dbus.ds_proxy,
830 _cb_method_win_info_list_get,
834 EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
838 if (info_list->retry)
840 info_list->retry = EINA_FALSE;
841 EINA_LIST_CAST_FREE(info_list->list, tw, etWin*)
853 result = eina_list_clone(info_list->list);
856 freeLastWinInfoList();
857 listWinInfo = result;
863 etRunner::freeWinInfoList(Eina_List *list)
867 EINA_SAFETY_ON_NULL_RETURN(list);
869 if (listWinInfo == list)
872 EINA_LIST_CAST_FREE(list, tw, etWin*)
882 etRunner::freeLastWinInfoList()
885 freeWinInfoList(listWinInfo);
891 etRunner::setLastWinInfoList(Eina_List *list)
893 EINA_SAFETY_ON_NULL_RETURN(list);
895 freeLastWinInfoList();
901 etRunner::getWinId(Evas_Object *elm_win)
903 struct wl_surface *surf = NULL;
905 struct tizen_resource *tzres = NULL;
907 surf = getWlSurface(elm_win);
908 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, 0);
910 tzres = tizen_surface_get_tizen_resource(tzSurface, surf);
911 EINA_SAFETY_ON_NULL_RETURN_VAL(tzres, 0);
913 tizen_resource_add_listener(tzres,
914 &_e_test_tizen_resource_listener, &id);
918 tizen_resource_destroy(tzres);
924 etRunner::getWlSurface(Evas_Object *elm_win)
926 Ecore_Wl2_Window *wlwin = NULL;
927 struct wl_surface *surf = NULL;
929 EINA_SAFETY_ON_NULL_RETURN_VAL(elm_win, NULL);
931 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(elm_win);
932 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, NULL);
934 surf = ecore_wl2_window_surface_get(wlwin);
935 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, NULL);
941 etRunner::setDpms(Eina_Bool on)
943 Eldbus_Pending *p = NULL;
944 p = eldbus_proxy_call(dbus.ds_proxy,
951 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
956 etRunner::setDevctlDisplayLock(Eina_Bool lock)
958 Eldbus_Pending *p = NULL;
962 p = eldbus_proxy_call(dbus.deviced_proxy,
975 p = eldbus_proxy_call(dbus.deviced_proxy,
984 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
990 etRunner::setDevctlDisplayOn(Eina_Bool on)
992 Eldbus_Pending *p = NULL;
994 p = eldbus_proxy_call(dbus.deviced_proxy,
1000 on? "lcdon" : "lcdoff");
1001 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
1007 etRunner::feedMouseDown(int x, int y)
1009 Eldbus_Pending *p = NULL;
1010 p = eldbus_proxy_call(dbus.ds_proxy,
1018 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1023 etRunner::feedMouseMove(int x, int y)
1025 Eldbus_Pending *p = NULL;
1026 p = eldbus_proxy_call(dbus.ds_proxy,
1034 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1039 etRunner::feedMouseUp(int x, int y)
1041 Eldbus_Pending *p = NULL;
1042 p = eldbus_proxy_call(dbus.ds_proxy,
1050 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1055 etRunner::feedKeyDown(const char *key)
1057 Eldbus_Pending *p = NULL;
1058 p = eldbus_proxy_call(dbus.ds_proxy,
1066 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1071 etRunner::feedKeyUp(const char *key)
1073 Eldbus_Pending *p = NULL;
1074 p = eldbus_proxy_call(dbus.ds_proxy,
1082 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1087 etRunner::setSplashLaunch(const char *path, int type)
1089 const char *effect_type = "launch";
1090 struct wl_array option;
1092 // init tzlaunch_splash
1093 if (tzlaunch_splash)
1095 tizen_launch_splash_destroy(tzlaunch_splash);
1096 tzlaunch_splash = NULL;
1098 if (tzlaunch_effect) tzlaunch_splash = tizen_launch_effect_create_splash_img(tzlaunch_effect);
1099 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1101 wl_array_init(&option);
1102 tizen_launch_splash_launch(tzlaunch_splash, path, type,
1104 effect_type, NULL, &option);
1105 wl_array_release(&option);
1111 etRunner::setSplashOwner()
1114 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1116 tizen_launch_splash_owner(tzlaunch_splash, (int)getpid());
1122 etRunner::setWinEffect(etWin *tw)
1124 Eldbus_Pending *p = NULL;
1125 Eina_Bool accepted = EINA_FALSE;
1127 this->ev.elm_win = tw->elm_win;
1129 p = eldbus_proxy_call(dbus.ds_proxy,
1131 _cb_method_window_effect,
1137 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1144 etRunner::freezeEvent()
1146 Eldbus_Pending *p = NULL;
1147 p = eldbus_proxy_call(dbus.ds_proxy,
1154 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1159 etRunner::thawEvent()
1161 Eldbus_Pending *p = NULL;
1162 p = eldbus_proxy_call(dbus.ds_proxy,
1169 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1174 etRunner::addSupportedAuxHint(const char *hint)
1176 Eldbus_Pending *p = NULL;
1177 p = eldbus_proxy_call(dbus.ds_proxy,
1178 "AddSupportedAuxHint",
1184 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1189 etRunner::delSupportedAuxHint(const char *hint)
1191 Eldbus_Pending *p = NULL;
1192 p = eldbus_proxy_call(dbus.ds_proxy,
1193 "DelSupportedAuxHint",
1199 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1203 std::shared_ptr<auxHintEventItem>
1204 etRunner::getAuxHint(etWin *tw, const char *hint_key)
1206 Eldbus_Pending *p = NULL;
1207 auxHintEventItem *hint = NULL;
1209 p = eldbus_proxy_call(dbus.ds_proxy,
1211 _cb_method_aux_hint_get,
1217 EINA_SAFETY_ON_NULL_RETURN_VAL(p, nullptr);
1223 std::shared_ptr<auxHintEventItem> shared_hint = std::make_shared<auxHintEventItem>(tw->native_win, E_TC_EVENT_TYPE_AUX_HINT_CHANGED, hint->getID(), hint->getHint().c_str(), hint->getVal().c_str());
1232 etRunner::watchEventSignal(Ecore_Window win, E_TC_Event_Type ev_type)
1234 ev.eventWatcher = std::make_shared<eventItem>(win, ev_type);
1238 etRunner::unwatchEventSignal()
1240 ev.eventWatcher = nullptr;
1244 etRunner::isWatchingEventSignal(std::shared_ptr<eventItem> ei)
1246 if (ei == nullptr) return EINA_FALSE;
1247 if (ev.eventWatcher == nullptr) return EINA_FALSE;
1249 if (ev.eventWatcher->isSameEvent(ei))
1256 etRunner::isWatchingEventSignal(Ecore_Window win, E_TC_Event_Type ev_type)
1258 if (ev.eventWatcher == nullptr) return EINA_FALSE;
1260 if ((ev.eventWatcher->isSameWin(win) &&
1261 ev.eventWatcher->isSameType(ev_type)))
1267 std::shared_ptr<eventItem>
1268 etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
1270 std::shared_ptr<eventItem> recv_item = NULL;
1271 std::list<std::shared_ptr<eventItem>>::iterator itr;
1276 case E_TC_EVENT_TYPE_VIS_ON:
1277 case E_TC_EVENT_TYPE_VIS_OFF:
1278 case E_TC_EVENT_TYPE_VIS_CHANGED:
1279 ev_type = E_TC_EVENT_TYPE_VIS_CHANGED;
1281 case E_TC_EVENT_TYPE_STACK_RAISE:
1282 case E_TC_EVENT_TYPE_STACK_LOWER:
1283 case E_TC_EVENT_TYPE_STACK_ABOVE:
1284 case E_TC_EVENT_TYPE_STACK_BELOW:
1285 case E_TC_EVENT_TYPE_STACK_CHANGED:
1286 ev_type = E_TC_EVENT_TYPE_STACK_CHANGED;
1288 case E_TC_EVENT_TYPE_ICONIC_STATE_ICONIFIED:
1289 case E_TC_EVENT_TYPE_ICONIC_STATE_UNICONIFIED:
1290 case E_TC_EVENT_TYPE_ICONIC_STATE_CHANGED:
1291 ev_type = E_TC_EVENT_TYPE_ICONIC_STATE_CHANGED;
1297 // Add event callbacks if needs
1298 if (ev_type == E_TC_EVENT_TYPE_EFFECT_EVAS_CB)
1300 ev.elm_win = win->elm_win;
1301 ev.native_win = win->native_win;
1302 ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
1304 evas_object_smart_callback_add(this->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started, this);
1305 evas_object_smart_callback_add(this->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done, this);
1306 evas_object_smart_callback_add(this->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done, this);
1308 else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_KEY)
1310 ev.elm_win = win->elm_win;
1311 ev.native_win = win->native_win;
1312 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down, this);
1313 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up, this);
1315 ev.key.evas_state = EINA_FALSE;
1318 // pre-waiting events
1319 watchEventSignal(win?win->native_win:0, ev_type);
1322 if (*ev.wait_event_index == ev.last_event)
1324 work(); // waiting additional time
1325 if (*ev.wait_event_index == ev.last_event)
1327 std::shared_ptr<eventItem> res = std::make_shared<eventItem>(0, E_TC_EVENT_TYPE_NONE);
1328 res->result = EINA_FALSE;
1329 res->isTimeout = EINA_TRUE;
1334 // search from latest waitEvent called point
1335 itr = ev.wait_event_index;
1336 if (itr == ev.recv_queue.end()) itr = ev.recv_queue.begin();
1339 for (; itr != ev.recv_queue.end() ; itr++)
1342 if ((recv_item->isSameWin(win?win->native_win:0)) &&
1343 (recv_item->isSameType(ev_type)))
1345 ev.wait_event_index = itr;
1346 recv_item->result = EINA_TRUE;
1351 if (recv_item == NULL)
1353 recv_item = std::make_shared<eventItem>(0, E_TC_EVENT_TYPE_NONE);
1354 recv_item->result = EINA_FALSE;
1360 etRunner::flushEventQueue()
1362 std::list<std::shared_ptr<eventItem>>::iterator itr;
1363 std::shared_ptr<eventItem> ei = NULL;
1364 if (!ev.recv_queue.empty())
1365 ev.recv_queue.erase(ev.recv_queue.begin(), ev.recv_queue.end());
1366 ev.wait_event_index = ev.recv_queue.end();
1367 ev.last_event = NULL;
1368 ev.last_checkpoint = NULL;
1372 etRunner::insertEventQueue(std::shared_ptr<eventItem> ei)
1374 EINA_SAFETY_ON_NULL_RETURN_VAL(ei, EINA_FALSE);
1376 ev.recv_queue.push_back(ei);
1379 if (isWatchingEventSignal(ei))
1381 unwatchEventSignal();
1389 etRunner::insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type)
1391 std::shared_ptr<eventItem> ei = std::make_shared<eventItem>(id, ev_type);
1392 EINA_SAFETY_ON_NULL_RETURN_VAL(ei, EINA_FALSE);
1394 ev.recv_queue.push_back(ei);
1397 if (isWatchingEventSignal(id, ev_type))
1399 unwatchEventSignal();
1407 etRunner::isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type)
1409 std::list<std::shared_ptr<eventItem>>::iterator itr;
1410 std::shared_ptr<eventItem> ei = NULL;
1411 Ecore_Window id = tw->native_win;
1413 for(itr = ev.recv_queue.begin() ; itr != ev.recv_queue.end() ; itr++)
1417 if (ev.last_checkpoint && ev.last_checkpoint != ei)
1420 if (ei->isSameWin(id) && ei->isSameType(ev_type))
1428 etRunner::setEventCheckpoint()
1430 ev.last_checkpoint = ev.last_event;
1435 etRunner::addSignalHandlers()
1437 Eldbus_Signal_Handler *sh = NULL;
1438 Ecore_Event_Handler *eh = NULL;
1442 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1443 "VisibilityChanged",
1444 _cb_signal_vis_changed,
1446 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1447 ev.sh_list = eina_list_append(ev.sh_list, sh);
1449 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1451 _cb_signal_stack_changed,
1453 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1454 ev.sh_list = eina_list_append(ev.sh_list, sh);
1456 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1457 "WinRotationChanged",
1458 _cb_signal_win_rot_changed,
1460 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1461 ev.sh_list = eina_list_append(ev.sh_list, sh);
1463 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1465 _cb_signal_focus_changed,
1467 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1468 ev.sh_list = eina_list_append(ev.sh_list, sh);
1470 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1472 _cb_signal_render_while_effect_run,
1474 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1475 ev.sh_list = eina_list_append(ev.sh_list, sh);
1477 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1479 _cb_signal_aux_hint_changed,
1481 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1482 ev.sh_list = eina_list_append(ev.sh_list, sh);
1484 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1485 "IconicStateChanged",
1486 _cb_signal_iconic_state_changed,
1488 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1489 ev.sh_list = eina_list_append(ev.sh_list, sh);
1491 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _cb_ecore_key_down, this);
1492 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1493 ev.eh_list = eina_list_append(ev.eh_list, eh);
1495 eh = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _cb_ecore_key_up, this);
1496 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1497 ev.eh_list = eina_list_append(ev.eh_list, eh);
1499 ev.key.ecore_state = EINA_FALSE;
1504 printf("failed to init handlers\n");
1505 delSignalHandlers();
1510 etRunner::addGestureSignalHandlers()
1512 Ecore_Event_Handler *eh = NULL;
1514 #ifndef DISABLE_GESTURE_TESTS
1515 if ((EFL_UTIL_EVENT_GESTURE_TAP == 0) ||
1516 (EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE == 0) ||
1517 (EFL_UTIL_EVENT_GESTURE_EDGE_DRAG == 0))
1520 if (ev.last_gesture_tap_ev != EFL_UTIL_EVENT_GESTURE_TAP)
1521 delGestureSignalHandlers();
1523 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this);
1524 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1525 ev.eh_gesture_list = eina_list_append(ev.eh_gesture_list, eh);
1527 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE, _cb_gesture_edge_swipe, this);
1528 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1529 ev.eh_gesture_list = eina_list_append(ev.eh_gesture_list, eh);
1531 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_DRAG, _cb_gesture_edge_drag, this);
1532 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1533 ev.eh_gesture_list = eina_list_append(ev.eh_gesture_list, eh);
1535 ev.last_gesture_tap_ev = EFL_UTIL_EVENT_GESTURE_TAP;
1541 printf("failed to init gesture handlers\n");
1542 delGestureSignalHandlers();
1547 etRunner::delSignalHandlers()
1549 Eldbus_Signal_Handler *sh = NULL;
1550 Ecore_Event_Handler *eh = NULL;
1552 EINA_LIST_CAST_FREE(ev.sh_list, sh, Eldbus_Signal_Handler*)
1554 eldbus_signal_handler_del(sh);
1557 EINA_LIST_CAST_FREE(ev.eh_list, eh, Ecore_Event_Handler*)
1559 ecore_event_handler_del(eh);
1566 etRunner::delGestureSignalHandlers()
1568 Ecore_Event_Handler *eh = NULL;
1570 EINA_LIST_CAST_FREE(ev.eh_gesture_list, eh, Ecore_Event_Handler*)
1572 ecore_event_handler_del(eh);
1581 /* give a turn to deal with deferred job for given time*/
1582 addTimer(worker.waitTime);
1587 etRunner::work(double time)
1589 /* give a turn to deal with deferred job for given time*/
1590 if (time < 0.0) time = 0.0;
1597 etRunner::finishWork()
1606 etRunner::printWinInfoList()
1609 Eina_List *l = NULL, *ll = NULL;
1611 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1612 l = getWinInfoList();
1613 EINA_LIST_CAST_FOREACH(l, ll, tw, etWin*)
1615 printf("%04d WinID:%5u alpha:%d %5d,%5d (%5dx%5d) vis(Win:%d Obj:%d Opaque:%2d Type:%2d Skip:%d) Icon:%d Focus(Win:%d Obj:%d) :: %20s\n",
1617 (unsigned int)tw->native_win,
1619 tw->x, tw->y, tw->w, tw->h,
1625 tw->iconic.by_client ? 2 : tw->iconic.set,
1631 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1635 etRunner::delTimer()
1637 if (!worker.timer) return;
1639 ecore_timer_del(worker.timer);
1640 worker.timer = NULL;
1644 etRunner::addTimer()
1648 worker.timer = ecore_timer_add(worker.waitTime,
1654 etRunner::addTimer(double time)
1658 worker.timer = ecore_timer_add(time,
1664 etRunner::waitForDestroy()
1666 work(E_TEST_WORK_TIME);
1670 etRunner::initProtocols()
1672 Eina_Iterator *globals = NULL;
1673 Ecore_Wl2_Global *global = NULL;
1674 struct wl_registry *registry = NULL;
1676 registry = ecore_wl2_display_registry_get(ecore_wl2_connected_display_get(NULL));
1677 globals = ecore_wl2_display_globals_get(ecore_wl2_connected_display_get(NULL));
1679 EINA_SAFETY_ON_NULL_GOTO(registry, err);
1680 EINA_SAFETY_ON_NULL_GOTO(globals, err);
1682 EINA_ITERATOR_FOREACH(globals, global)
1684 if (!strcmp(global->interface, "tizen_policy"))
1686 tzPolicy = (struct tizen_policy *)
1687 wl_registry_bind(registry,
1689 &tizen_policy_interface,
1690 (global->version > 7)? 7 : global->version);
1692 if (!strcmp(global->interface, "tizen_surface"))
1694 tzSurface = (struct tizen_surface *)
1695 wl_registry_bind(registry,
1697 &tizen_surface_interface,
1698 (global->version > 1)? 1 : global->version);
1700 if (!strcmp(global->interface, "tizen_launch_effect"))
1702 tzlaunch_effect = (struct tizen_launch_effect *)
1703 wl_registry_bind(registry,
1705 &tizen_launch_effect_interface,
1706 (global->version > 1)? 1 : global->version);
1708 if (!strcmp(global->interface, "wl_output"))
1710 wlOutput = (struct wl_output *)
1711 wl_registry_bind(registry,
1713 &wl_output_interface,
1714 (global->version > 2)? 2 : global->version);
1715 wl_output_add_listener(wlOutput, &_e_test_output_listener, NULL);
1721 wl_output_destroy(wlOutput);
1727 EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
1728 EINA_SAFETY_ON_NULL_GOTO(tzSurface, err);
1729 EINA_SAFETY_ON_NULL_GOTO(tzlaunch_effect, err);
1731 eina_iterator_free(globals);
1736 eina_iterator_free(globals);
1740 /* callbacks - method */
1742 _cb_method_win_info_get(void *data,
1743 const Eldbus_Message *msg,
1746 const char *name = NULL, *text = NULL, *wname = NULL;
1749 Eina_Bool res = EINA_FALSE;
1753 res = eldbus_message_error_get(msg, &name, &text);
1754 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1756 res = eldbus_message_arguments_get
1761 &tw->x, &tw->y, &tw->w, &tw->h,
1778 tw->iconic.set = EINA_TRUE;
1779 tw->iconic.by_client = EINA_TRUE;
1782 tw->iconic.set = EINA_TRUE;
1783 tw->iconic.by_client = EINA_FALSE;
1786 tw->iconic.set = EINA_FALSE;
1787 tw->iconic.by_client = EINA_FALSE;
1793 // change window name from char * to Eina_Stringshare
1795 eina_stringshare_del(tw->name);
1796 tw->name = eina_stringshare_add(wname);
1800 if ((name) || (text))
1802 ERR("errname:%s errmsg:%s\n", name, text);
1805 etRunner::get().finishWork();
1809 _cb_method_win_info_list_get(void *data,
1810 const Eldbus_Message *msg,
1813 const char *name = NULL, *text = NULL, *wname = NULL;
1815 Eldbus_Message_Iter *array = NULL, *ec = NULL;
1816 Window_Info_List *info_list = (Window_Info_List *)data;
1817 Eina_Bool res = EINA_FALSE, animating = EINA_FALSE;
1819 if (info_list == NULL)
1822 res = eldbus_message_error_get(msg, &name, &text);
1823 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1825 res = eldbus_message_arguments_get(msg, "a(" E_TC_SIGN_WIN_INFO ")", &array);
1826 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1828 while (eldbus_message_iter_get_and_next(array, 'r', &ec))
1830 etWin *tw = new etWin();
1833 res = eldbus_message_iter_arguments_get(
1838 &tw->x, &tw->y, &tw->w, &tw->h,
1855 tw->iconic.set = EINA_TRUE;
1856 tw->iconic.by_client = EINA_TRUE;
1859 tw->iconic.set = EINA_TRUE;
1860 tw->iconic.by_client = EINA_FALSE;
1863 tw->iconic.set = EINA_FALSE;
1864 tw->iconic.by_client = EINA_FALSE;
1870 // change name to eina_stringshare
1873 WRN("Failed to get win info\n");
1877 tw->name = eina_stringshare_add(wname);
1881 animating = EINA_TRUE;
1885 WRN("Failed to get win info\n");
1890 info_list->list = eina_list_append(info_list->list, tw);
1894 info_list->retry = EINA_TRUE;
1897 if ((name) || (text))
1899 ERR("errname:%s errmsg:%s\n", name, text);
1902 etRunner::get().finishWork();
1906 _cb_method_window_register(void *data,
1907 const Eldbus_Message *msg,
1910 const char *name = NULL, *text = NULL;
1911 Eina_Bool res = EINA_FALSE;
1912 Eina_Bool *accepted = (Eina_Bool *)data;
1914 *accepted = EINA_FALSE;
1916 res = eldbus_message_error_get(msg, &name, &text);
1917 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1919 res = eldbus_message_arguments_get(msg, "b", accepted);
1922 if ((name) || (text))
1924 ERR("errname: %s errmsg: %s\n", name, text);
1927 etRunner::get().finishWork();
1931 _cb_method_zone_rotation_change(void *data,
1932 const Eldbus_Message *msg,
1935 const char *name = NULL, *text = NULL;
1936 Eina_Bool res = EINA_FALSE;
1937 Eina_Bool *allowed = (Eina_Bool *)data;
1939 *allowed = EINA_FALSE;
1941 res = eldbus_message_error_get(msg, &name, &text);
1942 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1944 res = eldbus_message_arguments_get(msg, "b", allowed);
1945 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1946 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1949 if ((name) || (text))
1951 ERR("errname: %s errmsg: %s\n", name, text);
1954 etRunner::get().finishWork();
1958 _cb_method_window_effect(void *data,
1959 const Eldbus_Message *msg,
1962 const char *name = NULL, *text = NULL;
1963 Eina_Bool res = EINA_FALSE;
1964 Eina_Bool *allowed = (Eina_Bool *)data;
1966 *allowed = EINA_FALSE;
1968 res = eldbus_message_error_get(msg, &name, &text);
1969 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1971 res = eldbus_message_arguments_get(msg, "b", allowed);
1972 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1973 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1976 if ((name) || (text))
1978 ERR("errname: %s errmsg: %s\n", name, text);
1981 etRunner::get().finishWork();
1985 _cb_method_set_tc_start_end(void *data,
1986 const Eldbus_Message *msg,
1989 const char *name = NULL, *text = NULL;
1990 Eina_Bool res = EINA_FALSE;
1991 Eina_Bool *accept = (Eina_Bool *)data;
1993 *accept = EINA_FALSE;
1995 res = eldbus_message_error_get(msg, &name, &text);
1996 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1998 res = eldbus_message_arguments_get(msg, "b", accept);
1999 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2000 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
2003 if ((name) || (text))
2005 ERR("errname: %s errmsg: %s\n", name, text);
2008 etRunner::get().finishWork();
2012 _cb_method_set_tc_timeout(void *data,
2013 const Eldbus_Message *msg,
2016 const char *name = NULL, *text = NULL;
2017 Eina_Bool res = EINA_FALSE;
2018 Eina_Bool *accept = (Eina_Bool *)data;
2020 *accept = EINA_FALSE;
2022 res = eldbus_message_error_get(msg, &name, &text);
2023 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2025 res = eldbus_message_arguments_get(msg, "b", accept);
2026 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2027 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
2030 if ((name) || (text))
2032 ERR("errname: %s errmsg: %s\n", name, text);
2035 etRunner::get().finishWork();
2039 _cb_method_transient_for_below(void *data,
2040 const Eldbus_Message *msg,
2043 const char *name = NULL, *text = NULL;
2044 Eina_Bool res = EINA_FALSE;
2045 Eina_Bool *accept = (Eina_Bool *)data;
2047 *accept = EINA_FALSE;
2049 res = eldbus_message_error_get(msg, &name, &text);
2050 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2052 res = eldbus_message_arguments_get(msg, "b", accept);
2053 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2054 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
2057 if ((name) || (text))
2059 ERR("errname: %s errmsg: %s\n", name, text);
2062 etRunner::get().finishWork();
2066 _cb_method_aux_hint_get(void *data,
2067 const Eldbus_Message *msg,
2070 auxHintEventItem **hint = (auxHintEventItem **) data;
2071 const char *name = NULL, *text = NULL;
2072 Eina_Bool res = EINA_FALSE;
2074 const char *hint_key, *hint_val;
2076 res = eldbus_message_error_get(msg, &name, &text);
2077 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2079 res = eldbus_message_arguments_get(msg, "iss", &id, &hint_key, &hint_val);
2080 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2082 *hint = new auxHintEventItem(0, E_TC_EVENT_TYPE_AUX_HINT_CHANGED, id, hint_key, hint_val);
2085 if ((name) || (text))
2087 ERR("errname: %s errmsg: %s\n", name, text);
2090 etRunner::get().finishWork();
2093 /* callbacks - signal */
2095 _cb_signal_vis_changed(void *data,
2096 const Eldbus_Message *msg)
2098 etRunner *runner = (etRunner *)data;
2099 std::shared_ptr<visibleEventItem> visibleEvent = NULL;
2100 const char *name = NULL, *text = NULL;
2101 Eina_Bool res = EINA_FALSE;
2105 res = eldbus_message_error_get(msg, &name, &text);
2106 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2108 res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
2109 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2111 visibleEvent = std::make_shared<visibleEventItem>(id, E_TC_EVENT_TYPE_VIS_CHANGED, vis);
2112 EINA_SAFETY_ON_NULL_GOTO(visibleEvent, finish);
2114 runner->insertEventQueue(visibleEvent);
2117 if ((name) || (text))
2119 ERR("errname:%s errmsg:%s\n", name, text);
2124 _cb_signal_stack_changed(void *data,
2125 const Eldbus_Message *msg)
2127 etRunner *runner = (etRunner *)data;
2128 const char *name = NULL, *text = NULL;
2129 Eina_Bool res = EINA_FALSE;
2130 Ecore_Window id = 0;
2132 res = eldbus_message_error_get(msg, &name, &text);
2133 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2135 res = eldbus_message_arguments_get(msg, "u", &id);
2136 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2138 runner->insertEventQueue(id, E_TC_EVENT_TYPE_STACK_CHANGED);
2141 if ((name) || (text))
2143 ERR("errname:%s errmsg:%s\n", name, text);
2148 _cb_signal_win_rot_changed(void *data,
2149 const Eldbus_Message *msg)
2151 etRunner *runner = (etRunner *)data;
2152 std::shared_ptr<rotationEventItem> rotationEvent = NULL;
2153 const char *name = NULL, *text = NULL;
2154 Eina_Bool res = EINA_FALSE;
2158 res = eldbus_message_error_get(msg, &name, &text);
2159 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2161 /* TODO unused 'window id' and 'angle' */
2162 res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
2163 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2165 rotationEvent = std::make_shared<rotationEventItem>(id, E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE, angle);
2166 EINA_SAFETY_ON_NULL_GOTO(rotationEvent, finish);
2168 runner->insertEventQueue(rotationEvent);
2171 if ((name) || (text))
2173 ERR("errname:%s errmsg:%s\n", name, text);
2178 _cb_signal_focus_changed(void *data,
2179 const Eldbus_Message *msg)
2181 etRunner *runner = (etRunner *)data;
2182 std::shared_ptr<focusEventItem> focusEvent = NULL;
2183 const char *name = NULL, *text = NULL;
2184 Eina_Bool res = EINA_FALSE, focused = EINA_FALSE;
2185 Ecore_Window id = 0;
2187 res = eldbus_message_error_get(msg, &name, &text);
2188 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2190 res = eldbus_message_arguments_get(msg, "ub", &id, &focused);
2191 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2193 focusEvent = std::make_shared<focusEventItem>(id, E_TC_EVENT_TYPE_FOCUS_CHANGED, focused);
2194 EINA_SAFETY_ON_NULL_GOTO(focusEvent, finish);
2196 runner->insertEventQueue(focusEvent);
2199 if ((name) || (text))
2201 ERR("errname:%s errmsg:%s\n", name, text);
2206 _cb_signal_render_while_effect_run(void *data,
2207 const Eldbus_Message *msg)
2209 etRunner *runner = (etRunner *)data;
2210 const char *name = NULL, *text = NULL;
2211 Eina_Bool res = EINA_FALSE;
2212 Ecore_Window id = 0;
2214 res = eldbus_message_error_get(msg, &name, &text);
2215 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2217 res = eldbus_message_arguments_get(msg, "u", &id);
2218 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2220 runner->insertEventQueue(id, E_TC_EVENT_TYPE_EFFECT);
2223 if ((name) || (text))
2225 ERR("errname:%s errmsg:%s\n", name, text);
2230 _cb_signal_aux_hint_changed(void *data,
2231 const Eldbus_Message *msg)
2233 etRunner *runner = (etRunner *)data;
2234 const char *name = NULL, *text = NULL;
2235 Eina_Bool res = EINA_FALSE;
2236 Ecore_Window win = 0;
2238 std::shared_ptr<auxHintEventItem> hint = NULL;
2239 const char *hint_key, *hint_val;
2241 res = eldbus_message_error_get(msg, &name, &text);
2242 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2244 res = eldbus_message_arguments_get(msg, "uuss", &win, &hint_id, &hint_key, &hint_val);
2245 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2247 hint = std::make_shared<auxHintEventItem>(win, E_TC_EVENT_TYPE_AUX_HINT_CHANGED, hint_id, hint_key, hint_val);
2248 EINA_SAFETY_ON_NULL_GOTO(hint, finish);
2250 runner->insertEventQueue(hint);
2253 if ((name) || (text))
2255 ERR("errname:%s errmsg:%s\n", name, text);
2260 _cb_signal_iconic_state_changed(void *data,
2261 const Eldbus_Message *msg)
2263 etRunner *runner = (etRunner *)data;
2264 const char *name = NULL, *text = NULL;
2265 Eina_Bool res = EINA_FALSE;
2266 Ecore_Window win = 0;
2267 std::shared_ptr<iconicStateEventItem> iconicEvent = NULL;
2268 Eina_Bool iconic = EINA_FALSE, by_client = EINA_FALSE;
2270 res = eldbus_message_error_get(msg, &name, &text);
2271 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2273 res = eldbus_message_arguments_get(msg, "ubb", &win, &iconic, &by_client);
2274 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2276 iconicEvent = std::make_shared<iconicStateEventItem>(win, E_TC_EVENT_TYPE_ICONIC_STATE_CHANGED, iconic, by_client);
2277 EINA_SAFETY_ON_NULL_GOTO(iconicEvent, finish);
2279 runner->insertEventQueue(iconicEvent);
2282 if ((name) || (text))
2284 ERR("errname:%s errmsg:%s\n", name, text);
2288 /* callbacks - timer */
2290 _cb_work_timeout(void *data)
2292 etRunner::get().finishWork();
2293 return ECORE_CALLBACK_CANCEL;
2296 /* callbacks - ecore */
2298 _cb_ecore_key_down(void *data, int type, void *event)
2300 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
2301 etRunner *runner = (etRunner *)data;
2303 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
2305 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2307 if (runner->ev.key.ecore_state == EINA_FALSE &&
2308 type == ECORE_EVENT_KEY_DOWN)
2310 runner->ev.key.ecore_state = EINA_TRUE;
2314 return ECORE_CALLBACK_PASS_ON;
2318 _cb_ecore_key_up(void *data, int type, void *event)
2320 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
2321 etRunner *runner = (etRunner *)data;
2323 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
2325 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2327 if (runner->ev.key.ecore_state == EINA_TRUE &&
2328 type == ECORE_EVENT_KEY_UP)
2330 runner->ev.key.ecore_state = EINA_FALSE;
2331 runner->insertEventQueue(0, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
2335 return ECORE_CALLBACK_PASS_ON;
2338 /* callbacks - evas */
2340 _cb_evas_key_down(void *data, Evas * evas, Evas_Object * obj, void * event_info)
2342 Evas_Event_Key_Down *ev;
2343 etRunner *runner = (etRunner *)data;
2345 ev = (Evas_Event_Key_Down *)event_info;
2347 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2349 if (runner->ev.key.evas_state == EINA_FALSE &&
2350 runner->ev.elm_win == obj)
2352 runner->ev.key.evas_state = EINA_TRUE;
2355 evas_object_event_callback_del(runner->ev.elm_win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down);
2359 _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
2361 Evas_Event_Key_Up *ev;
2362 etRunner *runner = (etRunner *)data;
2364 ev = (Evas_Event_Key_Up *)event_info;
2366 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2368 if (runner->ev.key.evas_state == EINA_TRUE &&
2369 runner->ev.elm_win == obj)
2371 runner->ev.key.evas_state = EINA_FALSE;
2372 runner->ev.elm_win = NULL;
2374 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
2377 evas_object_event_callback_del(runner->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up);
2380 /* callbacks - smart object */
2382 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
2384 etRunner *runner = (etRunner *)data;
2385 if (runner && runner->ev.elm_win == obj)
2387 runner->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED;
2392 _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info)
2394 etRunner *runner = (etRunner *)data;
2395 if (runner && runner->ev.elm_win == obj)
2397 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE;
2399 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2401 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2402 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2403 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2408 _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info)
2410 etRunner *runner = (etRunner *)data;
2411 if (runner && runner->ev.elm_win == obj)
2413 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE;
2415 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
2416 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE) &&
2417 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE))
2419 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2421 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2422 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2423 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2428 #ifndef DISABLE_GESTURE_TESTS
2430 _cb_gesture_tap(void *data, int type, void *event)
2432 etRunner *runner = (etRunner *)data;
2433 efl_util_event_gesture_tap_s *ev =
2434 (efl_util_event_gesture_tap_s *)event;
2436 if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
2437 (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
2439 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_TAP);
2440 //ecore_event_handler_del(runner->ev.key.eh);
2443 return ECORE_CALLBACK_PASS_ON;
2447 _cb_gesture_tap_delay_timer(void *data)
2449 etRunner *runner = &etRunner::get();
2450 etInputGenHandler *inputgen_h = (etInputGenHandler *) data;
2453 for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
2455 if (!runner->ev.gesture.tap.pressed)
2457 inputgen_h->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
2461 inputgen_h->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
2465 runner->ev.gesture.timer = NULL;
2467 runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
2468 if (!runner->ev.gesture.tap.pressed)
2470 runner->ev.gesture.tap.current_repeats--;
2473 if (runner->ev.gesture.tap.current_repeats > 0)
2475 runner->ev.gesture.timer = ecore_timer_add(0.11,
2476 _cb_gesture_tap_delay_timer,
2480 return ECORE_CALLBACK_CANCEL;
2484 etRunner::generateTapGesture(InputGenHandler handler)
2486 addGestureSignalHandlers();
2488 ev.gesture.tap.current_repeats = ev.gesture.tap.repeats;
2489 ev.gesture.tap.pressed = EINA_FALSE;
2491 ev.gesture.timer = ecore_timer_add(0.11,
2492 _cb_gesture_tap_delay_timer,
2498 _cb_gesture_edge_swipe(void *data, int type, void *event)
2500 etRunner *runner = (etRunner *)data;
2501 efl_util_event_gesture_edge_swipe_s *ev =
2502 (efl_util_event_gesture_edge_swipe_s *)event;
2504 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2505 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge))
2507 if (runner->ev.gesture.timer)
2508 runner->ev.gesture.edge.get_event = EINA_TRUE;
2511 return ECORE_CALLBACK_PASS_ON;
2515 _cb_gesture_edge_swipe_delay_timer(void *data)
2517 etRunner *runner = &etRunner::get();
2518 etInputGenHandler *inputgen_h = (etInputGenHandler *) data;
2519 int i, cnt, fingers, w, h;
2520 efl_util_gesture_edge_e edge;
2522 cnt = ++runner->ev.gesture.edge.touch_count;
2523 fingers = runner->ev.gesture.edge.fingers;
2524 edge = runner->ev.gesture.edge.edge;
2525 w = runner->output.w - 1;
2526 h = runner->output.h - 1;
2530 for (i = 0; i < fingers; i++)
2534 case EFL_UTIL_GESTURE_EDGE_TOP:
2535 inputgen_h->generateTouchDown(i, 100 * (i + 1), 1);
2537 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2538 inputgen_h->generateTouchDown(i, w - 1, 100 * (i + 1));
2540 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2541 inputgen_h->generateTouchDown(i, 100 * (i + 1), h - 1);
2543 case EFL_UTIL_GESTURE_EDGE_LEFT:
2544 inputgen_h->generateTouchDown(i, 1, 100 * (i + 1));
2553 for (i = 0; i < fingers; i++)
2557 case EFL_UTIL_GESTURE_EDGE_TOP:
2558 inputgen_h->generateTouchMove(i, 100 * (i + 1), 40 * cnt * cnt);
2560 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2561 inputgen_h->generateTouchMove(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2563 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2564 inputgen_h->generateTouchMove(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2566 case EFL_UTIL_GESTURE_EDGE_LEFT:
2567 inputgen_h->generateTouchMove(i, 40 * cnt * cnt, 100 * (i + 1));
2577 for (i = 0; i < fingers; i++)
2581 case EFL_UTIL_GESTURE_EDGE_TOP:
2582 inputgen_h->generateTouchUp(i, 100 * (i + 1), 40 * cnt * cnt);
2584 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2585 inputgen_h->generateTouchUp(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2587 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2588 inputgen_h->generateTouchUp(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2590 case EFL_UTIL_GESTURE_EDGE_LEFT:
2591 inputgen_h->generateTouchUp(i, 40 * cnt * cnt, 100 * (i + 1));
2598 runner->ev.gesture.timer = NULL;
2599 if (runner->ev.gesture.edge.get_event)
2601 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
2602 //ecore_event_handler_del(runner->ev.key.eh);
2604 return ECORE_CALLBACK_CANCEL;
2607 runner->ev.gesture.timer = NULL;
2608 runner->ev.gesture.timer = ecore_timer_add(0.11,
2609 _cb_gesture_edge_swipe_delay_timer,
2612 return ECORE_CALLBACK_CANCEL;
2616 etRunner::generateEdgeSwipeGesture(InputGenHandler handler)
2618 ev.gesture.edge.touch_count = 0;
2619 ev.gesture.edge.get_event = EINA_FALSE;
2621 ev.gesture.timer = ecore_timer_add(0.11,
2622 _cb_gesture_edge_swipe_delay_timer,
2629 _cb_gesture_edge_drag(void *data, int type, void *event)
2631 etRunner *runner = (etRunner *)data;
2632 efl_util_event_gesture_edge_drag_s *ev =
2633 (efl_util_event_gesture_edge_drag_s *)event;
2635 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2636 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge) &&
2637 (ev->mode == EFL_UTIL_GESTURE_MODE_END))
2639 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG);
2640 //ecore_event_handler_del(runner->ev.key.eh);
2643 return ECORE_CALLBACK_PASS_ON;
2647 _cb_gesture_edge_drag_delay_timer(void *data)
2649 etRunner *runner = &etRunner::get();
2650 etInputGenHandler *inputgen_h = (etInputGenHandler *)data;
2652 int i, cnt, fingers, w, h;
2653 efl_util_gesture_edge_e edge;
2655 cnt = ++runner->ev.gesture.edge.touch_count;
2656 fingers = runner->ev.gesture.edge.fingers;
2657 edge = runner->ev.gesture.edge.edge;
2658 w = runner->output.w - 1;
2659 h = runner->output.h - 1;
2663 for (i = 0; i < fingers; i++)
2667 case EFL_UTIL_GESTURE_EDGE_TOP:
2668 inputgen_h->generateTouchDown(i, 100 * (i + 1), 1);
2670 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2671 inputgen_h->generateTouchDown(i, w - 1, 100 * (i + 1));
2673 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2674 inputgen_h->generateTouchDown(i, 100 * (i + 1), h - 1);
2676 case EFL_UTIL_GESTURE_EDGE_LEFT:
2677 inputgen_h->generateTouchDown(i, 1, 100 * (i + 1));
2686 for (i = 0; i < fingers; i++)
2690 case EFL_UTIL_GESTURE_EDGE_TOP:
2691 inputgen_h->generateTouchMove(i, 100 * (i + 1), 50 * cnt);
2693 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2694 inputgen_h->generateTouchMove(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2696 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2697 inputgen_h->generateTouchMove(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2699 case EFL_UTIL_GESTURE_EDGE_LEFT:
2700 inputgen_h->generateTouchMove(i, 50 * cnt, 100 * (i + 1));
2710 for (i = 0; i < fingers; i++)
2714 case EFL_UTIL_GESTURE_EDGE_TOP:
2715 inputgen_h->generateTouchUp(i, 100 * (i + 1), 50 * cnt);
2717 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2718 inputgen_h->generateTouchUp(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2720 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2721 inputgen_h->generateTouchUp(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2723 case EFL_UTIL_GESTURE_EDGE_LEFT:
2724 inputgen_h->generateTouchUp(i, 50 * cnt, 100 * (i + 1));
2731 runner->ev.gesture.timer = NULL;
2732 return ECORE_CALLBACK_CANCEL;
2735 runner->ev.gesture.timer = NULL;
2736 runner->ev.gesture.timer = ecore_timer_add(0.11,
2737 _cb_gesture_edge_drag_delay_timer,
2740 return ECORE_CALLBACK_CANCEL;
2744 etRunner::generateEdgeDragGesture(InputGenHandler handler)
2746 ev.gesture.edge.touch_count = 0;
2748 ev.gesture.timer = ecore_timer_add(0.11,
2749 _cb_gesture_edge_drag_delay_timer,
2757 _verifyTCGetBufferSize(tbm_surface_h buffer, int *buffer_w, int *buffer_h, int *stride)
2759 tbm_surface_info_s info;
2762 EINA_SAFETY_ON_NULL_RETURN(buffer);
2764 ret = tbm_surface_get_info(buffer, &info);
2765 if (ret != TBM_SURFACE_ERROR_NONE)
2769 *buffer_w = info.planes[0].stride >> 2;
2772 *buffer_h = info.planes[0].size / info.planes[0].stride;
2775 *stride = info.planes[0].stride;
2779 _verifyTCdumpPng(const char *file, const void *data, int width, int height, int stride)
2781 pixman_image_t *image;
2782 cairo_surface_t *cairo_surface;
2783 cairo_status_t status;
2785 image = pixman_image_create_bits_no_clear(PIXMAN_x8r8g8b8, width, height, (uint32_t *)data, stride);
2786 if (image == (pixman_image_t *)NULL)
2788 ERR("pixman_image_create_bits_no_clear failed");
2792 cairo_surface = cairo_image_surface_create_for_data((unsigned char *)pixman_image_get_data(image),
2793 CAIRO_FORMAT_RGB24, pixman_image_get_width(image), pixman_image_get_height(image),
2794 pixman_image_get_stride(image));
2795 if (cairo_surface_status(cairo_surface) != CAIRO_STATUS_SUCCESS)
2797 ERR("cairo_image_surface_create_for_data failed");
2798 pixman_image_unref(image);
2802 status = cairo_surface_write_to_png(cairo_surface, file);
2803 if (status != CAIRO_STATUS_SUCCESS)
2805 ERR("Failed to save image '%s': %s\n", file, cairo_status_to_string(status));
2806 pixman_image_unref(image);
2810 cairo_surface_destroy(cairo_surface);
2811 pixman_image_unref(image);
2815 _verifyTCMakeDumpPath(std::string basetype, std::string tcname)
2817 std::string path = "/tmp/etTestErr/";
2818 std::string format = ".png";
2821 ret = mkdir(path.c_str(), 0755);
2822 if (ret < 0 && errno != EEXIST)
2824 ERR("mkdir failed. (%s)\n", path.c_str());
2828 path = path + basetype + '/';
2829 ret = mkdir(path.c_str(), 0755);
2830 if (ret < 0 && errno != EEXIST)
2832 ERR("mkdir failed. (%s)\n", path.c_str());
2836 path = path + tcname + format;
2837 ERR("path : %s", path.c_str());
2843 _verifyTCDumpBuffer(tbm_surface_h buffer, std::string basetype, std::string tcname)
2845 std::string dumppath;
2846 tbm_surface_info_s info;
2851 EINA_SAFETY_ON_NULL_RETURN(buffer);
2853 dumppath = _verifyTCMakeDumpPath(basetype, tcname);
2854 if (dumppath.length() == 0)
2856 ERR("getting dumppath failed");
2860 ret = tbm_surface_map(buffer, TBM_OPTION_READ, &info);
2861 if (ret != TBM_SURFACE_ERROR_NONE)
2863 ERR("tbm_surface_map failed");
2867 _verifyTCGetBufferSize(buffer, &bw, &bh, &stride);
2869 bo_cnt = tbm_surface_internal_get_num_bos(buffer);
2870 DBG("buffer: bo_cnt(%d) %dx%d(%dx%d) %c%c%c%c, plane: (%p+%d, %d,%d) (%p+%d, %d,%d) (%p+%d, %d,%d)",
2871 bo_cnt, bw, bh, info.width, info.height, FOURCC_STR(info.format),
2872 info.planes[0].ptr, info.planes[0].offset, info.planes[0].stride, info.planes[0].size,
2873 info.planes[1].ptr, info.planes[1].offset, info.planes[1].stride, info.planes[1].size,
2874 info.planes[2].ptr, info.planes[2].offset, info.planes[2].stride, info.planes[2].size);
2876 if (info.format == TBM_FORMAT_ARGB8888 || info.format == TBM_FORMAT_XRGB8888)
2877 _verifyTCdumpPng(dumppath.c_str(), info.planes[0].ptr, bw, bh, stride);
2879 DBG("not supported dump format");
2881 tbm_surface_unmap(buffer);
2885 _verifyTCMakeRefPath(std::string basetype, std::string tcname)
2887 std::string path = "/usr/share/e_tizen_unittests/data/";
2888 std::string format = ".png";
2890 path = path + etRunner::get().target + '/' + basetype + '/' + tcname + format;
2895 pixman_format_code_t
2896 _verifyTCCairo2Pixman(cairo_format_t fmt)
2898 if (fmt == CAIRO_FORMAT_ARGB32)
2899 return PIXMAN_a8r8g8b8;
2900 else if (fmt == CAIRO_FORMAT_RGB24)
2901 return PIXMAN_x8r8g8b8;
2903 return (pixman_format_code_t)0;
2907 destroy_cairo_surface(pixman_image_t *image, void *data)
2909 cairo_surface_t *surface = (cairo_surface_t *)data;
2911 cairo_surface_destroy(surface);
2915 _verifyTCConvertx8r8g8b8(pixman_image_t *image)
2917 pixman_image_t *ret;
2921 if (pixman_image_get_format(image) == PIXMAN_x8r8g8b8)
2922 return pixman_image_ref(image);
2924 width = pixman_image_get_width(image);
2925 height = pixman_image_get_height(image);
2927 ret = pixman_image_create_bits_no_clear(PIXMAN_x8r8g8b8, width, height, NULL, 0);
2930 ERR("pixman_image_create_bits_no_clear failed");
2934 pixman_image_composite32(PIXMAN_OP_SRC, image, NULL, ret, 0, 0, 0, 0, 0, 0, width, height);
2940 _verifyTCLoadImage(const char *fname)
2942 pixman_image_t *image;
2943 pixman_image_t *converted;
2944 cairo_format_t cairo_fmt;
2945 pixman_format_code_t pixman_fmt;
2946 cairo_surface_t *reference_cairo_surface;
2947 cairo_status_t status;
2953 reference_cairo_surface = cairo_image_surface_create_from_png(fname);
2954 cairo_surface_flush(reference_cairo_surface);
2955 status = cairo_surface_status(reference_cairo_surface);
2956 if (status != CAIRO_STATUS_SUCCESS)
2958 ERR("Could not open %s: %s\n", fname, cairo_status_to_string(status));
2959 cairo_surface_destroy(reference_cairo_surface);
2963 cairo_fmt = cairo_image_surface_get_format(reference_cairo_surface);
2964 pixman_fmt = _verifyTCCairo2Pixman(cairo_fmt);
2965 if (pixman_fmt == (pixman_format_code_t)0)
2967 ERR("unknown format");
2968 cairo_surface_destroy(reference_cairo_surface);
2972 width = cairo_image_surface_get_width(reference_cairo_surface);
2973 height = cairo_image_surface_get_height(reference_cairo_surface);
2974 stride = cairo_image_surface_get_stride(reference_cairo_surface);
2975 data = cairo_image_surface_get_data(reference_cairo_surface);
2977 image = pixman_image_create_bits_no_clear(pixman_fmt, width, height, (uint32_t *)data, stride);
2978 if (image == (pixman_image_t *)NULL)
2980 ERR("pixman_image_create_bits_no_clear failed");
2981 cairo_surface_destroy(reference_cairo_surface);
2985 pixman_image_set_destroy_function(image, destroy_cairo_surface, reference_cairo_surface);
2987 converted = _verifyTCConvertx8r8g8b8(image);
2988 pixman_image_unref(image);
2994 _verifyTCCheckPixel(uint32_t pix_a, uint32_t pix_b, int w, int h)
2999 int val_a, val_b, diff;
3001 for (shift = 8, i = 1; i < 4; shift += 8, i++)
3003 val_a = (pix_a >> shift) & 0xFF;
3004 val_b = (pix_b >> shift) & 0xFF;
3005 diff = val_b - val_a;
3007 if (diff < diffmin || diff > diffmax)
3015 _verifyTCCheckImage(pixman_image_t *surface, pixman_image_t *ref)
3017 Eina_Bool ret = EINA_TRUE;
3018 int surface_width, surface_height, surface_stride;
3019 uint32_t *surface_data;
3021 uint32_t *pixman_data;
3023 uint32_t *current_surface_data;
3024 uint32_t *current_pixman_data;
3026 surface_width = pixman_image_get_width(surface);
3027 surface_height = pixman_image_get_height(surface);
3028 surface_stride = pixman_image_get_stride(surface);
3029 surface_data = pixman_image_get_data(surface);
3031 pixman_width = pixman_image_get_width(ref);
3032 pixman_data = pixman_image_get_data(ref);
3034 for (h = 0; h < surface_height; h++ )
3036 current_surface_data = surface_data + h * surface_stride;
3037 current_pixman_data = pixman_data + h * pixman_width;
3039 for (w = 0; w < surface_width; w++)
3041 ret = _verifyTCCheckPixel(*current_surface_data, *current_pixman_data, w, h);
3042 if (ret == EINA_FALSE)
3045 current_surface_data++;
3046 current_pixman_data++;
3054 _verifyTC(tbm_surface_h surface, std::string basetype, std::string tcname)
3056 std::string refpath;
3057 pixman_image_t *shot;
3058 pixman_image_t *ref;
3059 Eina_Bool ret = EINA_FALSE;
3060 tbm_surface_info_s info;
3063 refpath = _verifyTCMakeRefPath(basetype, tcname);
3064 if (refpath.length() == 0)
3066 ERR("getting dumppath failed");
3070 ref = _verifyTCLoadImage(refpath.c_str());
3071 if (ref == (pixman_image_t *)NULL)
3073 ERR("LoadImage failed");
3077 error = tbm_surface_map(surface, TBM_OPTION_READ, &info);
3078 if (error != TBM_SURFACE_ERROR_NONE)
3080 ERR("tbm_surface_map failed");
3081 pixman_image_unref(ref);
3085 shot = pixman_image_create_bits_no_clear(PIXMAN_x8r8g8b8, info.width, info.height, (uint32_t *)info.planes[0].ptr, info.planes[0].stride >> 2);
3086 if (shot == (pixman_image_t *)NULL)
3088 ERR("pixman_image_create_bits_no_clear failed");
3089 tbm_surface_unmap(surface);
3090 pixman_image_unref(ref);
3094 ret = _verifyTCCheckImage(shot, ref);
3096 pixman_image_unref(shot);
3097 pixman_image_unref(ref);
3103 etRunner::verifyTC(std::string basetype, std::string tcname)
3105 tbm_surface_h surface = NULL;
3106 Eina_Bool ret = EINA_FALSE;
3108 EINA_SAFETY_ON_FALSE_RETURN_VAL(execute_verifyTC, EINA_TRUE);
3109 EINA_SAFETY_ON_NULL_RETURN_VAL(screenshot, EINA_FALSE);
3113 surface = efl_util_screenshot_take_tbm_surface(screenshot);
3114 if (surface == NULL)
3116 ERR("screenshot failed");
3120 ret = _verifyTC(surface, basetype, tcname);
3121 if (ret == EINA_FALSE)
3123 ERR("verify failed");
3124 _verifyTCDumpBuffer(surface, basetype, tcname);
3127 tbm_surface_destroy(surface);
3134 _parseTargetInfo(std::string target)
3136 std::string tmp = "";
3137 std::string delimiter = "--target=";
3139 if (target.find(delimiter.c_str()) == std::string::npos)
3142 tmp = target.substr(delimiter.length());
3144 if ((tmp.compare("mobile") == 0) || (tmp.compare("common") == 0))
3145 etRunner::get().target = tmp;
3148 ERR("not supported target. use mobile by default");
3149 etRunner::get().target = "mobile";
3156 etRunner::parseTargetInfo(int argc, char **argv)
3159 Eina_Bool find = EINA_FALSE;
3161 for (i = 0; i < argc; i++)
3163 if (_parseTargetInfo(argv[i]) == EINA_TRUE)
3169 if (find == EINA_FALSE)
3171 ERR("no target option. use mobile by default");
3172 etRunner::get().target = "mobile";