2 #include "mockclient.h"
3 #include "mockcompositor.h"
4 #include <libds-tizen/clipboard.h>
5 #include <tizen-extension-client-protocol.h>
7 #define TIZEN_CLIPBOARD_VERSION 2
9 class MockClipboardCompositor : public MockCompositor
12 MockClipboardCompositor()
13 : MockCompositor(&MockClipboardCompositor::TestSetup, this)
15 ds_inf("%s : this(%p)", __func__, this);
17 // initialize the flags to check
18 bSurfaceDestroyed = false;
28 ~MockClipboardCompositor()
30 ds_inf("%s : this(%p)", __func__, this);
33 static void TestSetup(void *data)
35 MockClipboardCompositor *mockComp =
36 static_cast<MockClipboardCompositor *>(data);
37 Compositor *comp = mockComp->compositor;
39 ds_inf("%s: mockComp(%p)", __func__, mockComp);
41 // new surface listener
42 mockComp->mNewSurfaceListener.notify =
43 MockClipboardCompositor::NewSurfaceCallback;
44 mockComp->mNewSurfaceListener.parent = mockComp;
45 ds_compositor_add_new_surface_listener(comp->compositor,
46 &mockComp->mNewSurfaceListener);
48 mockComp->mClipboard = ds_tizen_clipboard_create(comp->display);
51 mockComp->mDestroyListener.notify =
52 MockClipboardCompositor::DestroyCallback;
53 mockComp->mDestroyListener.parent = mockComp;
54 ds_tizen_clipboard_add_destroy_listener(mockComp->mClipboard,
55 &mockComp->mDestroyListener);
58 mockComp->mShowListener.notify =
59 MockClipboardCompositor::ShowCallback;
60 mockComp->mShowListener.parent = mockComp;
61 ds_tizen_clipboard_add_show_listener(mockComp->mClipboard,
62 &mockComp->mShowListener);
65 mockComp->mHideListener.notify =
66 MockClipboardCompositor::HideCallback;
67 mockComp->mHideListener.parent = mockComp;
68 ds_tizen_clipboard_add_hide_listener(
70 &mockComp->mHideListener);
72 // set_data_only listener
73 mockComp->mSetDataOnlyListener.notify =
74 MockClipboardCompositor::SetDataOnlyCallback;
75 mockComp->mSetDataOnlyListener.parent = mockComp;
76 ds_tizen_clipboard_add_set_data_only_listener(
78 &mockComp->mSetDataOnlyListener);
81 static void NewSurfaceCallback(struct wl_listener *listener, void *data)
83 MockClipboardCompositor *mockComp =
84 reinterpret_cast<NewSurfaceListener *>(listener)->parent;
85 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
87 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
89 mockComp->mSurface = surface;
91 // del surface listener
92 mockComp->mDelSurfaceListener.notify =
93 MockClipboardCompositor::DelSurfaceCallback;
94 mockComp->mDelSurfaceListener.parent = mockComp;
95 ds_surface_add_destroy_listener(surface,
96 &mockComp->mDelSurfaceListener);
99 static void DelSurfaceCallback(struct wl_listener *listener, void *data)
101 MockClipboardCompositor *mockComp =
102 reinterpret_cast<DelSurfaceListener *>(listener)->parent;
103 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
105 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
107 if (ds_surface_get_wl_resource(mockComp->mSurface) ==
108 ds_surface_get_wl_resource(surface)) {
109 ds_inf("%s: surface is deleted.", __func__);
110 mockComp->bSurfaceDestroyed = true;
114 static void DestroyCallback(struct wl_listener *listener, void *data)
116 ds_inf("%s", __func__);
118 MockClipboardCompositor *mockComp =
119 reinterpret_cast<DestroyListener *>(listener)->parent;
121 mockComp->bDestroyed = true;
124 static void ShowCallback(struct wl_listener *listener, void *data)
126 ds_inf("%s", __func__);
128 MockClipboardCompositor *mockComp =
129 reinterpret_cast<ShowListener *>(listener)->parent;
130 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
132 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
134 mockComp->bShow = true;
137 static void HideCallback(struct wl_listener *listener,
140 ds_inf("%s", __func__);
142 MockClipboardCompositor *mockComp =
143 reinterpret_cast<SetDataOnlyListener *>(listener)->parent;
144 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
146 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
148 mockComp->bHide = true;
151 static void SetDataOnlyCallback(struct wl_listener *listener,
154 ds_inf("%s", __func__);
156 MockClipboardCompositor *mockComp =
157 reinterpret_cast<HideListener *>(listener)->parent;
158 struct ds_tizen_clipboard_client *client =
159 static_cast<struct ds_tizen_clipboard_client *>(data);
161 ds_inf("%s: mockComp(%p), client(%p)", __func__, mockComp, client);
163 mockComp->mSetDataOnly =
164 ds_tizen_clipboard_client_get_data_only(client);
166 ds_tizen_clipboard_client_send_allowed_data_only(client,
170 void SendDataSelected()
172 ds_inf("%s", __func__);
174 ds_tizen_clipboard_send_data_selected(mClipboard, mSurface);
177 void SetAllowedDataOnly(uint32_t allowed)
179 ds_inf("%s", __func__);
185 bool bSurfaceDestroyed;
189 uint32_t mSetDataOnly;
194 struct ds_surface *mSurface;
195 struct NewSurfaceListener : ::wl_listener {
196 MockClipboardCompositor *parent;
198 NewSurfaceListener mNewSurfaceListener;
199 struct DelSurfaceListener : ::wl_listener {
200 MockClipboardCompositor *parent;
202 DelSurfaceListener mDelSurfaceListener;
204 struct ds_tizen_clipboard *mClipboard;
205 struct DestroyListener : ::wl_listener {
206 MockClipboardCompositor *parent;
208 DestroyListener mDestroyListener;
209 struct ShowListener : ::wl_listener {
210 MockClipboardCompositor *parent;
212 ShowListener mShowListener;
213 struct HideListener : ::wl_listener {
214 MockClipboardCompositor *parent;
216 HideListener mHideListener;
217 struct SetDataOnlyListener : ::wl_listener {
218 MockClipboardCompositor *parent;
220 SetDataOnlyListener mSetDataOnlyListener;
223 class MockClipboardClient : public MockClient
226 MockClipboardClient()
227 : bDataSelectedEvent(false),
229 compositor_res(nullptr),
230 tizen_clipboard(nullptr)
232 MockClipboardClient(const struct wl_registry_listener *listener)
233 : MockClient(listener, this)
235 ds_inf("%s", __func__);
237 bDataSelectedEvent = false;
238 mAllowedDataOnly = 0;
240 ~MockClipboardClient()
242 ds_inf("%s", __func__);
245 void SetWlCompositor(struct wl_compositor *global_res)
247 ds_inf("%s", __func__);
249 compositor_res = global_res;
252 struct wl_compositor *GetWlCompositor()
254 ds_inf("%s", __func__);
256 return compositor_res;
259 void SetTizenClipboard(struct tizen_clipboard *global_res)
261 ds_inf("%s", __func__);
263 tizen_clipboard = global_res;
266 struct tizen_clipboard *GetTizenClipboard()
268 ds_inf("%s", __func__);
270 return tizen_clipboard;
274 bool bDataSelectedEvent;
275 uint32_t mAllowedDataOnly;
278 struct wl_compositor *compositor_res;
279 struct tizen_clipboard *tizen_clipboard;
283 client_tizen_clipboard_cb_data_selected(void *data,
284 struct tizen_clipboard *clipboard, struct wl_surface *surface)
286 ds_inf("%s", __func__);
288 MockClipboardClient *client = static_cast<MockClipboardClient *>(data);
290 client->bDataSelectedEvent = true;
294 client_tizen_clipboard_cb_allowed_data_only(void *data,
295 struct tizen_clipboard *clipboard, uint32_t allowed)
297 ds_inf("%s", __func__);
299 MockClipboardClient *client = static_cast<MockClipboardClient *>(data);
301 client->mAllowedDataOnly = allowed;
304 static const struct tizen_clipboard_listener clipboard_cb_listener = {
305 .data_selected = client_tizen_clipboard_cb_data_selected,
306 .allowed_data_only = client_tizen_clipboard_cb_allowed_data_only
310 client_registry_cb_global(void *data, struct wl_registry *registry,
311 uint32_t name, const char *interface, uint32_t version)
313 ds_inf("%s", __func__);
315 MockClipboardClient *client = static_cast<MockClipboardClient *>(data);
316 struct wl_compositor *compositor_res;
317 struct tizen_clipboard *tizen_clipboard;
319 if (!strcmp(interface, "wl_compositor")) {
320 compositor_res = (struct wl_compositor *)wl_registry_bind(registry,
321 name, &wl_compositor_interface, 1);
322 if (compositor_res == nullptr) {
323 ds_err("wl_registry_bind() failed. wl_compositor resource.");
326 client->SetWlCompositor(compositor_res);
327 } else if (!strcmp(interface, "tizen_clipboard")) {
328 tizen_clipboard = (struct tizen_clipboard *)wl_registry_bind(registry,
329 name, &tizen_clipboard_interface, TIZEN_CLIPBOARD_VERSION);
330 if (tizen_clipboard == nullptr) {
331 ds_err("wl_registry_bind() failed. tizen_clipboard resource.");
334 client->SetTizenClipboard(tizen_clipboard);
336 tizen_clipboard_add_listener(tizen_clipboard, &clipboard_cb_listener,
342 client_registry_cb_global_remove(void *data, struct wl_registry *registry,
345 ds_inf("%s", __func__);
347 MockClipboardClient *client = static_cast<MockClipboardClient *>(data);
348 struct wl_compositor *compositor_res = client->GetWlCompositor();
349 struct tizen_clipboard *clipboard_res = client->GetTizenClipboard();
351 tizen_clipboard_destroy(clipboard_res);
352 wl_compositor_destroy(compositor_res);
355 static const struct wl_registry_listener registry_listener = {
356 .global = client_registry_cb_global,
357 .global_remove = client_registry_cb_global_remove
360 class ClipboardTest : public ::testing::Test
363 void SetUp(void) override;
364 void TearDown(void) override;
366 MockClipboardCompositor *comp;
367 MockClipboardClient *client;
368 struct wl_compositor *compositor_res;
369 struct tizen_clipboard *clipboard_res;
370 struct wl_surface *surface_res;
374 ClipboardTest::SetUp(void)
376 //ds_log_init(DS_DBG, NULL);
378 ds_inf("%s", __func__);
380 comp = new MockClipboardCompositor();
381 client = new MockClipboardClient(®istry_listener);
382 compositor_res = client->GetWlCompositor();
383 clipboard_res = client->GetTizenClipboard();
384 surface_res = wl_compositor_create_surface(compositor_res);
390 ClipboardTest::TearDown(void)
392 ds_inf("%s", __func__);
394 wl_surface_destroy(surface_res);
396 EXPECT_TRUE(comp->bSurfaceDestroyed);
402 TEST_F(ClipboardTest, Create_P)
407 TEST_F(ClipboardTest, Req_TizenClipboardShow)
409 tizen_clipboard_show(clipboard_res, surface_res);
411 EXPECT_TRUE(comp->bShow);
412 EXPECT_FALSE(comp->bHide);
415 TEST_F(ClipboardTest, Req_TizenClipboardHide)
417 tizen_clipboard_hide(clipboard_res, surface_res);
419 EXPECT_FALSE(comp->bShow);
420 EXPECT_TRUE(comp->bHide);
423 TEST_F(ClipboardTest, Req_TizenClipboardSetDataOnly)
425 tizen_clipboard_set_data_only(clipboard_res, 1);
427 EXPECT_TRUE(comp->mSetDataOnly == 1);
430 TEST_F(ClipboardTest, Ev_TizenClipboardDataSelected)
432 tizen_clipboard_show(clipboard_res, surface_res);
434 EXPECT_TRUE(comp->bShow);
436 comp->SendDataSelected();
440 EXPECT_TRUE(client->bDataSelectedEvent);
443 TEST_F(ClipboardTest, Ev_TizenClipboardAllowedDataOnly)
445 // set the value of allowed to be 1 at compositor
446 comp->SetAllowedDataOnly(1);
448 // send a client's request
449 tizen_clipboard_set_data_only(clipboard_res, 1);
451 EXPECT_TRUE(comp->mSetDataOnly);
456 EXPECT_TRUE(client->mAllowedDataOnly == 1);