--- /dev/null
+#include <Ecore_Wl2.h>
+
+#include "e_test_event.h"
+#include "e_test_base.h"
+#include "e_test_efl_util.h"
+
+class etTestInputSync : public ::etTCBase
+{
+public:
+ etTestInputSync()
+ {
+ key_name = eina_stringshare_add("XF86Menu");
+ etRunner::get().ev.key.name = eina_stringshare_add("XF86Menu");
+ const ::testing::TestInfo *const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
+ testCaseName = test_info->test_case_name();
+ testName = test_info->name();
+ };
+ ~etTestInputSync()
+ {
+ eina_stringshare_del(key_name);
+ eina_stringshare_del(etRunner::get().ev.key.name);
+ key_name = NULL;
+ };
+
+protected:
+ std::string testCaseName;
+ std::string testName;
+
+ Eina_Stringshare *key_name = NULL;
+};
+
+TEST_F(etTestInputSync, keygrab_nowin_shared)
+{
+ Eina_Bool ret = EINA_FALSE;
+ ret = ecore_wl2_window_keygrab_set(NULL, "XF86Menu", 0, 0, 0, ECORE_WL2_WINDOW_KEYGRAB_SHARED);
+ ASSERT_TRUE(ret);
+
+ InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, true);
+ inputgen_h->generateKeyEvent(key_name, 0.3);
+ ev_result = etRunner::get().waitEvent(NULL, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
+ ASSERT_NE(ev_result, nullptr);
+
+ ret = ecore_wl2_window_keygrab_unset(NULL, "XF86Menu", 0, 0);
+ ASSERT_TRUE(ret);
+
+ ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestInputSync, keygrab_nowin_orexcl)
+{
+ Eina_Bool ret = EINA_FALSE;
+
+ ret = ecore_wl2_window_keygrab_set(NULL, "XF86Menu", 0, 0, 0, ECORE_WL2_WINDOW_KEYGRAB_OVERRIDE_EXCLUSIVE);
+ ASSERT_TRUE(ret);
+
+ InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, true);
+ inputgen_h->generateKeyEvent(key_name, 0.3);
+ ev_result = etRunner::get().waitEvent(NULL, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
+ ASSERT_NE(ev_result, nullptr);
+
+ ret = ecore_wl2_window_keygrab_unset(NULL, "XF86Menu", 0, 0);
+ ASSERT_TRUE(ret);
+
+ ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestInputSync, keygrab_nowin_excl)
+{
+ Eina_Bool ret = EINA_FALSE;
+
+ ret = ecore_wl2_window_keygrab_set(NULL, "XF86Menu", 0, 0, 0, ECORE_WL2_WINDOW_KEYGRAB_EXCLUSIVE);
+ ASSERT_TRUE(ret);
+
+ InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, true);
+ inputgen_h->generateKeyEvent(key_name, 0.3);
+ ev_result = etRunner::get().waitEvent(NULL, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
+ ASSERT_NE(ev_result, nullptr);
+
+ ret = ecore_wl2_window_keygrab_unset(NULL, "XF86Menu", 0, 0);
+ ASSERT_TRUE(ret);
+
+ ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}