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, DisplayUpdateWrongDpy)
125 tdm_display *wrong_dpy = (tdm_display *)TDM_UT_INVALID_VALUE;
126 tdm_display_update(wrong_dpy);
128 }, ::testing::ExitedWithCode(0), "");
131 TEST_P(TDMDisplay, DisplayUpdateNullObject)
133 ASSERT_EQ(tdm_display_update(NULL), TDM_ERROR_INVALID_PARAMETER);
136 TEST_P(TDMDisplay, DisplayGetFDSuccesful)
138 int fd = TDM_UT_INVALID_VALUE;
139 ASSERT_EQ(tdm_display_get_fd(dpy, &fd), TDM_ERROR_NONE);
140 ASSERT_NE(fd, TDM_UT_INVALID_VALUE);
143 TEST_P(TDMDisplay, DisplayGetFDNullObject)
145 int fd = TDM_UT_INVALID_VALUE;
146 ASSERT_EQ(tdm_display_get_fd(NULL, &fd), TDM_ERROR_INVALID_PARAMETER);
147 ASSERT_EQ(fd, TDM_UT_INVALID_VALUE);
150 TEST_P(TDMDisplay, DisplayGetFDNullFD)
152 ASSERT_EQ(tdm_display_get_fd(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
155 TEST_P(TDMDisplay, DisplayGetFDWrongDpy)
157 tdm_display *wrong_dpy = (tdm_display *)TDM_UT_INVALID_VALUE;
158 int fd = TDM_UT_INVALID_VALUE;
160 ASSERT_EQ(tdm_display_get_fd(wrong_dpy, &fd), TDM_ERROR_INVALID_PARAMETER);
161 ASSERT_EQ(fd, TDM_UT_INVALID_VALUE);
165 TEST_P(TDMDisplay, DISABLED_DisplayHandleEvents)
167 /* TODO Generate events*/
168 ASSERT_EQ(ut_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
171 TEST_P(TDMDisplay, DisplayFlush)
173 tdm_display_flush(dpy);
176 TEST_P(TDMDisplay, DisplayFlushNullObject)
178 tdm_display_flush(NULL);
181 TEST_P(TDMDisplay, DisplayGetBackendInfo)
183 const char *name = (const char*)TDM_UT_INVALID_VALUE;
184 const char *vendor = (const char*)TDM_UT_INVALID_VALUE;
185 int major = TDM_UT_INVALID_VALUE, minor = TDM_UT_INVALID_VALUE;
187 ASSERT_EQ(tdm_display_get_backend_info(dpy, &name, &vendor, &major, &minor), TDM_ERROR_NONE);
188 ASSERT_NE(name, (const char*)TDM_UT_INVALID_VALUE);
189 ASSERT_NE(vendor, (const char*)TDM_UT_INVALID_VALUE);
190 ASSERT_NE(major, TDM_UT_INVALID_VALUE);
191 ASSERT_NE(minor, TDM_UT_INVALID_VALUE);
194 TEST_P(TDMDisplay, DisplayGetBackendInfoNullObject)
196 const char *name = (const char*)TDM_UT_INVALID_VALUE;
197 const char *vendor = (const char*)TDM_UT_INVALID_VALUE;
198 int major = TDM_UT_INVALID_VALUE, minor = TDM_UT_INVALID_VALUE;
200 ASSERT_EQ(tdm_display_get_backend_info(NULL, &name, &vendor, &major, &minor), TDM_ERROR_INVALID_PARAMETER);
201 ASSERT_EQ(name, (const char*)TDM_UT_INVALID_VALUE);
202 ASSERT_EQ(vendor, (const char*)TDM_UT_INVALID_VALUE);
203 ASSERT_EQ(major, TDM_UT_INVALID_VALUE);
204 ASSERT_EQ(minor, TDM_UT_INVALID_VALUE);
207 TEST_P(TDMDisplay, DisplayGetBackendInfoNullOther)
209 ASSERT_EQ(tdm_display_get_backend_info(dpy, NULL, NULL, NULL, NULL), TDM_ERROR_NONE);
212 TEST_P(TDMDisplay, DisplayGetCapabilities)
214 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
215 ASSERT_EQ(tdm_display_get_capabilities(dpy, &capabilities), TDM_ERROR_NONE);
216 ASSERT_NE(capabilities, TDM_UT_INVALID_VALUE);
219 TEST_P(TDMDisplay, DisplayGetCapabilitiesNullObject)
221 tdm_display_capability capabilities = (tdm_display_capability)TDM_UT_INVALID_VALUE;
222 ASSERT_EQ(tdm_display_get_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
223 ASSERT_EQ(capabilities, (tdm_display_capability)TDM_UT_INVALID_VALUE);
226 TEST_P(TDMDisplay, DisplayGetCapabilitiesNullOther)
228 ASSERT_EQ(tdm_display_get_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
231 TEST_P(TDMDisplay, DisplayGetPPCapabilities)
233 tdm_pp_capability capabilities = (tdm_pp_capability) TDM_UT_INVALID_VALUE;
237 ret = tdm_display_get_pp_capabilities(dpy, &capabilities);
238 ASSERT_TRUE(ret == TDM_ERROR_NONE || ret == TDM_ERROR_NO_CAPABILITY);
240 if (ret == TDM_ERROR_NONE)
241 ASSERT_NE(capabilities, TDM_UT_INVALID_VALUE);
244 TEST_P(TDMDisplay, DisplayGetPPCapabilitiesNullObject)
246 tdm_pp_capability capabilities = (tdm_pp_capability)TDM_UT_INVALID_VALUE;
247 ASSERT_EQ(tdm_display_get_pp_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
248 ASSERT_EQ(capabilities, (tdm_pp_capability)TDM_UT_INVALID_VALUE);
251 TEST_P(TDMDisplay, DisplayGetPPCapabilitiesNullOther)
253 ASSERT_EQ(tdm_display_get_pp_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
256 TEST_P(TDMDisplay, DisplayGetCaptureCapabilities)
258 tdm_capture_capability capabilities = (tdm_capture_capability)TDM_UT_INVALID_VALUE;
261 if (!has_capture_cap)
264 ret = tdm_display_get_capture_capabilities(dpy, &capabilities);
265 ASSERT_TRUE(ret == TDM_ERROR_NONE || ret == TDM_ERROR_NO_CAPABILITY);
267 if (ret == TDM_ERROR_NONE)
268 ASSERT_NE(capabilities, (tdm_capture_capability)TDM_UT_INVALID_VALUE);
271 TEST_P(TDMDisplay, DisplayGetCaptureCapabilitiesNullObject)
273 tdm_capture_capability capabilities = (tdm_capture_capability)TDM_UT_INVALID_VALUE;
274 ASSERT_EQ(tdm_display_get_capture_capabilities(NULL, &capabilities), TDM_ERROR_INVALID_PARAMETER);
275 ASSERT_EQ(capabilities, (tdm_capture_capability)TDM_UT_INVALID_VALUE);
278 TEST_P(TDMDisplay, DisplayGetCaptureCapabilitiesNullOther)
280 ASSERT_EQ(tdm_display_get_capture_capabilities(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
283 TEST_P(TDMDisplay, DisplayGetMaxLayerCount)
285 int max_count = TDM_UT_INVALID_VALUE;
286 ASSERT_EQ(tdm_display_get_max_layer_count(dpy, &max_count), TDM_ERROR_NONE);
287 ASSERT_NE(max_count, TDM_UT_INVALID_VALUE);
290 TEST_P(TDMDisplay, DisplayGetMaxLayerCountNullObject)
292 int max_count = TDM_UT_INVALID_VALUE;
293 ASSERT_EQ(tdm_display_get_max_layer_count(NULL, &max_count), TDM_ERROR_INVALID_PARAMETER);
294 ASSERT_EQ(max_count, TDM_UT_INVALID_VALUE);
297 TEST_P(TDMDisplay, DisplayGetMaxLayerCountNullOther)
299 ASSERT_EQ(tdm_display_get_max_layer_count(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
302 TEST_P(TDMDisplay, DisplayGetOutputCount)
304 int count = TDM_UT_INVALID_VALUE;
305 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
306 ASSERT_NE(count, TDM_UT_INVALID_VALUE);
309 TEST_P(TDMDisplay, DisplayGetOutputCountNullObject)
311 int count = TDM_UT_INVALID_VALUE;
312 ASSERT_EQ(tdm_display_get_output_count(NULL, &count), TDM_ERROR_INVALID_PARAMETER);
313 ASSERT_EQ(count, TDM_UT_INVALID_VALUE);
316 TEST_P(TDMDisplay, DisplayGetOutputCountNullOther)
318 ASSERT_EQ(tdm_display_get_output_count(dpy, NULL), TDM_ERROR_INVALID_PARAMETER);
321 TEST_P(TDMDisplay, DisplayGetOutput)
324 int o, count = TDM_UT_INVALID_VALUE;
327 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
330 for (o = 0; o < count; o++) {
331 output = tdm_display_get_output(dpy, o, &ret);
332 ASSERT_EQ(ret, TDM_ERROR_NONE);
333 ASSERT_NE(output, NULL);
337 TEST_P(TDMDisplay, DisplayGetOutputNullAll)
340 int o, count = TDM_UT_INVALID_VALUE;
342 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
345 for (o = 0; o < count; o++) {
346 output = tdm_display_get_output(NULL, o, NULL);
347 ASSERT_EQ(output, NULL);
351 TEST_P(TDMDisplay, DisplayGetOutputNullObject)
356 output = tdm_display_get_output(NULL, 0, &ret);
357 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
358 ASSERT_EQ(output, NULL);
361 TEST_P(TDMDisplay, DisplayGetOutputNullOther)
364 int o, count = TDM_UT_INVALID_VALUE;
366 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
369 for (o = 0; o < count; o++) {
370 output = tdm_display_get_output(dpy, o, NULL);
371 ASSERT_NE(output, NULL);
375 TEST_P(TDMDisplay, DisplayGetOutputWrongIndex)
380 output = tdm_display_get_output(dpy, -1, &ret);
381 ASSERT_EQ(ret, TDM_ERROR_NONE);
382 ASSERT_EQ(output, NULL);
384 output = tdm_display_get_output(dpy, INT_MAX, &ret);
385 ASSERT_EQ(ret, TDM_ERROR_NONE);
386 ASSERT_EQ(output, NULL);
389 TEST_P(TDMDisplay, DisplayCreatePp)
397 pp = tdm_display_create_pp(dpy, &ret);
398 ASSERT_EQ(ret, TDM_ERROR_NONE);
404 TEST_P(TDMDisplay, DisplayCreatePpNullObject)
412 pp = tdm_display_create_pp(NULL, &ret);
413 ASSERT_NE(ret, TDM_ERROR_NONE);
417 TEST_P(TDMDisplay, ModuleGetInfo)
420 int o, count = TDM_UT_INVALID_VALUE;
423 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
426 for (o = 0; o < count; o++) {
428 const char *name = (const char *)TDM_UT_INVALID_VALUE;
429 const char *vendor = (const char *)TDM_UT_INVALID_VALUE;
430 int major = TDM_UT_INVALID_VALUE;
431 int minor = TDM_UT_INVALID_VALUE;
433 output = tdm_display_get_output(dpy, o, &ret);
434 ASSERT_EQ(ret, TDM_ERROR_NONE);
435 ASSERT_NE(output, NULL);
437 module = tdm_output_get_backend_module(output, &ret);
438 ASSERT_EQ(ret, TDM_ERROR_NONE);
439 ASSERT_NE(module, NULL);
441 ASSERT_EQ(tdm_module_get_info(module, &name, &vendor, &major, &minor), TDM_ERROR_NONE);
442 ASSERT_NE(name, (const char *)TDM_UT_INVALID_VALUE);
443 ASSERT_NE(vendor, (const char *)TDM_UT_INVALID_VALUE);
444 ASSERT_NE(major, TDM_UT_INVALID_VALUE);
445 ASSERT_NE(minor, TDM_UT_INVALID_VALUE);
449 TEST_P(TDMDisplay, ModuleGetInfoNullObject)
451 const char *name = (const char *)TDM_UT_INVALID_VALUE;
452 const char *vendor = (const char *)TDM_UT_INVALID_VALUE;
453 int major = TDM_UT_INVALID_VALUE;
454 int minor = TDM_UT_INVALID_VALUE;
456 ASSERT_EQ(tdm_module_get_info(NULL, &name, &vendor, &major, &minor), TDM_ERROR_INVALID_PARAMETER);
457 ASSERT_EQ(name, (const char *)TDM_UT_INVALID_VALUE);
458 ASSERT_EQ(vendor, (const char *)TDM_UT_INVALID_VALUE);
459 ASSERT_EQ(major, TDM_UT_INVALID_VALUE);
460 ASSERT_EQ(minor, TDM_UT_INVALID_VALUE);
463 TEST_P(TDMDisplay, ModuleGetInfoNullOther)
466 int o, count = TDM_UT_INVALID_VALUE;
469 ASSERT_EQ(tdm_display_get_output_count(dpy, &count), TDM_ERROR_NONE);
472 for (o = 0; o < count; o++) {
475 output = tdm_display_get_output(dpy, o, &ret);
476 ASSERT_EQ(ret, TDM_ERROR_NONE);
477 ASSERT_NE(output, NULL);
479 module = tdm_output_get_backend_module(output, &ret);
480 ASSERT_EQ(ret, TDM_ERROR_NONE);
481 ASSERT_NE(module, NULL);
483 ASSERT_EQ(tdm_module_get_info(module, NULL, NULL, NULL, NULL), TDM_ERROR_NONE);
487 #ifdef TDM_UT_TEST_WITH_PARAMS
488 INSTANTIATE_TEST_CASE_P(TDMDisplayParams,
490 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
492 INSTANTIATE_TEST_CASE_P(TDMDisplayParams,
494 Values(TDM_DEFAULT_MODULE));