2 #include "mockclient.h"
3 #include "mockcompositor.h"
4 #include <libds-tizen/display_policy.h>
5 #include <tizen-extension-client-protocol.h>
7 #define TIZEN_DISPLAY_POLICY_VERSION 1
9 class MockDisplayPolicyCompositor : public MockCompositor
12 MockDisplayPolicyCompositor()
13 : MockCompositor(&MockDisplayPolicyCompositor::TestSetup, this)
15 ds_inf("%s : this(%p)", __func__, this);
17 // initialize the flags to check
18 bSurfaceDestroyed = false;
21 bSetBrightness = false;
22 mBrightnessValue = -1;
23 bDestroyDisplayPolicyInfo = false;
26 ~MockDisplayPolicyCompositor()
28 ds_inf("%s : this(%p)", __func__, this);
31 static void TestSetup(void *data)
33 MockDisplayPolicyCompositor *mockComp =
34 static_cast<MockDisplayPolicyCompositor *>(data);
35 Compositor *comp = mockComp->compositor;
37 ds_inf("%s: mockComp(%p)", __func__, mockComp);
39 // new surface listener
40 mockComp->mNewSurfaceListener.notify =
41 MockDisplayPolicyCompositor::NewSurfaceCallback;
42 mockComp->mNewSurfaceListener.parent = mockComp;
43 ds_compositor_add_new_surface_listener(comp->compositor,
44 &mockComp->mNewSurfaceListener);
46 mockComp->mDisplayPolicy =
47 ds_tizen_display_policy_create(comp->display);
50 mockComp->mDestroyListener.notify =
51 MockDisplayPolicyCompositor::DestroyCallback;
52 mockComp->mDestroyListener.parent = mockComp;
53 ds_tizen_display_policy_add_destroy_listener(mockComp->mDisplayPolicy,
54 &mockComp->mDestroyListener);
56 // set_display_policy listener
57 mockComp->mSetDisplayPolicyListener.notify =
58 MockDisplayPolicyCompositor::SetBrightnessCallback;
59 mockComp->mSetDisplayPolicyListener.parent = mockComp;
60 ds_tizen_display_policy_add_set_brightness_info_listener(
61 mockComp->mDisplayPolicy,
62 &mockComp->mSetDisplayPolicyListener);
65 static void NewSurfaceCallback(struct wl_listener *listener, void *data)
67 MockDisplayPolicyCompositor *mockComp =
68 reinterpret_cast<NewSurfaceListener *>(listener)->parent;
69 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
71 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
73 mockComp->mSurface = surface;
75 // del surface listener
76 mockComp->mDelSurfaceListener.notify =
77 MockDisplayPolicyCompositor::DelSurfaceCallback;
78 mockComp->mDelSurfaceListener.parent = mockComp;
79 ds_surface_add_destroy_listener(surface,
80 &mockComp->mDelSurfaceListener);
83 static void DelSurfaceCallback(struct wl_listener *listener, void *data)
85 MockDisplayPolicyCompositor *mockComp =
86 reinterpret_cast<DelSurfaceListener *>(listener)->parent;
87 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
89 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
91 if (ds_surface_get_wl_resource(mockComp->mSurface) ==
92 ds_surface_get_wl_resource(surface)) {
93 ds_inf("%s: surface is deleted.", __func__);
94 mockComp->bSurfaceDestroyed = true;
98 static void DestroyCallback(struct wl_listener *listener, void *data)
100 ds_inf("%s", __func__);
102 MockDisplayPolicyCompositor *mockComp =
103 reinterpret_cast<DestroyListener *>(listener)->parent;
105 mockComp->bDestroyed = true;
108 static void SetBrightnessCallback(struct wl_listener *listener,
111 ds_inf("%s", __func__);
113 MockDisplayPolicyCompositor *mockComp =
114 reinterpret_cast<SetDisplayPolicyListener *>(listener)->parent;
115 struct ds_tizen_display_policy_info *info =
116 static_cast<struct ds_tizen_display_policy_info *>(data);
118 ds_inf("%s: mockComp(%p), info(%p)", __func__, mockComp, info);
120 mockComp->bSetBrightness = true;
122 mockComp->mInfo = info;
124 ds_tizen_display_policy_info_get_surface(mockComp->mInfo);
125 mockComp->mBrightnessValue =
126 ds_tizen_display_policy_info_get_brightness_value(mockComp->mInfo);
128 // info destroy listener
129 mockComp->mDisplayPolicyInfoDestroyListener.notify =
130 MockDisplayPolicyCompositor::DisplayPolicyInfoDestroyCallback;
131 mockComp->mDisplayPolicyInfoDestroyListener.parent = mockComp;
132 ds_tizen_display_policy_info_add_destroy_listener(mockComp->mInfo,
133 &mockComp->mDisplayPolicyInfoDestroyListener);
136 static void DisplayPolicyInfoDestroyCallback(struct wl_listener *listener,
139 ds_inf("%s", __func__);
141 MockDisplayPolicyCompositor *mockComp =
142 reinterpret_cast<DisplayPolicyInfoDestroyListener *>(listener)->parent;
143 struct ds_tizen_display_policy_info *info =
144 static_cast<struct ds_tizen_display_policy_info *>(data);
146 ds_inf("%s: mockComp(%p), info(%p)", __func__, mockComp, info);
148 if (mockComp->mInfo == info) {
149 ds_inf("%s: info is deleted.", __func__);
150 mockComp->bDestroyDisplayPolicyInfo = true;
154 void SendDisplayPolicyDone(int32_t error_state)
156 ds_inf("%s", __func__);
158 ds_tizen_display_policy_info_send_brightness_done(
159 mInfo, DS_TIZEN_DISPLAY_POLICY_ERROR_STATE_PERMISSION_DENIED);
163 bool bSurfaceDestroyed;
166 int32_t mBrightnessValue;
167 bool bDestroyDisplayPolicyInfo;
170 struct ds_tizen_display_policy_info *mInfo;
171 struct ds_surface *mSurface;
172 struct NewSurfaceListener : ::wl_listener {
173 MockDisplayPolicyCompositor *parent;
175 NewSurfaceListener mNewSurfaceListener;
176 struct DelSurfaceListener : ::wl_listener {
177 MockDisplayPolicyCompositor *parent;
179 DelSurfaceListener mDelSurfaceListener;
181 struct ds_tizen_display_policy *mDisplayPolicy;
182 struct DestroyListener : ::wl_listener {
183 MockDisplayPolicyCompositor *parent;
185 DestroyListener mDestroyListener;
186 struct SetDisplayPolicyListener : ::wl_listener {
187 MockDisplayPolicyCompositor *parent;
189 SetDisplayPolicyListener mSetDisplayPolicyListener;
190 struct DisplayPolicyInfoDestroyListener : ::wl_listener {
191 MockDisplayPolicyCompositor *parent;
193 DisplayPolicyInfoDestroyListener mDisplayPolicyInfoDestroyListener;
196 class MockDisplayPolicyClient : public MockClient
199 MockDisplayPolicyClient()
200 : bBrightnessDoneEvent(false),
201 mBrightnessValue(-1),
203 compositor_res(nullptr),
204 tizen_display_policy(nullptr)
206 MockDisplayPolicyClient(const struct wl_registry_listener *listener)
207 : MockClient(listener, this)
209 ds_inf("%s", __func__);
211 bBrightnessDoneEvent = false;
212 mBrightnessValue = -1;
215 ~MockDisplayPolicyClient()
217 ds_inf("%s", __func__);
220 void SetWlCompositor(struct wl_compositor *global_res)
222 ds_inf("%s", __func__);
224 compositor_res = global_res;
227 struct wl_compositor *GetWlCompositor()
229 ds_inf("%s", __func__);
231 return compositor_res;
234 void SetTizenDisplayPolicy(struct tizen_display_policy *global_res)
236 ds_inf("%s", __func__);
238 tizen_display_policy = global_res;
241 struct tizen_display_policy *GetTizenDisplayPolicy()
243 ds_inf("%s", __func__);
245 return tizen_display_policy;
249 bool bBrightnessDoneEvent;
250 int32_t mBrightnessValue;
251 uint32_t mErrorState;
254 struct wl_compositor *compositor_res;
255 struct tizen_display_policy *tizen_display_policy;
259 client_tizen_display_policy_cb_window_brightness_done(void *data,
260 struct tizen_display_policy *display_policy, struct wl_surface *surface,
261 int32_t brightness_value, uint32_t error_state)
263 ds_inf("%s", __func__);
265 MockDisplayPolicyClient *client = static_cast<MockDisplayPolicyClient *>(data);
267 client->bBrightnessDoneEvent = true;
268 client->mBrightnessValue = brightness_value;
269 client->mErrorState = error_state;
272 static const struct tizen_display_policy_listener display_policy_cb_listener = {
273 .window_brightness_done = client_tizen_display_policy_cb_window_brightness_done,
277 client_registry_cb_global(void *data, struct wl_registry *registry,
278 uint32_t name, const char *interface, uint32_t version)
280 ds_inf("%s", __func__);
282 MockDisplayPolicyClient *client = static_cast<MockDisplayPolicyClient *>(data);
283 struct wl_compositor *compositor_res;
284 struct tizen_display_policy *tizen_display_policy;
286 if (!strcmp(interface, "wl_compositor")) {
287 compositor_res = (struct wl_compositor *)wl_registry_bind(registry,
288 name, &wl_compositor_interface, 1);
289 if (compositor_res == nullptr) {
290 ds_err("wl_registry_bind() failed. wl_compositor resource.");
293 client->SetWlCompositor(compositor_res);
294 } else if (!strcmp(interface, "tizen_display_policy")) {
295 tizen_display_policy = (struct tizen_display_policy *)wl_registry_bind(registry,
296 name, &tizen_display_policy_interface, TIZEN_DISPLAY_POLICY_VERSION);
297 if (tizen_display_policy == nullptr) {
298 ds_err("wl_registry_bind() failed. tizen_display_policy resource.");
301 client->SetTizenDisplayPolicy(tizen_display_policy);
303 tizen_display_policy_add_listener(tizen_display_policy,
304 &display_policy_cb_listener, client);
309 client_registry_cb_global_remove(void *data, struct wl_registry *registry,
312 ds_inf("%s", __func__);
314 MockDisplayPolicyClient *client = static_cast<MockDisplayPolicyClient *>(data);
315 struct wl_compositor *compositor_res = client->GetWlCompositor();
316 struct tizen_display_policy *display_policy_res = client->GetTizenDisplayPolicy();
318 tizen_display_policy_destroy(display_policy_res);
319 wl_compositor_destroy(compositor_res);
322 static const struct wl_registry_listener registry_listener = {
323 .global = client_registry_cb_global,
324 .global_remove = client_registry_cb_global_remove
327 class DisplayPolicyTest : public ::testing::Test
330 void SetUp(void) override;
331 void TearDown(void) override;
333 MockDisplayPolicyCompositor *comp;
334 MockDisplayPolicyClient *client;
335 struct wl_compositor *compositor_res;
336 struct tizen_display_policy *display_policy_res;
337 struct wl_surface *surface_res;
341 DisplayPolicyTest::SetUp(void)
343 //ds_log_init(DS_DBG, NULL);
345 ds_inf("%s", __func__);
347 comp = new MockDisplayPolicyCompositor();
348 client = new MockDisplayPolicyClient(®istry_listener);
349 compositor_res = client->GetWlCompositor();
350 display_policy_res = client->GetTizenDisplayPolicy();
351 surface_res = wl_compositor_create_surface(compositor_res);
357 DisplayPolicyTest::TearDown(void)
359 ds_inf("%s", __func__);
361 wl_surface_destroy(surface_res);
363 EXPECT_TRUE(comp->bSurfaceDestroyed);
369 TEST_F(DisplayPolicyTest, Create_P)
374 TEST_F(DisplayPolicyTest, Req_TizenDisplayPolicySetDisplayPolicy)
376 tizen_display_policy_set_window_brightness(display_policy_res, surface_res, 10);
378 EXPECT_TRUE(comp->bSetBrightness);
379 EXPECT_TRUE(comp->mBrightnessValue == 10);
382 TEST_F(DisplayPolicyTest, Ev_TizenDisplayPolicyWindowDisplayPolicyDone)
384 tizen_display_policy_set_window_brightness(display_policy_res, surface_res, 10);
386 EXPECT_TRUE(comp->bSetBrightness);
387 EXPECT_TRUE(comp->mBrightnessValue == 10);
389 comp->SendDisplayPolicyDone(DS_TIZEN_DISPLAY_POLICY_ERROR_STATE_PERMISSION_DENIED);
393 EXPECT_TRUE(client->bBrightnessDoneEvent);
394 EXPECT_TRUE(client->mBrightnessValue == 10);
395 EXPECT_TRUE(client->mErrorState ==
396 DS_TIZEN_DISPLAY_POLICY_ERROR_STATE_PERMISSION_DENIED);