--- /dev/null
+#include "e_test_runner.h"
+
+static Eina_Bool
+_e_tc_rot_win_rotation_test(E_Test_Runner *runner, E_TC_Win *tw, int rot)
+{
+ Eina_Bool res;
+
+ res = e_test_runner_req_zone_rotation_change(runner, rot);
+ if (!res)
+ {
+ ERR("Changing rotaiton is denied.");
+ return EINA_FALSE;
+ }
+
+ res = e_test_runner_ev_wait(runner, E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE);
+ if (!res)
+ {
+ ERR("Failed waiting rotation change event");
+ return EINA_FALSE;
+ }
+
+ res = e_test_runner_req_win_info_get(runner, tw);
+ if ((!res) ||
+ (tw->rot != rot))
+ {
+ ERR("Failed to rotate res %d, pass %d, result %d", res, rot, tw->rot);
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+/* @ Brief
+ * Test whether available rotation works fine for a window.
+ *
+ * @ Test Step:
+ * 1. Creating a Window
+ * 2. Set a available rotation list(0, 90, 180, 270) to window
+ * 3. Request to server for rotation about all available angles.
+ * 4. Verifying a window is rotated.
+ *
+ * @ Expected Result:
+ * Window should be rotated after accepted request for rotation.
+ */
+ROT_TC_DEFINE(00, available_rots)
+{
+ E_TC_Win *tw;
+ Eina_Bool res;
+ int rot, saved_rot;
+ const int rots[4] = {0, 90, 180, 270};
+
+ /* create window */
+ tw = e_tc_win_add(NULL, ELM_WIN_BASIC,
+ EINA_FALSE, "Test Window for Rotation",
+ 0, 0, 0, 0, EINA_FALSE,
+ 200, E_TC_WIN_COLOR_BLUE);
+ EINA_SAFETY_ON_NULL_GOTO(tw, end);
+
+ /* set available rotations */
+ elm_win_wm_rotation_available_rotations_set(tw->elm_win, rots, 4);
+
+ /* register window */
+ res = e_test_runner_req_win_register(tc->runner, tw);
+ if (!res)
+ goto err_reg;
+
+ e_tc_win_geom_update(tw);
+ e_tc_win_show(tw);
+ e_test_runner_ev_wait(tc->runner, E_TC_EVENT_TYPE_VIS_ON);
+
+ /* Update window info */
+ res = e_test_runner_req_win_info_get(tc->runner, tw);
+ if (!res)
+ {
+ ERR("Failed to get initial window info");
+ goto err_info_get;
+ }
+
+ /* to restore orientation after finishing tc */
+ saved_rot = tw->rot;
+
+ for (rot = ((saved_rot + 90) % 360);
+ rot == saved_rot;
+ rot = ((rot + 90) % 360))
+ {
+ /* hard coded, reverse portrait(180) mode is disabled in mobile */
+ if (rot == 180) continue;
+
+ res = _e_tc_rot_win_rotation_test(tc->runner, tw, rot);
+ if (!res)
+ {
+ ERR("Failed to try to rotate given angle: %d", rot);
+ goto err_tc;
+ }
+ }
+
+ tc->passed = EINA_TRUE;
+
+err_tc:
+ /* restore orientation */
+ res = e_test_runner_req_zone_rotation_change(tc->runner, saved_rot);
+ if (!res)
+ ERR("Failed to restore orientation");
+err_info_get:
+ e_test_runner_req_win_deregister(tc->runner, tw);
+ e_tc_win_hide(tw);
+err_reg:
+ e_tc_win_del(tw);
+end:
+ return tc->passed;
+}
#include "e_test_runner.h"
#define E_TEST_RUNNER_WORK_TIME 3.0
+#define E_TC_SIGN_WIN_INFO "usiiiiibbbiibbbbbi"
int _log_dom = -1;
return id;
}
+static void
+_cb_method_win_info_get(void *data,
+ const Eldbus_Message *msg,
+ Eldbus_Pending *p EINA_UNUSED)
+{
+ const char *name = NULL, *text = NULL, *wname = NULL;
+ E_TC_Win *tw;
+ Eina_Bool res;
+
+ tw = data;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get
+ (msg,
+ E_TC_SIGN_WIN_INFO,
+ &tw->native_win,
+ &wname,
+ &tw->x, &tw->y, &tw->w, &tw->h,
+ &tw->layer,
+ &tw->effect,
+ &tw->vis.win,
+ &tw->vis.obj,
+ &tw->vis.opaque,
+ &tw->vis.type,
+ &tw->vis.skip,
+ &tw->iconic,
+ &tw->alpha,
+ &tw->focus.win,
+ &tw->focus.obj,
+ &tw->rot);
+
+ if (wname)
+ {
+ if (tw->name)
+ eina_stringshare_del(tw->name);
+ tw->name = eina_stringshare_add(wname);
+ }
+
+finish:
+ if ((name) || (text))
+ {
+ ERR("errname:%s errmsg:%s\n", name, text);
+ }
+
+ elm_exit();
+}
+
static void
_cb_method_win_info_list_get(void *data,
const Eldbus_Message *msg,
res = eldbus_message_error_get(msg, &name, &text);
EINA_SAFETY_ON_TRUE_GOTO(res, finish);
- res = eldbus_message_arguments_get(msg, "ua(usiiiiibbbiibbbbb)", &target_win, &array);
+ res = eldbus_message_arguments_get(msg, "ua("E_TC_SIGN_WIN_INFO")", &target_win, &array);
EINA_SAFETY_ON_FALSE_GOTO(res, finish);
while (eldbus_message_iter_get_and_next(array, 'r', &ec))
res = eldbus_message_iter_arguments_get
(ec,
- "usiiiiibbbiibbbbb",
+ E_TC_SIGN_WIN_INFO,
&tw->native_win,
&tw->name,
&tw->x, &tw->y, &tw->w, &tw->h,
&tw->iconic,
&tw->alpha,
&tw->focus.win,
- &tw->focus.obj);
+ &tw->focus.obj,
+ &tw->rot);
if (tw->effect)
animating = EINA_TRUE;
elm_exit();
}
+static void
+_cb_method_zone_rotation_change(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)
}
}
+static void
+_cb_signal_win_rot_changed(void *data,
+ const Eldbus_Message *msg)
+{
+ E_Test_Runner *runner = data;
+ const char *name = NULL, *text = NULL;
+ Eina_Bool res;
+ int angle = 0;
+ Ecore_Window id;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ /* TODO unused 'window id' and 'angle' */
+ res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+
+ runner->ev.response = runner->ev.expect;
+ elm_exit();
+
+finish:
+ if ((name) || (text))
+ {
+ ERR("errname:%s errmsg:%s\n", name, text);
+ }
+}
+
static Eina_Bool
_cb_work_time_out(void *data EINA_UNUSED)
{
return EINA_TRUE;
}
+Eina_Bool
+e_test_runner_req_zone_rotation_change(E_Test_Runner *runner, int angle)
+{
+ Eldbus_Pending *p;
+ Eina_Bool allowed = EINA_FALSE;
+
+ p = eldbus_proxy_call(runner->dbus.proxy,
+ "ChangeZoneRotation",
+ _cb_method_zone_rotation_change,
+ &allowed,
+ -1,
+ "i",
+ angle);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
+
+ elm_run();
+
+ return allowed;
+}
+
+Eina_Bool
+e_test_runner_req_win_info_get(E_Test_Runner *runner, E_TC_Win *tw)
+{
+ Eldbus_Pending *p;
+ Ecore_Window win;
+ int retry = 10;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(runner, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
+
+ win = tw->native_win;
+ while (retry)
+ {
+ p = eldbus_proxy_call(runner->dbus.proxy,
+ "GetWinInfo",
+ _cb_method_win_info_get,
+ tw,
+ -1,
+ "u",
+ win);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
+
+ elm_run();
+
+ if ((tw->native_win == win) && (!tw->effect))
+ return EINA_TRUE;
+ else
+ retry--;
+ }
+
+ if (tw->native_win != win)
+ {
+ ERR("Something Wrong. Difference with querying window and received window from server");
+ tw->native_win = win;
+ }
+
+ return EINA_FALSE;
+}
+
+
Eina_List *
e_test_runner_req_win_info_list_get(E_Test_Runner *runner)
{
while (info_list)
{
p = eldbus_proxy_call(runner->dbus.proxy,
- "GetWindowInfo",
+ "GetWinsInfo",
_cb_method_win_info_list_get,
info_list,
-1,
EINA_SAFETY_ON_NULL_GOTO(sh, finish);
break;
+ case E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE:
+ sh = eldbus_proxy_signal_handler_add(runner->dbus.proxy,
+ "WinRotationChanged",
+ _cb_signal_win_rot_changed,
+ runner);
+ EINA_SAFETY_ON_NULL_GOTO(sh, finish);
+ break;
+
default:
goto finish;
break;
/* [0400 - 0499] tizen-ws-shell */
TC_ADD( 400, "Screensaver: Basic", T_FUNC( 400, scrsaver_basic ), 1);
TC_ADD( 401, "Screensaver Manager: Basic", T_FUNC( 401, scrsaver_mng_basic ), 1);
+
+ TC_ADD( 500, "Rotation: Available Rotation", T_FUNC( 500, rotation_available_rots ), 1);
#undef T_FUNC
}
E_TC_EVENT_TYPE_STACK_LOWER,
E_TC_EVENT_TYPE_STACK_ABOVE,
E_TC_EVENT_TYPE_STACK_BELOW,
+ E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE,
E_TC_EVENT_TYPE_MAX
} E_TC_Event_Type;
Ecore_Window native_win; // native window id
const char *name; // name of client window
int x, y, w, h; // geometry
+ int rot;
E_Layer layer;
Eina_Bool effect;
struct
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_Bool e_test_runner_req_win_info_get(E_Test_Runner *runner, E_TC_Win *tw);
Eina_List *e_test_runner_req_win_info_list_get(E_Test_Runner *runner);
void e_test_runner_req_win_info_list_free(Eina_List *l);
Eina_Bool e_test_runner_req_win_stack_set(E_Test_Runner *runner, E_TC_Win *tw, E_TC_Win *sibling, Eina_Bool above);
Eina_Bool e_test_runner_req_ev_feed_mouse_up(E_Test_Runner *runner, int x, int y);
Eina_Bool e_test_runner_req_ev_feed_key_down(E_Test_Runner *runner, const char *key);
Eina_Bool e_test_runner_req_ev_feed_key_up(E_Test_Runner *runner, const char *key);
+Eina_Bool e_test_runner_req_zone_rotation_change(E_Test_Runner *runner, int angle);
Eina_Bool e_test_runner_ev_wait(E_Test_Runner *runner, E_TC_Event_Type ev);
Eina_Bool tc_0400_scrsaver_basic(E_TC *tc);
Eina_Bool tc_0401_scrsaver_mng_basic(E_TC *tc);
+#include "0500_rotation.h"
+
#endif