1 /**************************************************************************
3 * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
5 * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
6 * Contact: Andrii Sokolenko <a.sokolenko@samsung.com>
7 * Contact: Roman Marchenko <r.marchenko@samsung.com>
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the
11 * "Software"), to deal in the Software without restriction, including
12 * without limitation the rights to use, copy, modify, merge, publish,
13 * distribute, sub license, and/or sell copies of the Software, and to
14 * permit persons to whom the Software is furnished to do so, subject to
15 * the following conditions:
17 * The above copyright notice and this permission notice (including the
18 * next paragraph) shall be included in all copies or substantial portions
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
24 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 **************************************************************************/
35 TDMDisplay::TDMDisplay()
40 has_capture_cap = false;
43 void TDMDisplay::SetUp(void)
46 int count = TDM_UT_INVALID_VALUE;
47 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
51 dpy = tdm_display_init(&ret);
52 ASSERT_EQ(ret, TDM_ERROR_NONE);
55 bufmgr = tbm_bufmgr_init(-1);
56 ASSERT_NE(bufmgr, NULL);
58 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
61 ASSERT_EQ(tdm_display_get_capabilities(dpy, &capabilities), TDM_ERROR_NONE);
62 has_pp_cap = capabilities & TDM_DISPLAY_CAPABILITY_PP;
63 has_capture_cap = capabilities & TDM_DISPLAY_CAPABILITY_CAPTURE;
66 void TDMDisplay::TearDown(void)
68 tbm_bufmgr_deinit(bufmgr);
69 tdm_display_deinit(dpy);
71 ASSERT_EQ(tbm_bufmgr_debug_get_ref_count(), 0);
77 tc_tdm_display_handle_events(tdm_display *dpy)
84 ret = tdm_display_get_fd(dpy, &fd);
85 TDM_UT_RETURN_VAL_IF_FAIL(fd >= 0, ret);
92 result = poll(&fds, 1, 3000);
93 } while (result == -1 && errno == EINTR);
96 TDM_UT_ERR("polling tdm_fd timeout.");
97 return TDM_ERROR_TIMEOUT;
100 return tdm_display_handle_events(dpy);
104 tc_tdm_display_has_pp_capability(tdm_display *dpy)
106 tdm_display_capability capabilities = (tdm_display_capability)0;
107 TDM_UT_RETURN_FALSE_IF_FAIL(tdm_display_get_capabilities(dpy, &capabilities) == TDM_ERROR_NONE);
108 return capabilities & TDM_DISPLAY_CAPABILITY_PP;
112 tc_tdm_display_has_capture_capability(tdm_display *dpy)
114 tdm_display_capability capabilities = (tdm_display_capability)0;
115 TDM_UT_RETURN_FALSE_IF_FAIL(tdm_display_get_capabilities(dpy, &capabilities) == TDM_ERROR_NONE);
116 return capabilities & TDM_DISPLAY_CAPABILITY_CAPTURE;
119 TEST_P(TDMDisplay, DisplayUpdate)
121 ASSERT_EQ(tdm_display_update(dpy), TDM_ERROR_NONE);
124 TEST_P(TDMDisplay, DisplayUpdateNullObject)
126 ASSERT_EQ(tdm_display_update(NULL), TDM_ERROR_INVALID_PARAMETER);
129 TEST_P(TDMDisplay, DisplayGetFDSuccesful)
131 int fd = TDM_UT_INVALID_VALUE;
132 ASSERT_EQ(tdm_display_get_fd(dpy, &fd), TDM_ERROR_NONE);
133 ASSERT_NE(fd, TDM_UT_INVALID_VALUE);
136 TEST_P(TDMDisplay, DisplayGetFDNullObject)
138 int fd = TDM_UT_INVALID_VALUE;
139 ASSERT_EQ(tdm_display_get_fd(NULL, &fd), TDM_ERROR_INVALID_PARAMETER);
140 ASSERT_EQ(fd, TDM_UT_INVALID_VALUE);
143 TEST_P(TDMDisplay, DisplayGetFDNullFD)
145 ASSERT_EQ(tdm_display_get_fd(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
149 TEST_P(TDMDisplay, DISABLED_DisplayHandleEvents)
151 /* TODO Generate events*/
152 ASSERT_EQ(tc_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
155 TEST_P(TDMDisplay, DisplayFlush)
157 tdm_display_flush(dpy);
160 TEST_P(TDMDisplay, DisplayFlushNullObject)
162 tdm_display_flush(NULL);
165 TEST_P(TDMDisplay, DisplayGetBackendInfo)
167 const char *name = (const char*)TDM_UT_INVALID_VALUE;
168 const char *vendor = (const char*)TDM_UT_INVALID_VALUE;
169 int major = TDM_UT_INVALID_VALUE, minor = TDM_UT_INVALID_VALUE;
171 ASSERT_EQ(tdm_display_get_backend_info(dpy, &name, &vendor, &major, &minor), TDM_ERROR_NONE);
172 ASSERT_NE(name, (const char*)TDM_UT_INVALID_VALUE);
173 ASSERT_NE(vendor, (const char*)TDM_UT_INVALID_VALUE);
174 ASSERT_NE(major, TDM_UT_INVALID_VALUE);
175 ASSERT_NE(minor, TDM_UT_INVALID_VALUE);
178 TEST_P(TDMDisplay, DisplayGetBackendInfoNullObject)
180 const char *name = (const char*)TDM_UT_INVALID_VALUE;
181 const char *vendor = (const char*)TDM_UT_INVALID_VALUE;
182 int major = TDM_UT_INVALID_VALUE, minor = TDM_UT_INVALID_VALUE;
184 ASSERT_EQ(tdm_display_get_backend_info(NULL, &name, &vendor, &major, &minor), TDM_ERROR_INVALID_PARAMETER);
185 ASSERT_EQ(name, (const char*)TDM_UT_INVALID_VALUE);
186 ASSERT_EQ(vendor, (const char*)TDM_UT_INVALID_VALUE);
187 ASSERT_EQ(major, TDM_UT_INVALID_VALUE);
188 ASSERT_EQ(minor, TDM_UT_INVALID_VALUE);
191 TEST_P(TDMDisplay, DisplayGetBackendInfoNullOther)
193 ASSERT_EQ(tdm_display_get_backend_info(dpy, NULL, NULL, NULL, NULL), TDM_ERROR_NONE);
196 TEST_P(TDMDisplay, DisplayGetCapabilities)
198 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
199 ASSERT_EQ(tdm_display_get_capabilities(dpy, &capabilities), TDM_ERROR_NONE);
200 ASSERT_NE(capabilities, TDM_UT_INVALID_VALUE);
203 TEST_P(TDMDisplay, DisplayGetCapabilitiesNullObject)
205 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
206 ASSERT_EQ(tdm_display_get_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
207 ASSERT_EQ(capabilities, (tdm_display_capability)TDM_UT_INVALID_VALUE);
210 TEST_P(TDMDisplay, DisplayGetCapabilitiesNullOther)
212 ASSERT_EQ(tdm_display_get_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
215 TEST_P(TDMDisplay, DisplayGetPPCapabilities)
217 tdm_pp_capability capabilities = (tdm_pp_capability) TDM_UT_INVALID_VALUE;
221 ret = tdm_display_get_pp_capabilities(dpy, &capabilities);
222 ASSERT_TRUE(ret == TDM_ERROR_NONE || ret == TDM_ERROR_NO_CAPABILITY);
224 if (ret == TDM_ERROR_NONE)
225 ASSERT_NE(capabilities, TDM_UT_INVALID_VALUE);
228 TEST_P(TDMDisplay, DisplayGetPPCapabilitiesNullObject)
230 tdm_pp_capability capabilities = (tdm_pp_capability)TDM_UT_INVALID_VALUE;
231 ASSERT_EQ(tdm_display_get_pp_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
232 ASSERT_EQ(capabilities, (tdm_pp_capability)TDM_UT_INVALID_VALUE);
235 TEST_P(TDMDisplay, DisplayGetPPCapabilitiesNullOther)
237 ASSERT_EQ(tdm_display_get_pp_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
240 TEST_P(TDMDisplay, DisplayGetCaptureCapabilities)
242 tdm_capture_capability capabilities = (tdm_capture_capability)TDM_UT_INVALID_VALUE;
245 if (!has_capture_cap)
248 ret = tdm_display_get_capture_capabilities(dpy, &capabilities);
249 ASSERT_TRUE(ret == TDM_ERROR_NONE || ret == TDM_ERROR_NO_CAPABILITY);
251 if (ret == TDM_ERROR_NONE)
252 ASSERT_NE(capabilities, (tdm_capture_capability)TDM_UT_INVALID_VALUE);
255 TEST_P(TDMDisplay, DisplayGetCaptureCapabilitiesNullObject)
257 tdm_capture_capability capabilities = (tdm_capture_capability)TDM_UT_INVALID_VALUE;
258 ASSERT_EQ(tdm_display_get_capture_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
259 ASSERT_EQ(capabilities, (tdm_capture_capability)TDM_UT_INVALID_VALUE);
262 TEST_P(TDMDisplay, DisplayGetCaptureCapabilitiesNullOther)
264 ASSERT_EQ(tdm_display_get_capture_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
267 TEST_P(TDMDisplay, DisplayGetMaxLayerCount)
269 int max_count = TDM_UT_INVALID_VALUE;
270 ASSERT_EQ(tdm_display_get_max_layer_count(dpy, &max_count), TDM_ERROR_NONE);
271 ASSERT_NE(max_count, TDM_UT_INVALID_VALUE);
274 TEST_P(TDMDisplay, DisplayGetMaxLayerCountNullObject)
276 int max_count = TDM_UT_INVALID_VALUE;
277 ASSERT_EQ(tdm_display_get_max_layer_count(NULL, &max_count), TDM_ERROR_INVALID_PARAMETER);
278 ASSERT_EQ(max_count, TDM_UT_INVALID_VALUE);
281 TEST_P(TDMDisplay, DisplayGetMaxLayerCountNullOther)
283 ASSERT_EQ(tdm_display_get_max_layer_count(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
286 TEST_P(TDMDisplay, DisplayGetOutputCount)
288 int count = TDM_UT_INVALID_VALUE;
289 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
290 ASSERT_NE(count, TDM_UT_INVALID_VALUE);
293 TEST_P(TDMDisplay, DisplayGetOutputCountNullObject)
295 int count = TDM_UT_INVALID_VALUE;
296 ASSERT_EQ(tdm_display_get_output_count(NULL, &count), TDM_ERROR_INVALID_PARAMETER);
297 ASSERT_EQ(count, TDM_UT_INVALID_VALUE);
300 TEST_P(TDMDisplay, DisplayGetOutputCountNullOther)
302 ASSERT_EQ(tdm_display_get_output_count(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
305 TEST_P(TDMDisplay, DisplayGetOutput)
308 int o, count = TDM_UT_INVALID_VALUE;
311 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
314 for (o = 0; o < count; o++) {
315 output = tdm_display_get_output(dpy, o, &ret);
316 ASSERT_EQ(ret, TDM_ERROR_NONE);
317 ASSERT_NE(output, NULL);
321 TEST_P(TDMDisplay, DisplayGetOutputNullAll)
324 int o, count = TDM_UT_INVALID_VALUE;
326 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
329 for (o = 0; o < count; o++) {
330 output = tdm_display_get_output(NULL, o, NULL);
331 ASSERT_EQ(output, NULL);
335 TEST_P(TDMDisplay, DisplayGetOutputNullObject)
340 output = tdm_display_get_output(NULL, 0, &ret);
341 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
342 ASSERT_EQ(output, NULL);
345 TEST_P(TDMDisplay, DisplayGetOutputNullOther)
348 int o, count = TDM_UT_INVALID_VALUE;
350 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
353 for (o = 0; o < count; o++) {
354 output = tdm_display_get_output(dpy, o, NULL);
355 ASSERT_NE(output, NULL);
359 TEST_P(TDMDisplay, DisplayGetOutputWrongIndex)
364 output = tdm_display_get_output(dpy, -1, &ret);
365 ASSERT_EQ(ret, TDM_ERROR_NONE);
366 ASSERT_EQ(output, NULL);
368 output = tdm_display_get_output(dpy, INT_MAX, &ret);
369 ASSERT_EQ(ret, TDM_ERROR_NONE);
370 ASSERT_EQ(output, NULL);
373 TEST_P(TDMDisplay, DisplayFindOutput)
376 int count = TDM_UT_INVALID_VALUE;
379 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
382 output = tdm_display_find_output(dpy, "primary", &ret);
383 ASSERT_EQ(ret, TDM_ERROR_NONE);
384 ASSERT_NE(output, NULL);
386 output = tdm_display_find_output(dpy, "invalid", &ret);
387 ASSERT_EQ(ret, TDM_ERROR_NONE);
388 ASSERT_EQ(output, NULL);
391 TEST_P(TDMDisplay, DisplayCreatePp)
399 pp = tdm_display_create_pp(dpy, &ret);
400 ASSERT_EQ(ret, TDM_ERROR_NONE);
406 TEST_P(TDMDisplay, DisplayCreatePpNullObject)
414 pp = tdm_display_create_pp(NULL, &ret);
415 ASSERT_NE(ret, TDM_ERROR_NONE);
419 TEST_P(TDMDisplay, ModuleGetInfo)
422 int o, count = TDM_UT_INVALID_VALUE;
425 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
428 for (o = 0; o < count; o++) {
430 const char *name = (const char *)TDM_UT_INVALID_VALUE;
431 const char *vendor = (const char *)TDM_UT_INVALID_VALUE;
432 int major = TDM_UT_INVALID_VALUE;
433 int minor = TDM_UT_INVALID_VALUE;
435 output = tdm_display_get_output(dpy, o, &ret);
436 ASSERT_EQ(ret, TDM_ERROR_NONE);
437 ASSERT_NE(output, NULL);
439 module = tdm_output_get_backend_module(output, &ret);
440 ASSERT_EQ(ret, TDM_ERROR_NONE);
441 ASSERT_NE(module, NULL);
443 ASSERT_EQ(tdm_module_get_info(module, &name, &vendor, &major, &minor), TDM_ERROR_NONE);
444 ASSERT_NE(name, (const char *)TDM_UT_INVALID_VALUE);
445 ASSERT_NE(vendor, (const char *)TDM_UT_INVALID_VALUE);
446 ASSERT_NE(major, TDM_UT_INVALID_VALUE);
447 ASSERT_NE(minor, TDM_UT_INVALID_VALUE);
451 TEST_P(TDMDisplay, ModuleGetInfoNullObject)
453 const char *name = (const char *)TDM_UT_INVALID_VALUE;
454 const char *vendor = (const char *)TDM_UT_INVALID_VALUE;
455 int major = TDM_UT_INVALID_VALUE;
456 int minor = TDM_UT_INVALID_VALUE;
458 ASSERT_EQ(tdm_module_get_info(NULL, &name, &vendor, &major, &minor), TDM_ERROR_INVALID_PARAMETER);
459 ASSERT_EQ(name, (const char *)TDM_UT_INVALID_VALUE);
460 ASSERT_EQ(vendor, (const char *)TDM_UT_INVALID_VALUE);
461 ASSERT_EQ(major, TDM_UT_INVALID_VALUE);
462 ASSERT_EQ(minor, TDM_UT_INVALID_VALUE);
465 TEST_P(TDMDisplay, ModuleGetInfoNullOther)
468 int o, count = TDM_UT_INVALID_VALUE;
471 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
474 for (o = 0; o < count; o++) {
477 output = tdm_display_get_output(dpy, o, &ret);
478 ASSERT_EQ(ret, TDM_ERROR_NONE);
479 ASSERT_NE(output, NULL);
481 module = tdm_output_get_backend_module(output, &ret);
482 ASSERT_EQ(ret, TDM_ERROR_NONE);
483 ASSERT_NE(module, NULL);
485 ASSERT_EQ(tdm_module_get_info(module, NULL, NULL, NULL, NULL), TDM_ERROR_NONE);
489 #ifdef TDM_UT_TEST_WITH_PARAMS
490 INSTANTIATE_TEST_CASE_P(TDMDisplayParams,
492 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
494 INSTANTIATE_TEST_CASE_P(TDMDisplayParams,
496 Values(TDM_DEFAULT_MODULE));