0011_effect: TC is added 42/191642/1 submit/tizen/20181030.101450
authorJuyeon Lee <juyeonne.lee@samsung.com>
Fri, 19 Oct 2018 11:53:47 +0000 (20:53 +0900)
committerJuyeon Lee <juyeonne.lee@samsung.com>
Fri, 19 Oct 2018 11:53:47 +0000 (20:53 +0900)
Change-Id: I90c775fd33b54c5df66fdb4315ece2471d110814

src/Makefile.am
src/e_test_event.cpp
src/e_test_event.h
src/e_test_util.h
src/testcase/0001_easy.cpp
src/testcase/0011_effect.cpp [new file with mode: 0644]

index 11d93bf..e21ec92 100644 (file)
@@ -19,7 +19,8 @@ testcase/0006_tzsh.cpp \
 testcase/0007_rotation.cpp \
 testcase/0008_focus.cpp \
 testcase/0009_input.cpp \
-testcase/0010_splash.cpp
+testcase/0010_splash.cpp \
+testcase/0011_effect.cpp
 
 e_test_runner_SOURCES = \
 e_test_main.cpp \
@@ -39,7 +40,8 @@ testcase/0006_tzsh.cpp \
 testcase/0007_rotation.cpp \
 testcase/0008_focus.cpp \
 testcase/0009_input.cpp \
-testcase/0010_splash.cpp
+testcase/0010_splash.cpp \
+testcase/0011_effect.cpp
 
 MAINTAINERCLEANFILES = \
 Makefile.in
index 8aaa8d7..87729b7 100644 (file)
@@ -25,12 +25,14 @@ static void _cb_method_win_info_get(void *data, const Eldbus_Message *msg, Eldbu
 static void _cb_method_win_info_list_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
 static void _cb_method_window_register(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
 static void _cb_method_zone_rotation_change(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
+static void _cb_method_window_effect(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
 
 /* callbacks - signal */
 static void _cb_signal_vis_changed(void *data, const Eldbus_Message *msg);
 static void _cb_signal_stack_changed(void *data, const Eldbus_Message *msg);
 static void _cb_signal_win_rot_changed(void *data, const Eldbus_Message *msg);
 static void _cb_signal_focus_changed(void *data, const Eldbus_Message *msg);
+static void _cb_signal_effect_run(void *data, const Eldbus_Message *msg);
 
 /* callbacks - ecore */
 static Eina_Bool _cb_ecore_key(void *data, int type, void *event);
@@ -753,9 +755,9 @@ etRunner::setSplashLaunch(const char *path, int type)
 
    wl_array_init(&options2);
    tizen_launch_splash_launch(tzlaunch_splash, path, type,
-          24, 0, 0,
-          effect_type, NULL, &options2);
-    wl_array_release(&options2);
+                              24, 0, 0,
+                              effect_type, NULL, &options2);
+   wl_array_release(&options2);
 
    return EINA_TRUE;
 }
@@ -772,6 +774,35 @@ etRunner::setSplashOwner()
 }
 
 Eina_Bool
+etRunner::setWindowEffectType(etWin *tw, E_TC_Window_Effect_type type)
+{
+   Eldbus_Pending *p = NULL;
+   Eina_Bool accepted = EINA_FALSE;
+
+   this->ev.effect.type = type;
+   this->ev.win = tw->elm_win;
+
+   p = eldbus_proxy_call(dbus.proxy,
+                         "SetWindowEffect",
+                         _cb_method_window_effect,
+                         &accepted,
+                         -1,
+                         "ui",
+                         tw->native_win,
+                         type);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
+
+   this->ev.sh = eldbus_proxy_signal_handler_add(dbus.proxy,
+                                                 "EffectRun",
+                                                 _cb_signal_effect_run,
+                                                 this);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(this->ev.sh, EINA_FALSE);
+   work();
+
+   return accepted;
+}
+
+Eina_Bool
 etRunner::freezeEvent()
 {
    Eldbus_Pending *p = NULL;
@@ -868,6 +899,10 @@ etRunner::waitEvent(E_TC_Event_Type ev_type)
          this->generateKeyEvent(this->ev.key.name, 1.0);
          break;
 
+      case E_TC_EVENT_TYPE_EFFECT:
+         EINA_SAFETY_ON_NULL_GOTO(this->ev.sh, finish);
+         break;
+
       case E_TC_EVENT_TYPE_EFFECT_EVAS_CB:
          this->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
          evas_object_smart_callback_add(this->ev.win, effect_started, _cb_evas_smart_cb_effect_started, this);
@@ -896,6 +931,8 @@ etRunner::waitEvent(E_TC_Event_Type ev_type)
      }
 
    if (sh) eldbus_signal_handler_del(sh);
+   if (this->ev.sh) eldbus_signal_handler_del(this->ev.sh);
+
    if (eh) ecore_event_handler_del(eh);
    if (eh2) ecore_event_handler_del(eh2);
 
@@ -1250,6 +1287,33 @@ finish:
    etRunner::get().finishWork();
 }
 
+static void
+_cb_method_window_effect(void *data,
+                                const Eldbus_Message *msg,
+                                Eldbus_Pending *p)
+{
+   const char *name = NULL, *text = NULL;
+   Eina_Bool res = EINA_FALSE;
+   Eina_Bool *allowed = (Eina_Bool *)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);
+     }
+
+   etRunner::get().finishWork();
+}
+
 /* callbacks - signal */
 static void
 _cb_signal_vis_changed(void *data,
@@ -1360,6 +1424,34 @@ finish:
      }
 }
 
