07d5b97d47fc048253619efe5688ee58d1714fcb
[platform/core/uifw/e-tizen-testcase.git] / src / testcase / 0009_input.cpp
1 #include "e_test_event.h"
2 #include "e_test_base.h"
3 #include <Ecore_Wl2.h>
4
5 class etTestInput : public ::etTCBase
6 {
7 public:
8    etTestInput() { };
9    ~etTestInput() { };
10
11 protected:
12    etWin *tw_shared = NULL;
13    etWin *tw_topposition = NULL;
14    etWin *tw_orexcl = NULL;
15    etWin *tw_excl = NULL;
16 };
17
18 TEST_F(etTestInput, keygrab_nowin_shared)
19 {
20    Eina_Bool ret = EINA_FALSE;
21    ret = ecore_wl2_window_keygrab_set(NULL, "XF86Menu", 0, 0, 0, ECORE_WL2_WINDOW_KEYGRAB_SHARED);
22    ASSERT_TRUE(ret);
23
24    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
25    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
26    ASSERT_TRUE(ret);
27
28    eina_stringshare_del(etRunner::get().ev.key.name);
29    etRunner::get().ev.key.name = NULL;
30
31    ret = ecore_wl2_window_keygrab_unset(NULL, "XF86Menu", 0, 0);
32    ASSERT_TRUE(ret);
33 }
34
35 TEST_F(etTestInput, keygrab_nowin_orexcl)
36 {
37    Eina_Bool ret = EINA_FALSE;
38    ret = ecore_wl2_window_keygrab_set(NULL, "XF86Menu", 0, 0, 0, ECORE_WL2_WINDOW_KEYGRAB_OVERRIDE_EXCLUSIVE);
39    ASSERT_TRUE(ret);
40
41    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
42    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
43    ASSERT_TRUE(ret);
44
45    eina_stringshare_del(etRunner::get().ev.key.name);
46    etRunner::get().ev.key.name = NULL;
47
48    ret = ecore_wl2_window_keygrab_unset(NULL, "XF86Menu", 0, 0);
49    ASSERT_TRUE(ret);
50 }
51
52 TEST_F(etTestInput, keygrab_nowin_excl)
53 {
54    Eina_Bool ret = EINA_FALSE;
55    ret = ecore_wl2_window_keygrab_set(NULL, "XF86Menu", 0, 0, 0, ECORE_WL2_WINDOW_KEYGRAB_EXCLUSIVE);
56    ASSERT_TRUE(ret);
57
58    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
59    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
60    ASSERT_TRUE(ret);
61
62    eina_stringshare_del(etRunner::get().ev.key.name);
63    etRunner::get().ev.key.name = NULL;
64
65    ret = ecore_wl2_window_keygrab_unset(NULL, "XF86Menu", 0, 0);
66    ASSERT_TRUE(ret);
67 }
68
69 TEST_F(etTestInput, keygrab_win_shared)
70 {
71    Eina_Bool ret = EINA_FALSE;
72
73    tw_shared = initNormalWin("TCWin_SharedGrab", EINA_TRUE, EINA_FALSE);
74    ASSERT_TRUE(tw_shared != NULL) << "failed to initiation window";
75
76    ret = elm_win_keygrab_set(tw_shared->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
77    ASSERT_TRUE(ret);
78    ret = evas_object_key_grab(tw_shared->elm_win, "XF86Menu", 0, 0, EINA_FALSE);
79    ASSERT_TRUE(ret);
80
81    etRunner::get().ev.win = tw_shared->elm_win;
82    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
83    ret = etRunner::get().setWinStack(tw_shared, NULL, EINA_FALSE);
84    etRunner::get().waitEvent(E_TC_EVENT_TYPE_FOCUS_CHANGED);
85    ASSERT_TRUE(ret);
86
87    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
88    ASSERT_TRUE(ret);
89
90    eina_stringshare_del(etRunner::get().ev.key.name);
91    etRunner::get().ev.key.name = NULL;
92    etRunner::get().ev.win = NULL;
93
94    evas_object_key_ungrab(tw_shared->elm_win, "XF86Menu", 0, 0);
95    ret = elm_win_keygrab_unset(tw_shared->elm_win, "XF86Menu", 0, 0);
96    ASSERT_TRUE(ret);
97 }
98
99 TEST_F(etTestInput, keygrab_win_orexcl)
100 {
101    Eina_Bool ret = EINA_FALSE;
102
103    tw_orexcl = initNormalWin("TCWin_OrexclGrab", EINA_TRUE, EINA_FALSE);
104    ASSERT_TRUE(tw_orexcl != NULL) << "failed to initiation window";
105
106    ret = elm_win_keygrab_set(tw_orexcl->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_OVERRIDE_EXCLUSIVE);
107    ASSERT_TRUE(ret);
108    ret = evas_object_key_grab(tw_orexcl->elm_win, "XF86Menu", 0, 0, EINA_TRUE);
109    ASSERT_TRUE(ret);
110
111    etRunner::get().ev.win = tw_orexcl->elm_win;
112    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
113    ret = etRunner::get().setWinStack(tw_orexcl, NULL, EINA_FALSE);
114    etRunner::get().waitEvent(E_TC_EVENT_TYPE_FOCUS_CHANGED);
115    ASSERT_TRUE(ret);
116
117    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
118    ASSERT_TRUE(ret);
119
120    eina_stringshare_del(etRunner::get().ev.key.name);
121    etRunner::get().ev.key.name = NULL;
122    etRunner::get().ev.win = NULL;
123
124    evas_object_key_ungrab(tw_orexcl->elm_win, "XF86Menu", 0, 0);
125    ret = elm_win_keygrab_unset(tw_orexcl->elm_win, "XF86Menu", 0, 0);
126    ASSERT_TRUE(ret);
127 }
128
129 TEST_F(etTestInput, keygrab_win_excl)
130 {
131    Eina_Bool ret = EINA_FALSE;
132
133    tw_excl = initNormalWin("TCWin_ExclGrab", EINA_TRUE, EINA_FALSE);
134    ASSERT_TRUE(tw_excl != NULL) << "failed to initiation window";
135
136    ret = elm_win_keygrab_set(tw_excl->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE);
137    ASSERT_TRUE(ret);
138    ret = evas_object_key_grab(tw_excl->elm_win, "XF86Menu", 0, 0, EINA_TRUE);
139    ASSERT_TRUE(ret);
140
141    etRunner::get().ev.win = tw_excl->elm_win;
142    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
143    ret = etRunner::get().setWinStack(tw_excl, NULL, EINA_FALSE);
144    etRunner::get().waitEvent(E_TC_EVENT_TYPE_FOCUS_CHANGED);
145    ASSERT_TRUE(ret);
146
147    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
148    ASSERT_TRUE(ret);
149
150    eina_stringshare_del(etRunner::get().ev.key.name);
151    etRunner::get().ev.key.name = NULL;
152    etRunner::get().ev.win = NULL;
153
154    evas_object_key_ungrab(tw_excl->elm_win, "XF86Menu", 0, 0);
155    ret = elm_win_keygrab_unset(tw_excl->elm_win, "XF86Menu", 0, 0);
156    ASSERT_TRUE(ret);
157 }
158
159 TEST_F(etTestInput, keygrab_win_topposition)
160 {
161    Eina_Bool ret = EINA_FALSE;
162
163    tw_topposition = initNormalWin("TCWin_ToppositionGrab", EINA_TRUE, EINA_TRUE);
164    ASSERT_TRUE(tw_topposition != NULL) << "failed to initiation window";
165
166    ecore_evas_focus_skip_set(ecore_evas_ecore_evas_get(evas_object_evas_get(tw_topposition->elm_win)), EINA_TRUE);
167
168    ret = elm_win_keygrab_set(tw_topposition->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_TOPMOST);
169    ASSERT_TRUE(ret);
170    ret = evas_object_key_grab(tw_topposition->elm_win, "XF86Menu", 0, 0, EINA_FALSE);
171    ASSERT_TRUE(ret);
172
173    etRunner::get().ev.win = tw_topposition->elm_win;
174    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
175
176    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
177    ASSERT_TRUE(ret);
178
179    eina_stringshare_del(etRunner::get().ev.key.name);
180    etRunner::get().ev.key.name = NULL;
181    etRunner::get().ev.win = NULL;
182
183    evas_object_key_ungrab(tw_topposition->elm_win, "XF86Menu", 0, 0);
184    ret = elm_win_keygrab_unset(tw_topposition->elm_win, "XF86Menu", 0, 0);
185    ASSERT_TRUE(ret);
186 }
187
188 TEST_F(etTestInput, keygrab_win)
189 {
190    Eina_Bool ret = EINA_FALSE;
191
192    tw_shared = initNormalWin("TCWin_SharedGrab", EINA_TRUE, EINA_FALSE);
193    ASSERT_TRUE(tw_shared != NULL) << "failed to initiation window";
194
195    tw_orexcl = initNormalWin("TCWin_OrexclGrab", EINA_TRUE, EINA_FALSE);
196    ASSERT_TRUE(tw_orexcl != NULL) << "failed to initiation window";
197
198    tw_excl = initNormalWin("TCWin_ExclGrab", EINA_TRUE, EINA_FALSE);
199    ASSERT_TRUE(tw_excl != NULL) << "failed to initiation window";
200
201    tw_topposition = initNormalWin("TCWin_ToppositionGrab", EINA_TRUE, EINA_TRUE);
202    ASSERT_TRUE(tw_topposition != NULL) << "failed to initiation window";
203
204    ecore_evas_focus_skip_set(ecore_evas_ecore_evas_get(evas_object_evas_get(tw_topposition->elm_win)), EINA_TRUE);
205
206    ret = elm_win_keygrab_set(tw_excl->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_EXCLUSIVE);
207    ASSERT_TRUE(ret);
208    ret = evas_object_key_grab(tw_excl->elm_win, "XF86Menu", 0, 0, EINA_TRUE);
209    ASSERT_TRUE(ret);
210
211    ret = elm_win_keygrab_set(tw_orexcl->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_OVERRIDE_EXCLUSIVE);
212    ASSERT_TRUE(ret);
213    ret = evas_object_key_grab(tw_orexcl->elm_win, "XF86Menu", 0, 0, EINA_TRUE);
214    ASSERT_TRUE(ret);
215
216    ret = elm_win_keygrab_set(tw_topposition->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_TOPMOST);
217    ASSERT_TRUE(ret);
218    ret = evas_object_key_grab(tw_topposition->elm_win, "XF86Menu", 0, 0, EINA_FALSE);
219    ASSERT_TRUE(ret);
220
221    ret = elm_win_keygrab_set(tw_shared->elm_win, "XF86Menu", 0, 0, 0, ELM_WIN_KEYGRAB_SHARED);
222    ASSERT_TRUE(ret);
223    ret = evas_object_key_grab(tw_shared->elm_win, "XF86Menu", 0, 0, EINA_FALSE);
224    ASSERT_TRUE(ret);
225
226    ret = etRunner::get().setWinStack(tw_excl, NULL, EINA_FALSE);
227    etRunner::get().waitEvent(E_TC_EVENT_TYPE_FOCUS_CHANGED);
228    ASSERT_TRUE(ret);
229
230    ret = etRunner::get().setWinStack(tw_orexcl, NULL, EINA_FALSE);
231    etRunner::get().waitEvent(E_TC_EVENT_TYPE_FOCUS_CHANGED);
232    ASSERT_TRUE(ret);
233
234    ret = etRunner::get().setWinStack(tw_shared, NULL, EINA_FALSE);
235    etRunner::get().waitEvent(E_TC_EVENT_TYPE_FOCUS_CHANGED);
236    ASSERT_TRUE(ret);
237
238    // test exclusive grab
239    etRunner::get().ev.win = tw_excl->elm_win;
240    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
241
242    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
243    ASSERT_TRUE(ret);
244
245    eina_stringshare_del(etRunner::get().ev.key.name);
246
247    evas_object_key_ungrab(tw_excl->elm_win, "XF86Menu", 0, 0);
248    ret = elm_win_keygrab_unset(tw_excl->elm_win, "XF86Menu", 0, 0);
249    ASSERT_TRUE(ret);
250
251    // test override exclusive grab
252    etRunner::get().ev.win = tw_orexcl->elm_win;
253    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
254
255    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
256    ASSERT_TRUE(ret);
257
258    eina_stringshare_del(etRunner::get().ev.key.name);
259
260    evas_object_key_ungrab(tw_orexcl->elm_win, "XF86Menu", 0, 0);
261    ret = elm_win_keygrab_unset(tw_orexcl->elm_win, "XF86Menu", 0, 0);
262    ASSERT_TRUE(ret);
263
264    // test top position grab
265    etRunner::get().ev.win = tw_topposition->elm_win;
266    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
267
268    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
269    ASSERT_TRUE(ret);
270
271    eina_stringshare_del(etRunner::get().ev.key.name);
272
273    evas_object_key_ungrab(tw_topposition->elm_win, "XF86Menu", 0, 0);
274    ret = elm_win_keygrab_unset(tw_topposition->elm_win, "XF86Menu", 0, 0);
275    ASSERT_TRUE(ret);
276
277    // test shared grab
278    etRunner::get().ev.win = tw_shared->elm_win;
279    etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
280
281    ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
282    ASSERT_TRUE(ret);
283
284    eina_stringshare_del(etRunner::get().ev.key.name);
285
286    evas_object_key_ungrab(tw_shared->elm_win, "XF86Menu", 0, 0);
287    ret = elm_win_keygrab_unset(tw_shared->elm_win, "XF86Menu", 0, 0);
288    ASSERT_TRUE(ret);
289    
290    etRunner::get().ev.key.name = NULL;
291    etRunner::get().ev.win = NULL;
292 }