Rename to etTestTzshScreenSaver from et_TestTzsh
[platform/core/uifw/e-tizen-testcase.git] / src / testcase / 0006_tzsh_screensaver.cpp
1 #include "e_test_event.h"
2 #include "e_test_base.h"
3
4 #include <tzsh_screensaver_manager_service.h>
5 #include <tzsh_screensaver_service.h>
6
7 #define E_TEST_WORK_TIME 3.0
8
9 class etTestTzshScreenSaver : public ::etTCBase
10 {
11  public:
12     Eina_Bool  chk_timeout_val_ = EINA_FALSE;
13     Eina_Bool  chk_ev_state_idle_timeout_ = EINA_FALSE;
14     Eina_Bool  chk_ev_state_not_idle_ = EINA_FALSE;
15     int        chk_cb_called_ = 0;
16
17     tzsh_h tzsh = NULL;
18     tzsh_window tz_win = 0x0;
19     tzsh_screensaver_service_h tz_scrsaver = NULL;
20     tzsh_screensaver_manager_service_h tz_scrsaver_mng = NULL;
21
22     etTestTzshScreenSaver()
23       {
24          chk_timeout_val_ = EINA_FALSE;
25          chk_ev_state_idle_timeout_ = EINA_FALSE;
26          chk_ev_state_not_idle_ = EINA_FALSE;
27          chk_cb_called_ = 0;
28       };
29
30     ~etTestTzshScreenSaver()
31       {
32          if (tz_scrsaver_mng) tzsh_screensaver_manager_service_destroy(tz_scrsaver_mng);
33          if (tz_scrsaver) tzsh_screensaver_service_destroy(tz_scrsaver);
34          if (tzsh) tzsh_destroy(tzsh);
35       };
36
37  protected:
38     etWin     *tw_base = NULL;
39     std::string testCaseName;
40     std::string testName;
41
42     void initTC();
43 };
44
45 void
46 etTestTzshScreenSaver::initTC()
47 {
48    const ::testing::TestInfo *const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
49
50    tw_base = initNormalWin("TCWin_Normal_base", EINA_FALSE);
51    ASSERT_TRUE(tw_base != NULL) << "failed to initiation window";
52
53    testCaseName = test_info->test_case_name();
54    testName = test_info->name();
55 }
56
57 /******************
58   callbacks
59  *******************/
60 static void
61 _cb_state_change(void *data,
62                  tzsh_screensaver_manager_service_h service,
63                  int states)
64 {
65    etTestTzshScreenSaver *tc_data = (etTestTzshScreenSaver *)data;
66    unsigned int time;
67
68    tc_data->chk_cb_called_++;
69
70    if (states & TZSH_SCREENSAVER_MANAGER_SERVICE_STATE_IDLE_TIMEOUT_EXPIRED)
71      {
72         EINA_SAFETY_ON_FALSE_RETURN(tc_data->chk_cb_called_ == 1);
73
74         etRunner::get().addTimer();
75
76         tc_data->chk_ev_state_idle_timeout_ = EINA_TRUE;
77
78         etRunner::get().thawEvent();
79         etRunner::get().feedMouseDown(1, 1);
80         etRunner::get().feedMouseUp(1, 1);
81         etRunner::get().freezeEvent();
82      }
83    else if (states & TZSH_SCREENSAVER_MANAGER_SERVICE_STATE_NOT_IDLE)
84      {
85         EINA_SAFETY_ON_FALSE_RETURN(tc_data->chk_cb_called_ == 2);
86
87         etRunner::get().delTimer();
88
89         tc_data->chk_ev_state_not_idle_ = EINA_TRUE;
90
91         tzsh_screensaver_manager_service_idle_timeout_get(service, &time);
92         EINA_SAFETY_ON_FALSE_RETURN(time == 1000);
93
94         tc_data->chk_timeout_val_ = EINA_TRUE;
95
96         etRunner::get().finishWork();
97      }
98    else
99      {
100         EINA_SAFETY_ON_FALSE_RETURN(EINA_FALSE);
101      }
102 }
103
104 /* Name:
105  *   etTestTzshScreenSaver.scrsaver_basic
106  * Description:
107  *   Check screensaver type window that is shown on the notification layer.
108  * Steps:
109  *   01. Create an elm basic window
110  *   02. Set elm window to be screensaver type using tzsh
111  *   03. Show window
112  *   04. Check window stack
113  * Expected results:
114  *   A window is shown on the notification layer.
115  */
116 TEST_F(etTestTzshScreenSaver, scrsaver_basic)
117 {
118    Eina_List *list = NULL, *l = NULL;
119    etWin *tw = NULL;
120
121    initTC();
122
123    tzsh = tzsh_create(TZSH_TOOLKIT_TYPE_EFL);
124    ASSERT_TRUE(tzsh != NULL);
125
126    tz_win = elm_win_window_id_get(tw_base->elm_win);
127    ASSERT_NE(0, tz_win);
128
129    tz_scrsaver = tzsh_screensaver_service_create(tzsh, tz_win);
130    ASSERT_TRUE(tz_scrsaver != NULL);
131
132    showTCWin(tw_base);
133    ASSERT_VIS_ON(tw_base);
134
135    list = etRunner::get().getWinInfoList();
136    ASSERT_TRUE(list != NULL);
137
138    EINA_LIST_CAST_FOREACH(list, l, tw, etWin*)
139      {
140         if (tw->native_win != tw_base->native_win)
141           continue;
142
143         // check layer
144         ASSERT_EQ(E_LAYER_CLIENT_ALERT, tw->layer);
145
146         // check visibility
147         ASSERT_TRUE(tw->Vis.win);
148         ASSERT_TRUE(tw->Vis.obj);
149         ASSERT_EQ(E_VISIBILITY_UNOBSCURED, tw->Vis.type);
150
151         // check focus
152         ASSERT_TRUE(tw->Focus.obj);
153         ASSERT_TRUE(tw->Focus.win);
154
155         break;
156      }
157
158    etRunner::get().freeWinInfoList(list);
159
160    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
161 }
162
163 /* Name:
164  * etTestTzshScreenSaver.Screensaver_manager_basic
165  * Description:
166  *   Check screensaver manager APIs and 'state changed' callback
167  * Steps:
168  *   01. Create an elm basic window that won't be shown
169  *   02. Set elm window to be screensaver manager using tzsh
170  *   03. Set idle timeout to 1.0 seconds
171  *   04. Set screensaver feature enabled
172  *   05. Check TZSH_SCREENSAVER_MANAGER_SERVICE_STATE_IDLE_TIMEOUT_EXPIRED event
173  *   06. Request to feed fake key event
174  *   07. Check TZSH_SCREENSAVER_MANAGER_SERVICE_STATE_NOT_IDLE event
175  * Expected results:
176  *   TZSH_SCREENSAVER_MANAGER_SERVICE_STATE_IDLE_TIMEOUT_EXPIRED event occurs.
177  *   TZSH_SCREENSAVER_MANAGER_SERVICE_STATE_NOT_IDLE event occurs.
178  */
179 TEST_F(etTestTzshScreenSaver, scrsaver_mng_basic)
180 {
181    Eina_Bool res = EINA_FALSE;
182
183    initTC();
184
185    tzsh = tzsh_create(TZSH_TOOLKIT_TYPE_EFL);
186    ASSERT_TRUE(tzsh != NULL);
187
188    tz_win = elm_win_window_id_get(tw_base->elm_win);
189    ASSERT_NE(0, tz_win);
190
191    tz_scrsaver_mng = tzsh_screensaver_manager_service_create(tzsh, tz_win);
192    ASSERT_TRUE(tz_scrsaver_mng != NULL);
193
194    res = tzsh_screensaver_manager_service_idle_timeout_set(tz_scrsaver_mng, 1000);
195    ASSERT_EQ(TZSH_ERROR_NONE, res);
196
197    res = tzsh_screensaver_manager_service_enable(tz_scrsaver_mng);
198    ASSERT_EQ(TZSH_ERROR_NONE, res);
199
200    res = tzsh_screensaver_manager_service_state_change_cb_set(tz_scrsaver_mng,
201                                                               _cb_state_change,
202                                                               this);
203    ASSERT_EQ(TZSH_ERROR_NONE, res);
204
205    etRunner::get().freezeEvent();
206    etRunner::get().work(1.1);
207    etRunner::get().thawEvent();
208
209    ASSERT_TRUE(chk_ev_state_idle_timeout_);
210    ASSERT_TRUE(chk_ev_state_not_idle_);
211    ASSERT_TRUE(chk_timeout_val_);
212    ASSERT_EQ(2, chk_cb_called_);
213
214    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
215 }