+static void
+_cb_signal_effect_run(void *data,
+                      const Eldbus_Message *msg)
+{
+   etRunner *runner = (etRunner *)data;
+   const char *name = NULL, *text = NULL;
+   Eina_Bool res = EINA_FALSE;
+   unsigned int effect_type = 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, "ui", &id, &effect_type);
+   EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+
+   if (effect_type == runner->ev.effect.type)
+     {
+        runner->ev.response = runner->ev.request;
+        elm_exit();
+     }
+finish:
+   if ((name) || (text))
+     {
+        ERR("errname:%s errmsg:%s\n", name, text);
+     }
+}
+
 /* callbacks - timer */
 static Eina_Bool
 _cb_work_timeout(void *data)
index c3c8e57..789b7c1 100644 (file)
@@ -65,6 +65,7 @@ public: /* TODO: make it hidden */
         E_TC_Event_Type request;
         E_TC_Event_Type response;
         Evas_Object *win;
+        Eldbus_Signal_Handler *sh;
         struct
           {
              Eina_Stringshare *name;
@@ -74,6 +75,7 @@ public: /* TODO: make it hidden */
         struct
           {
              unsigned int state_smcb;
+             unsigned int type;
           } effect;
      } ev;
 
@@ -123,6 +125,7 @@ public:
    void          generateKeyEvent(const char *keyname, double delay);
    Eina_Bool     setSplashLaunch(const char *path, int type);
    Eina_Bool     setSplashOwner();
+   Eina_Bool     setWindowEffectType(etWin *tw, E_TC_Window_Effect_type type);
    Eina_Bool     freezeEvent();
    Eina_Bool     thawEvent();
    Eina_Bool     waitEvent(E_TC_Event_Type ev);
index e2afeff..b412ff3 100644 (file)
@@ -78,6 +78,7 @@ typedef enum _E_TC_Event_Type
    E_TC_EVENT_TYPE_INPUT_ECORE_KEY,
    E_TC_EVENT_TYPE_INPUT_EVAS_KEY,
    E_TC_EVENT_TYPE_EFFECT_EVAS_CB,
+   E_TC_EVENT_TYPE_EFFECT,
    E_TC_EVENT_TYPE_MAX
 } E_TC_Event_Type;
 
@@ -149,6 +150,17 @@ typedef enum _E_TC_EVAS_SMART_CB_STATE
    E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE      // Server -> Client [PID:xxx] tizen_effect@19.end(wl_surface@41, 4)
 } E_TC_EFFECT_STATE;
 
+typedef enum _E_TC_Window_Effect_type
+{
+   E_TC_EFFECT_NONE = 0,
+   E_TC_EFFECT_SHOW,
+   E_TC_EFFECT_HIDE,
+   E_TC_EFFECT_RESTACK_SHOW,
+   E_TC_EFFECT_RESTACK_HIDE,
+   E_TC_EFFECT_LAUNCH_DONE,
+   E_TC_EFFECT_BG,
+} E_TC_Window_Effect_type;
+
 typedef struct _Window_Info_List
 {
    Eina_List *list;
index 253dbde..16dcc0f 100644 (file)
@@ -45,10 +45,12 @@ _cb_introspect(void *data,
        (!strstr(arg, "method name=\"HWC\""                    )) ||
        (!strstr(arg, "method name=\"GetCurrentZoneRotation\"" )) ||
        (!strstr(arg, "method name=\"ChangeZoneRotation\""     )) ||
+       (!strstr(arg, "method name=\"SetWindowEffect\""     )) ||
        (!strstr(arg, "signal name=\"VisibilityChanged\""      )) ||
        (!strstr(arg, "signal name=\"StackChanged\""           )) ||
        (!strstr(arg, "signal name=\"WinRotationChanged\""     )) ||
        (!strstr(arg, "signal name=\"FocusChanged\""           )) ||
+       (!strstr(arg, "signal name=\"EffectRun\""           )) ||
        (!strstr(arg, "property name=\"Registrant\""           )))
      {
         ERR("missing mehod, signal or property:%s\n", arg);
diff --git a/src/testcase/0011_effect.cpp b/src/testcase/0011_effect.cpp
new file mode 100644 (file)
index 0000000..315336b
--- /dev/null
@@ -0,0 +1,53 @@
+#include "e_test_event.h"
+#include "e_test_base.h"
+
+class etTestEffect : public ::etTCBase
+{
+ public:
+    etTestEffect() { };
+    ~etTestEffect() { };
+
+ protected:
+    etWin *tw = NULL;
+
+};
+
+TEST_F(etTestEffect, effect_show)
+{
+   Eina_Bool res = EINA_FALSE;
+   tw = initNormalWin("TCWin_Effect_Show", EINA_FALSE, EINA_FALSE);
+   ASSERT_TRUE(tw != NULL) << "failed to initiation window";
+
+   res = etRunner::get().setWindowEffectType(tw, E_TC_EFFECT_SHOW);
+   ASSERT_TRUE(res);
+
+   tw->updateGeometry();
+   tw->show();
+
+   res = etRunner::get().waitEvent(E_TC_EVENT_TYPE_EFFECT);
+   ASSERT_TRUE(res);
+
+   return;
+}
+
+TEST_F(etTestEffect, effect_hide)
+{
+   Eina_Bool res = EINA_FALSE;
+   tw = initNormalWin("TCWin_Effect_Hide", EINA_FALSE, EINA_FALSE);
+   ASSERT_TRUE(tw != NULL) << "failed to initiation window";
+
+   tw->updateGeometry();
+   tw->show();
+   etRunner::get().work(1.1);
+
+   res = etRunner::get().setWindowEffectType(tw, E_TC_EFFECT_HIDE);
+   ASSERT_TRUE(res);
+   etRunner::get().work(1.1);
+
+   tw->hide();
+
+   res = etRunner::get().waitEvent(E_TC_EVENT_TYPE_EFFECT);
+   ASSERT_TRUE(res);
+
+   return;
+}