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 **************************************************************************/
33 TDMDisplay::TDMDisplay()
38 has_capture_cap = false;
41 void TDMDisplay::SetUp(void)
44 int count = TDM_UT_INVALID_VALUE;
45 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
49 dpy = tdm_display_init(&ret);
50 ASSERT_EQ(ret, TDM_ERROR_NONE);
53 bufmgr = tbm_bufmgr_init(-1);
54 ASSERT_NE(bufmgr, NULL);
56 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
59 ASSERT_EQ(tdm_display_get_capabilities(dpy, &capabilities), TDM_ERROR_NONE);
60 has_pp_cap = capabilities & TDM_DISPLAY_CAPABILITY_PP;
61 has_capture_cap = capabilities & TDM_DISPLAY_CAPABILITY_CAPTURE;
64 void TDMDisplay::TearDown(void)
66 tbm_bufmgr_deinit(bufmgr);
67 tdm_display_deinit(dpy);
69 ASSERT_EQ(tbm_bufmgr_debug_get_ref_count(), 0);
75 ut_tdm_display_handle_events(tdm_display *dpy)
82 ret = tdm_display_get_fd(dpy, &fd);
83 TDM_UT_RETURN_VAL_IF_FAIL(fd >= 0, ret);
90 result = poll(&fds, 1, 3000);
91 } while (result == -1 && errno == EINTR);
94 TDM_UT_ERR("polling tdm_fd timeout.");
95 return TDM_ERROR_TIMEOUT;
98 return tdm_display_handle_events(dpy);
102 ut_tdm_display_has_pp_capability(tdm_display *dpy)
104 tdm_display_capability capabilities = (tdm_display_capability)0;
105 TDM_UT_RETURN_FALSE_IF_FAIL(tdm_display_get_capabilities(dpy, &capabilities) == TDM_ERROR_NONE);
106 return capabilities & TDM_DISPLAY_CAPABILITY_PP;
110 ut_tdm_display_has_capture_capability(tdm_display *dpy)
112 tdm_display_capability capabilities = (tdm_display_capability)0;
113 TDM_UT_RETURN_FALSE_IF_FAIL(tdm_display_get_capabilities(dpy, &capabilities) == TDM_ERROR_NONE);
114 return capabilities & TDM_DISPLAY_CAPABILITY_CAPTURE;
117 TEST_P(TDMDisplay, DisplayUpdate)
119 ASSERT_EQ(tdm_display_update(dpy), TDM_ERROR_NONE);
122 TEST_P(TDMDisplay, DisplayUpdateNullObject)
124 ASSERT_EQ(tdm_display_update(NULL), TDM_ERROR_INVALID_PARAMETER);
127 TEST_P(TDMDisplay, DisplayGetFDSuccesful)
129 int fd = TDM_UT_INVALID_VALUE;
130 ASSERT_EQ(tdm_display_get_fd(dpy, &fd), TDM_ERROR_NONE);
131 ASSERT_NE(fd, TDM_UT_INVALID_VALUE);
134 TEST_P(TDMDisplay, DisplayGetFDNullObject)
136 int fd = TDM_UT_INVALID_VALUE;
137 ASSERT_EQ(tdm_display_get_fd(NULL, &fd), TDM_ERROR_INVALID_PARAMETER);
138 ASSERT_EQ(fd, TDM_UT_INVALID_VALUE);
141 TEST_P(TDMDisplay, DisplayGetFDNullFD)
143 ASSERT_EQ(tdm_display_get_fd(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
147 TEST_P(TDMDisplay, DISABLED_DisplayHandleEvents)
149 /* TODO Generate events*/
150 ASSERT_EQ(ut_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
153 TEST_P(TDMDisplay, DisplayFlush)
155 tdm_display_flush(dpy);
158 TEST_P(TDMDisplay, DisplayFlushNullObject)
160 tdm_display_flush(NULL);
163 TEST_P(TDMDisplay, DisplayGetBackendInfo)
165 const char *name = (const char*)TDM_UT_INVALID_VALUE;
166 const char *vendor = (const char*)TDM_UT_INVALID_VALUE;
167 int major = TDM_UT_INVALID_VALUE, minor = TDM_UT_INVALID_VALUE;
169 ASSERT_EQ(tdm_display_get_backend_info(dpy, &name, &vendor, &major, &minor), TDM_ERROR_NONE);
170 ASSERT_NE(name, (const char*)TDM_UT_INVALID_VALUE);
171 ASSERT_NE(vendor, (const char*)TDM_UT_INVALID_VALUE);
172 ASSERT_NE(major, TDM_UT_INVALID_VALUE);
173 ASSERT_NE(minor, TDM_UT_INVALID_VALUE);
176 TEST_P(TDMDisplay, DisplayGetBackendInfoNullObject)
178 const char *name = (const char*)TDM_UT_INVALID_VALUE;
179 const char *vendor = (const char*)TDM_UT_INVALID_VALUE;
180 int major = TDM_UT_INVALID_VALUE, minor = TDM_UT_INVALID_VALUE;
182 ASSERT_EQ(tdm_display_get_backend_info(NULL, &name, &vendor, &major, &minor), TDM_ERROR_INVALID_PARAMETER);
183 ASSERT_EQ(name, (const char*)TDM_UT_INVALID_VALUE);
184 ASSERT_EQ(vendor, (const char*)TDM_UT_INVALID_VALUE);
185 ASSERT_EQ(major, TDM_UT_INVALID_VALUE);
186 ASSERT_EQ(minor, TDM_UT_INVALID_VALUE);
189 TEST_P(TDMDisplay, DisplayGetBackendInfoNullOther)
191 ASSERT_EQ(tdm_display_get_backend_info(dpy, NULL, NULL, NULL, NULL), TDM_ERROR_NONE);
194 TEST_P(TDMDisplay, DisplayGetCapabilities)
196 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
197 ASSERT_EQ(tdm_display_get_capabilities(dpy, &capabilities), TDM_ERROR_NONE);
198 ASSERT_NE(capabilities, TDM_UT_INVALID_VALUE);
201 TEST_P(TDMDisplay, DisplayGetCapabilitiesNullObject)
203 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
204 ASSERT_EQ(tdm_display_get_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
205 ASSERT_EQ(capabilities, (tdm_display_capability)TDM_UT_INVALID_VALUE);
208 TEST_P(TDMDisplay, DisplayGetCapabilitiesNullOther)
210 ASSERT_EQ(tdm_display_get_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
213 TEST_P(TDMDisplay, DisplayGetPPCapabilities)
215 tdm_pp_capability capabilities = (tdm_pp_capability) TDM_UT_INVALID_VALUE;
219 ret = tdm_display_get_pp_capabilities(dpy, &capabilities);
220 ASSERT_TRUE(ret == TDM_ERROR_NONE || ret == TDM_ERROR_NO_CAPABILITY);
222 if (ret == TDM_ERROR_NONE)
223 ASSERT_NE(capabilities, TDM_UT_INVALID_VALUE);
226 TEST_P(TDMDisplay, DisplayGetPPCapabilitiesNullObject)
228 tdm_pp_capability capabilities = (tdm_pp_capability)TDM_UT_INVALID_VALUE;
229 ASSERT_EQ(tdm_display_get_pp_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
230 ASSERT_EQ(capabilities, (tdm_pp_capability)TDM_UT_INVALID_VALUE);
233 TEST_P(TDMDisplay, DisplayGetPPCapabilitiesNullOther)
235 ASSERT_EQ(tdm_display_get_pp_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
238 TEST_P(TDMDisplay, DisplayGetCaptureCapabilities)
240 tdm_capture_capability capabilities = (tdm_capture_capability)TDM_UT_INVALID_VALUE;
243 if (!has_capture_cap)
246 ret = tdm_display_get_capture_capabilities(dpy, &capabilities);
247 ASSERT_TRUE(ret == TDM_ERROR_NONE || ret == TDM_ERROR_NO_CAPABILITY);
249 if (ret == TDM_ERROR_NONE)
250 ASSERT_NE(capabilities, (tdm_capture_capability)TDM_UT_INVALID_VALUE);
253 TEST_P(TDMDisplay, DisplayGetCaptureCapabilitiesNullObject)
255 tdm_capture_capability capabilities = (tdm_capture_capability)TDM_UT_INVALID_VALUE;
256 ASSERT_EQ(tdm_display_get_capture_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
257 ASSERT_EQ(capabilities, (tdm_capture_capability)TDM_UT_INVALID_VALUE);
260 TEST_P(TDMDisplay, DisplayGetCaptureCapabilitiesNullOther)
262 ASSERT_EQ(tdm_display_get_capture_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
265 TEST_P(TDMDisplay, DisplayGetMaxLayerCount)
267 int max_count = TDM_UT_INVALID_VALUE;
268 ASSERT_EQ(tdm_display_get_max_layer_count(dpy, &max_count), TDM_ERROR_NONE);
269 ASSERT_NE(max_count, TDM_UT_INVALID_VALUE);
272 TEST_P(TDMDisplay, DisplayGetMaxLayerCountNullObject)
274 int max_count = TDM_UT_INVALID_VALUE;
275 ASSERT_EQ(tdm_display_get_max_layer_count(NULL, &max_count), TDM_ERROR_INVALID_PARAMETER);
276 ASSERT_EQ(max_count, TDM_UT_INVALID_VALUE);
279 TEST_P(TDMDisplay, DisplayGetMaxLayerCountNullOther)
281 ASSERT_EQ(tdm_display_get_max_layer_count(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
284 TEST_P(TDMDisplay, DisplayGetOutputCount)
286 int count = TDM_UT_INVALID_VALUE;
287 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
288 ASSERT_NE(count, TDM_UT_INVALID_VALUE);
291 TEST_P(TDMDisplay, DisplayGetOutputCountNullObject)
293 int count = TDM_UT_INVALID_VALUE;
294 ASSERT_EQ(tdm_display_get_output_count(NULL, &count), TDM_ERROR_INVALID_PARAMETER);
295 ASSERT_EQ(count, TDM_UT_INVALID_VALUE);
298 TEST_P(TDMDisplay, DisplayGetOutputCountNullOther)
300 ASSERT_EQ(tdm_display_get_output_count(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
303 TEST_P(TDMDisplay, DisplayGetOutput)
306 int o, count = TDM_UT_INVALID_VALUE;
309 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
312 for (o = 0; o < count; o++) {
313 output = tdm_display_get_output(dpy, o, &ret);
314 ASSERT_EQ(ret, TDM_ERROR_NONE);
315 ASSERT_NE(output, NULL);
319 TEST_P(TDMDisplay, DisplayGetOutputNullAll)
322 int o, count = TDM_UT_INVALID_VALUE;
324 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
327 for (o = 0; o < count; o++) {
328 output = tdm_display_get_output(NULL, o, NULL);
329 ASSERT_EQ(output, NULL);
333 TEST_P(TDMDisplay, DisplayGetOutputNullObject)
338 output = tdm_display_get_output(NULL, 0, &ret);
339 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
340 ASSERT_EQ(output, NULL);
343 TEST_P(TDMDisplay, DisplayGetOutputNullOther)
346 int o, count = TDM_UT_INVALID_VALUE;
348 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
351 for (o = 0; o < count; o++) {
352 output = tdm_display_get_output(dpy, o, NULL);
353 ASSERT_NE(output, NULL);
357 TEST_P(TDMDisplay, DisplayGetOutputWrongIndex)
362 output = tdm_display_get_output(dpy, -1, &ret);
363 ASSERT_EQ(ret, TDM_ERROR_NONE);
364 ASSERT_EQ(output, NULL);
366 output = tdm_display_get_output(dpy, INT_MAX, &ret);
367 ASSERT_EQ(ret, TDM_ERROR_NONE);
368 ASSERT_EQ(output, NULL);
371 TEST_P(TDMDisplay, DisplayCreatePp)
379 pp = tdm_display_create_pp(dpy, &ret);
380 ASSERT_EQ(ret, TDM_ERROR_NONE);
386 TEST_P(TDMDisplay, DisplayCreatePpNullObject)
394 pp = tdm_display_create_pp(NULL, &ret);
395 ASSERT_NE(ret, TDM_ERROR_NONE);
399 TEST_P(TDMDisplay, ModuleGetInfo)
402 int o, count = TDM_UT_INVALID_VALUE;
405 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
408 for (o = 0; o < count; o++) {
410 const char *name = (const char *)TDM_UT_INVALID_VALUE;
411 const char *vendor = (const char *)TDM_UT_INVALID_VALUE;
412 int major = TDM_UT_INVALID_VALUE;
413 int minor = TDM_UT_INVALID_VALUE;
415 output = tdm_display_get_output(dpy, o, &ret);
416 ASSERT_EQ(ret, TDM_ERROR_NONE);
417 ASSERT_NE(output, NULL);
419 module = tdm_output_get_backend_module(output, &ret);
420 ASSERT_EQ(ret, TDM_ERROR_NONE);
421 ASSERT_NE(module, NULL);
423 ASSERT_EQ(tdm_module_get_info(module, &name, &vendor, &major, &minor), TDM_ERROR_NONE);
424 ASSERT_NE(name, (const char *)TDM_UT_INVALID_VALUE);
425 ASSERT_NE(vendor, (const char *)TDM_UT_INVALID_VALUE);
426 ASSERT_NE(major, TDM_UT_INVALID_VALUE);
427 ASSERT_NE(minor, TDM_UT_INVALID_VALUE);
431 TEST_P(TDMDisplay, ModuleGetInfoNullObject)
433 const char *name = (const char *)TDM_UT_INVALID_VALUE;
434 const char *vendor = (const char *)TDM_UT_INVALID_VALUE;
435 int major = TDM_UT_INVALID_VALUE;
436 int minor = TDM_UT_INVALID_VALUE;
438 ASSERT_EQ(tdm_module_get_info(NULL, &name, &vendor, &major, &minor), TDM_ERROR_INVALID_PARAMETER);
439 ASSERT_EQ(name, (const char *)TDM_UT_INVALID_VALUE);
440 ASSERT_EQ(vendor, (const char *)TDM_UT_INVALID_VALUE);
441 ASSERT_EQ(major, TDM_UT_INVALID_VALUE);
442 ASSERT_EQ(minor, TDM_UT_INVALID_VALUE);
445 TEST_P(TDMDisplay, ModuleGetInfoNullOther)
448 int o, count = TDM_UT_INVALID_VALUE;
451 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
454 for (o = 0; o < count; o++) {
457 output = tdm_display_get_output(dpy, o, &ret);
458 ASSERT_EQ(ret, TDM_ERROR_NONE);
459 ASSERT_NE(output, NULL);
461 module = tdm_output_get_backend_module(output, &ret);
462 ASSERT_EQ(ret, TDM_ERROR_NONE);
463 ASSERT_NE(module, NULL);
465 ASSERT_EQ(tdm_module_get_info(module, NULL, NULL, NULL, NULL), TDM_ERROR_NONE);
469 #ifdef TDM_UT_TEST_WITH_PARAMS
470 INSTANTIATE_TEST_CASE_P(TDMDisplayParams,
472 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
474 INSTANTIATE_TEST_CASE_P(TDMDisplayParams,
476 Values(TDM_DEFAULT_MODULE));