2 #include "mockclient.h"
3 #include "mockcompositor.h"
4 #include <libds-tizen/embedded_compositor.h>
5 #include <libds/surface.h>
6 #include <tizen-extension-client-protocol.h>
8 #define TIZEN_EMBEDDED_COMPOSITOR_VERSION 1
10 class MockEmbeddedCompositorCompositor : public MockCompositor
13 MockEmbeddedCompositorCompositor()
14 : MockCompositor(&MockEmbeddedCompositorCompositor::TestSetup, this)
16 ds_inf("%s : this(%p)", __func__, this);
18 // initialize the flags to check
19 bSurfaceDestroyed = false;
24 ~MockEmbeddedCompositorCompositor()
26 ds_inf("%s : this(%p)", __func__, this);
29 static void TestSetup(void *data)
31 MockEmbeddedCompositorCompositor *mockComp =
32 static_cast<MockEmbeddedCompositorCompositor *>(data);
33 Compositor *comp = mockComp->compositor;
35 ds_inf("%s: mockComp(%p)", __func__, mockComp);
37 // new surface listener
38 mockComp->mNewSurfaceListener.notify =
39 MockEmbeddedCompositorCompositor::NewSurfaceCallback;
40 mockComp->mNewSurfaceListener.parent = mockComp;
41 ds_compositor_add_new_surface_listener(comp->compositor,
42 &mockComp->mNewSurfaceListener);
44 mockComp->mEmbeddedCompositor =
45 ds_tizen_embedded_compositor_create(comp->display);
48 mockComp->mDestroyListener.notify =
49 MockEmbeddedCompositorCompositor::DestroyCallback;
50 mockComp->mDestroyListener.parent = mockComp;
51 ds_tizen_embedded_compositor_add_destroy_listener(mockComp->mEmbeddedCompositor,
52 &mockComp->mDestroyListener);
55 static void NewSurfaceCallback(struct wl_listener *listener, void *data)
57 MockEmbeddedCompositorCompositor *mockComp =
58 reinterpret_cast<NewSurfaceListener *>(listener)->parent;
59 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
61 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
63 mockComp->mSurface = surface;
65 // del surface listener
66 mockComp->mDelSurfaceListener.notify =
67 MockEmbeddedCompositorCompositor::DelSurfaceCallback;
68 mockComp->mDelSurfaceListener.parent = mockComp;
69 ds_surface_add_destroy_listener(surface,
70 &mockComp->mDelSurfaceListener);
73 static void DelSurfaceCallback(struct wl_listener *listener, void *data)
75 MockEmbeddedCompositorCompositor *mockComp =
76 reinterpret_cast<DelSurfaceListener *>(listener)->parent;
77 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
79 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
81 if (ds_surface_get_wl_resource(mockComp->mSurface) ==
82 ds_surface_get_wl_resource(surface)) {
83 ds_inf("%s: surface is deleted.", __func__);
84 mockComp->bSurfaceDestroyed = true;
88 static void DestroyCallback(struct wl_listener *listener, void *data)
90 ds_inf("%s", __func__);
92 MockEmbeddedCompositorCompositor *mockComp =
93 reinterpret_cast<DestroyListener *>(listener)->parent;
95 mockComp->bDestroyed = true;
99 bool bSurfaceDestroyed;
103 struct ds_surface *mSurface;
105 struct NewSurfaceListener : ::wl_listener {
106 MockEmbeddedCompositorCompositor *parent;
108 NewSurfaceListener mNewSurfaceListener;
110 struct DelSurfaceListener : ::wl_listener {
111 MockEmbeddedCompositorCompositor *parent;
113 DelSurfaceListener mDelSurfaceListener;
115 struct ds_tizen_embedded_compositor *mEmbeddedCompositor;
117 struct DestroyListener : ::wl_listener {
118 MockEmbeddedCompositorCompositor *parent;
120 DestroyListener mDestroyListener;
123 class MockEmbeddedCompositorClient : public MockClient
126 MockEmbeddedCompositorClient()
127 : bSocketEvent(false),
129 compositor_res(nullptr),
130 tizen_embedded_compositor(nullptr)
132 MockEmbeddedCompositorClient(const struct wl_registry_listener *listener)
133 : MockClient(listener, this)
135 ds_inf("%s", __func__);
137 bSocketEvent = false;
140 ~MockEmbeddedCompositorClient()
142 ds_inf("%s", __func__);
145 void SetWlCompositor(struct wl_compositor *global_res)
147 ds_inf("%s", __func__);
149 compositor_res = global_res;
152 struct wl_compositor *GetWlCompositor()
154 ds_inf("%s", __func__);
156 return compositor_res;
159 void SetTizenEmbeddedCompositor(struct tizen_embedded_compositor *global_res)
161 ds_inf("%s", __func__);
163 tizen_embedded_compositor = global_res;
166 struct tizen_embedded_compositor *GetTizenEmbeddedCompositor()
168 ds_inf("%s", __func__);
170 return tizen_embedded_compositor;
178 struct wl_compositor *compositor_res;
179 struct tizen_embedded_compositor *tizen_embedded_compositor;
183 client_tizen_embedded_compositor_cb_socket(void *data,
184 struct tizen_embedded_compositor *embedded_compositor, int32_t socket_fd)
186 ds_inf("%s", __func__);
188 MockEmbeddedCompositorClient *client = static_cast<MockEmbeddedCompositorClient *>(data);
190 client->bSocketEvent = true;
191 client->socket_fd = socket_fd;
194 static const struct tizen_embedded_compositor_listener embedded_compositor_cb_listener = {
195 .socket = client_tizen_embedded_compositor_cb_socket,
199 client_registry_cb_global(void *data, struct wl_registry *registry,
200 uint32_t name, const char *interface, uint32_t version)
202 ds_inf("%s", __func__);
204 MockEmbeddedCompositorClient *client = static_cast<MockEmbeddedCompositorClient *>(data);
205 struct wl_compositor *compositor_res;
206 struct tizen_embedded_compositor *embedded_compositor_res;
208 if (!strcmp(interface, "wl_compositor")) {
209 compositor_res = (struct wl_compositor *)wl_registry_bind(registry,
210 name, &wl_compositor_interface, 1);
211 if (compositor_res == nullptr) {
212 ds_err("wl_registry_bind() failed. wl_compositor resource.");
215 client->SetWlCompositor(compositor_res);
216 } else if (!strcmp(interface, "tizen_embedded_compositor")) {
217 embedded_compositor_res = (struct tizen_embedded_compositor *)wl_registry_bind(registry,
218 name, &tizen_embedded_compositor_interface, TIZEN_EMBEDDED_COMPOSITOR_VERSION);
219 if (embedded_compositor_res == nullptr) {
220 ds_err("wl_registry_bind() failed. tizen_embedded_compositor resource.");
223 client->SetTizenEmbeddedCompositor(embedded_compositor_res);
225 tizen_embedded_compositor_add_listener(embedded_compositor_res,
226 &embedded_compositor_cb_listener, client);
231 client_registry_cb_global_remove(void *data, struct wl_registry *registry,
234 ds_inf("%s", __func__);
236 MockEmbeddedCompositorClient *client = static_cast<MockEmbeddedCompositorClient *>(data);
237 struct wl_compositor *compositor_res = client->GetWlCompositor();
238 struct tizen_embedded_compositor *embedded_compositor_res = client->GetTizenEmbeddedCompositor();
240 tizen_embedded_compositor_destroy(embedded_compositor_res);
241 wl_compositor_destroy(compositor_res);
244 static const struct wl_registry_listener registry_listener = {
245 .global = client_registry_cb_global,
246 .global_remove = client_registry_cb_global_remove
249 class EmbeddedCompositorTest : public ::testing::Test
252 void SetUp(void) override;
253 void TearDown(void) override;
255 MockEmbeddedCompositorCompositor *comp;
256 MockEmbeddedCompositorClient *client;
257 struct wl_compositor *compositor_res;
258 struct tizen_embedded_compositor *embedded_compositor_res;
259 struct wl_surface *surface_res;
263 EmbeddedCompositorTest::SetUp(void)
265 //ds_log_init(DS_DBG, NULL);
267 ds_inf("%s", __func__);
269 comp = new MockEmbeddedCompositorCompositor();
270 client = new MockEmbeddedCompositorClient(®istry_listener);
271 compositor_res = client->GetWlCompositor();
272 embedded_compositor_res = client->GetTizenEmbeddedCompositor();
273 surface_res = wl_compositor_create_surface(compositor_res);
279 EmbeddedCompositorTest::TearDown(void)
281 ds_inf("%s", __func__);
283 wl_surface_destroy(surface_res);
285 EXPECT_TRUE(comp->bSurfaceDestroyed);
291 TEST_F(EmbeddedCompositorTest, Create_P)
296 TEST_F(EmbeddedCompositorTest, Ev_GetSocket)
298 tizen_embedded_compositor_get_socket(embedded_compositor_res);
302 EXPECT_TRUE(client->bSocketEvent);
303 EXPECT_TRUE(client->socket_fd >= 0)
304 << "get socket_fd : " << client->socket_fd << std::endl;