2 #include "mockclient.h"
3 #include "mockcompositor.h"
4 #include <libds-tizen/input_method.h>
5 #include <input-method-server-protocol.h>
6 #include <input-method-client-protocol.h>
8 #define INPUT_METHOD_VERSION 1
10 class MockInputMethodCompositor : public MockCompositor
13 MockInputMethodCompositor()
14 : MockCompositor(&MockInputMethodCompositor::TestSetup, this)
16 ds_inf("%s : this(%p)", __func__, this);
18 // initialize the flags to check
20 bNewInputMethodContext = false;
23 ~MockInputMethodCompositor()
25 ds_inf("%s : this(%p)", __func__, this);
28 static void TestSetup(void *data)
30 MockInputMethodCompositor *mockComp =
31 static_cast<MockInputMethodCompositor *>(data);
32 Compositor *comp = mockComp->compositor;
34 ds_inf("%s: mockComp(%p)", __func__, mockComp);
36 mockComp->mInputMethod = ds_tizen_input_method_create(comp->display);
39 mockComp->mDestroyListener.notify =
40 MockInputMethodCompositor::DestroyCallback;
41 mockComp->mDestroyListener.parent = mockComp;
42 ds_tizen_input_method_add_destroy_listener(mockComp->mInputMethod,
43 &mockComp->mDestroyListener);
46 static void DestroyCallback(struct wl_listener *listener, void *data)
48 ds_inf("%s", __func__);
50 MockInputMethodCompositor *mockComp =
51 reinterpret_cast<DestroyListener *>(listener)->parent;
53 mockComp->bDestroyed = true;
56 void CreateInputMethodContext()
58 ds_inf("%s", __func__);
60 mInputMethodContext = ds_tizen_input_method_create_context(mInputMethod);
61 if (mInputMethodContext)
62 bNewInputMethodContext = true;
67 ds_inf("%s", __func__);
69 ds_tizen_input_method_send_activate(mInputMethod, mInputMethodContext);
74 ds_inf("%s", __func__);
76 ds_tizen_input_method_send_deactivate(mInputMethod, mInputMethodContext);
81 bool bNewInputMethodContext;
84 struct ds_tizen_input_method_manager *mInputMethodMgr;
85 struct ds_tizen_input_method *mInputMethod;
86 struct ds_tizen_input_method_context *mInputMethodContext;
88 struct DestroyListener: ::wl_listener {
89 MockInputMethodCompositor *parent;
91 DestroyListener mDestroyListener;
94 class MockInputMethodClient : public MockClient
97 MockInputMethodClient()
100 compositor_res(nullptr),
101 zwp_input_method(nullptr)
104 MockInputMethodClient(const struct wl_registry_listener *listener)
105 : MockClient(listener, this)
107 ds_inf("%s", __func__);
110 ~MockInputMethodClient()
112 ds_inf("%s", __func__);
115 void SetWlCompositor(struct wl_compositor *global_res)
117 ds_inf("%s", __func__);
119 compositor_res = global_res;
122 struct wl_compositor *GetWlCompositor()
124 ds_inf("%s", __func__);
126 return compositor_res;
129 void SetInputMethod(struct zwp_input_method_v1 *global_res)
131 ds_inf("%s", __func__);
132 zwp_input_method = global_res;
135 struct zwp_input_method_v1 *GetInputMethod()
137 ds_inf("%s", __func__);
139 return zwp_input_method;
147 struct wl_compositor *compositor_res;
148 struct zwp_input_method_v1 *zwp_input_method;
152 client_registry_cb_global(void *data, struct wl_registry *registry,
153 uint32_t name, const char *interface, uint32_t version)
155 ds_inf("%s", __func__);
157 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
158 struct wl_compositor *compositor_res;
159 struct zwp_input_method_v1 *zwp_input_method;
161 if (!strcmp(interface, "wl_compositor")) {
162 compositor_res = (struct wl_compositor *)wl_registry_bind(registry,
163 name, &wl_compositor_interface, 1);
164 if (compositor_res == nullptr) {
165 ds_err("wl_registry_bind() failed. wl_compositor resource.");
168 client->SetWlCompositor(compositor_res);
169 } else if (!strcmp(interface, "zwp_input_method_v1")) {
170 zwp_input_method = (struct zwp_input_method_v1 *)wl_registry_bind(registry,
171 name, &zwp_input_method_v1_interface, INPUT_METHOD_VERSION);
172 if (zwp_input_method == nullptr) {
173 ds_err("wl_registry_bind() failed. zwp_input_method_v1 resource.");
176 client->SetInputMethod(zwp_input_method);
181 client_registry_cb_global_remove(void *data, struct wl_registry *registry,
184 ds_inf("%s", __func__);
186 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
187 struct wl_compositor *compositor_res = client->GetWlCompositor();
188 struct zwp_input_method_v1 *input_method_res = client->GetInputMethod();
190 zwp_input_method_v1_destroy(input_method_res);
191 wl_compositor_destroy(compositor_res);
194 static const struct wl_registry_listener registry_listener = {
195 .global = client_registry_cb_global,
196 .global_remove = client_registry_cb_global_remove
200 im_cb_activate (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
202 ds_inf("%s", __func__);
204 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
205 client->bActivate = true;
208 im_cb_deactivate (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
210 ds_inf("%s", __func__);
212 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
213 client->bDeactivate = true;
216 im_cb_destroy (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
219 im_cb_show_input_panel (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx, uint32_t angle)
222 im_cb_hide_input_panel (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
225 im_cb_open_connection (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
228 im_cb_close_connection (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
231 im_cb_set_text_input_id (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx, uint32_t text_input_id)
233 static const struct zwp_input_method_v1_listener input_method_cb_listener = {
234 .activate = im_cb_activate,
235 .deactivate = im_cb_deactivate,
237 .destroy = im_cb_destroy,
238 .show_input_panel = im_cb_show_input_panel,
239 .hide_input_panel = im_cb_hide_input_panel,
240 .open_connection = im_cb_open_connection,
241 .close_connection = im_cb_close_connection,
242 .set_text_input_id = im_cb_set_text_input_id,
245 class InputMethodTest : public ::testing::Test
248 void SetUp(void) override;
249 void TearDown(void) override;
251 MockInputMethodCompositor *comp;
252 MockInputMethodClient *client;
253 struct wl_compositor *compositor_res;
254 struct zwp_input_method_v1 *input_method_res;
258 InputMethodTest::SetUp(void)
260 ds_log_init(DS_INF, NULL);
262 ds_inf("%s", __func__);
264 comp = new MockInputMethodCompositor();
265 client = new MockInputMethodClient(®istry_listener);
266 compositor_res = client->GetWlCompositor();
267 input_method_res = client->GetInputMethod();
269 zwp_input_method_v1_add_listener(input_method_res,
270 &input_method_cb_listener, client);
276 InputMethodTest::TearDown(void)
278 ds_inf("%s", __func__);
286 TEST_F(InputMethodTest, Create_P)
291 TEST_F(InputMethodTest, CreateInputMethodContext)
293 comp->CreateInputMethodContext();
296 EXPECT_TRUE(comp->bNewInputMethodContext);
299 TEST_F(InputMethodTest, Ev_Activate)
301 comp->CreateInputMethodContext();
304 comp->SendActivate();
308 EXPECT_TRUE(client->bActivate);
311 TEST_F(InputMethodTest, Ev_Deactivate)
313 comp->CreateInputMethodContext();
316 comp->SendDeactivate();
320 EXPECT_TRUE(client->bDeactivate);