2 #include "mockclient.h"
3 #include "mockcompositor.h"
4 #include <libds-tizen/input_method.h>
5 #include <input-method-client-protocol.h>
7 #define INPUT_METHOD_VERSION 1
9 class MockInputMethodCompositor : public MockCompositor
12 MockInputMethodCompositor()
13 : MockCompositor(&MockInputMethodCompositor::TestSetup, this)
15 ds_inf("%s : this(%p)", __func__, this);
17 // initialize the flags to check
19 bNewInputMethodContext = false;
22 ~MockInputMethodCompositor()
24 ds_inf("%s : this(%p)", __func__, this);
27 static void TestSetup(void *data)
29 MockInputMethodCompositor *mockComp =
30 static_cast<MockInputMethodCompositor *>(data);
31 Compositor *comp = mockComp->compositor;
33 ds_inf("%s: mockComp(%p)", __func__, mockComp);
35 mockComp->mInputMethod = ds_tizen_input_method_create(comp->display);
38 mockComp->mDestroyListener.notify =
39 MockInputMethodCompositor::DestroyCallback;
40 mockComp->mDestroyListener.parent = mockComp;
41 ds_tizen_input_method_add_destroy_listener(mockComp->mInputMethod,
42 &mockComp->mDestroyListener);
45 static void DestroyCallback(struct wl_listener *listener, void *data)
47 ds_inf("%s", __func__);
49 MockInputMethodCompositor *mockComp =
50 reinterpret_cast<DestroyListener *>(listener)->parent;
52 mockComp->bDestroyed = true;
55 void CreateInputMethodContext()
57 ds_inf("%s", __func__);
59 mInputMethodContext = ds_tizen_input_method_create_context(mInputMethod);
60 if (mInputMethodContext)
61 bNewInputMethodContext = true;
66 ds_inf("%s", __func__);
68 ds_tizen_input_method_send_activate(mInputMethod, mInputMethodContext);
73 ds_inf("%s", __func__);
75 ds_tizen_input_method_send_deactivate(mInputMethod, mInputMethodContext);
80 bool bNewInputMethodContext;
83 struct ds_tizen_input_method_manager *mInputMethodMgr;
84 struct ds_tizen_input_method *mInputMethod;
85 struct ds_tizen_input_method_context *mInputMethodContext;
87 struct DestroyListener: ::wl_listener {
88 MockInputMethodCompositor *parent;
90 DestroyListener mDestroyListener;
93 class MockInputMethodClient : public MockClient
96 MockInputMethodClient()
99 compositor_res(nullptr),
100 zwp_input_method(nullptr)
103 MockInputMethodClient(const struct wl_registry_listener *listener)
104 : MockClient(listener, this)
106 ds_inf("%s", __func__);
109 ~MockInputMethodClient()
111 ds_inf("%s", __func__);
114 void SetWlCompositor(struct wl_compositor *global_res)
116 ds_inf("%s", __func__);
118 compositor_res = global_res;
121 struct wl_compositor *GetWlCompositor()
123 ds_inf("%s", __func__);
125 return compositor_res;
128 void SetInputMethod(struct zwp_input_method_v1 *global_res)
130 ds_inf("%s", __func__);
131 zwp_input_method = global_res;
134 struct zwp_input_method_v1 *GetInputMethod()
136 ds_inf("%s", __func__);
138 return zwp_input_method;
146 struct wl_compositor *compositor_res;
147 struct zwp_input_method_v1 *zwp_input_method;
151 client_registry_cb_global(void *data, struct wl_registry *registry,
152 uint32_t name, const char *interface, uint32_t version)
154 ds_inf("%s", __func__);
156 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
157 struct wl_compositor *compositor_res;
158 struct zwp_input_method_v1 *zwp_input_method;
160 if (!strcmp(interface, "wl_compositor")) {
161 compositor_res = (struct wl_compositor *)wl_registry_bind(registry,
162 name, &wl_compositor_interface, 1);
163 if (compositor_res == nullptr) {
164 ds_err("wl_registry_bind() failed. wl_compositor resource.");
167 client->SetWlCompositor(compositor_res);
168 } else if (!strcmp(interface, "zwp_input_method_v1")) {
169 zwp_input_method = (struct zwp_input_method_v1 *)wl_registry_bind(registry,
170 name, &zwp_input_method_v1_interface, INPUT_METHOD_VERSION);
171 if (zwp_input_method == nullptr) {
172 ds_err("wl_registry_bind() failed. zwp_input_method_v1 resource.");
175 client->SetInputMethod(zwp_input_method);
180 client_registry_cb_global_remove(void *data, struct wl_registry *registry,
183 ds_inf("%s", __func__);
185 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
186 struct wl_compositor *compositor_res = client->GetWlCompositor();
187 struct zwp_input_method_v1 *input_method_res = client->GetInputMethod();
189 zwp_input_method_v1_destroy(input_method_res);
190 wl_compositor_destroy(compositor_res);
193 static const struct wl_registry_listener registry_listener = {
194 .global = client_registry_cb_global,
195 .global_remove = client_registry_cb_global_remove
199 im_cb_activate (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
201 ds_inf("%s", __func__);
203 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
204 client->bActivate = true;
207 im_cb_deactivate (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
209 ds_inf("%s", __func__);
211 MockInputMethodClient *client = static_cast<MockInputMethodClient *>(data);
212 client->bDeactivate = true;
215 im_cb_destroy (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
218 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)
221 im_cb_hide_input_panel (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
224 im_cb_open_connection (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
227 im_cb_close_connection (void *data, struct zwp_input_method_v1 *input_method, struct zwp_input_method_context_v1 *im_ctx)
230 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)
232 static const struct zwp_input_method_v1_listener input_method_cb_listener = {
233 .activate = im_cb_activate,
234 .deactivate = im_cb_deactivate,
236 .destroy = im_cb_destroy,
237 .show_input_panel = im_cb_show_input_panel,
238 .hide_input_panel = im_cb_hide_input_panel,
239 .open_connection = im_cb_open_connection,
240 .close_connection = im_cb_close_connection,
241 .set_text_input_id = im_cb_set_text_input_id,
244 class InputMethodTest : public ::testing::Test
247 void SetUp(void) override;
248 void TearDown(void) override;
250 MockInputMethodCompositor *comp;
251 MockInputMethodClient *client;
252 struct wl_compositor *compositor_res;
253 struct zwp_input_method_v1 *input_method_res;
257 InputMethodTest::SetUp(void)
259 ds_log_init(DS_INF, NULL);
261 ds_inf("%s", __func__);
263 comp = new MockInputMethodCompositor();
264 client = new MockInputMethodClient(®istry_listener);
265 compositor_res = client->GetWlCompositor();
266 input_method_res = client->GetInputMethod();
268 zwp_input_method_v1_add_listener(input_method_res,
269 &input_method_cb_listener, client);
275 InputMethodTest::TearDown(void)
277 ds_inf("%s", __func__);
285 TEST_F(InputMethodTest, Create_P)
290 TEST_F(InputMethodTest, CreateInputMethodContext)
292 comp->CreateInputMethodContext();
295 EXPECT_TRUE(comp->bNewInputMethodContext);
298 TEST_F(InputMethodTest, Ev_Activate)
300 comp->CreateInputMethodContext();
303 comp->SendActivate();
307 EXPECT_TRUE(client->bActivate);
310 TEST_F(InputMethodTest, Ev_Deactivate)
312 comp->CreateInputMethodContext();
315 comp->SendDeactivate();
319 EXPECT_TRUE(client->bDeactivate);