1 /**************************************************************************
3 * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
5 * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sub license, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject to
13 * the following conditions:
15 * The above copyright notice and this permission notice (including the
16 * next paragraph) shall be included in all copies or substantial portions
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
23 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 **************************************************************************/
29 #include "gtest/gtest.h"
31 #include "tbm_stubs.h"
32 #include "pthread_stubs.h"
33 #include "stdlib_stubs.h"
34 #include "tdm_list_stubs.h"
35 #include "tdm_capture_stubs.h"
37 #define pthread_mutex_lock ut_pthread_mutex_lock
38 #define calloc ut_calloc
40 #define pthread_mutex_init ut_pthread_mutex_init
41 #define pthread_mutex_unlock ut_pthread_mutex_unlock
43 #include "tdm_capture.c"
47 static void _init_test()
49 TBM_BUFMGR_DEINIT_CALLED = 0;
50 TBM_BO_GET_USER_DATA_NULL = 0;
51 PTHREAD_MUTEX_INIT_ERROR = 0;
53 CALLOC_RETURN_BUFFER = 0;
55 OUTPUT_CREATE_CAPTURE_ERROR = 0;
56 CAPTURE_SET_DONE_HANDLER_ERROR = 0;
57 LAYER_CREATE_CAPTURE_ERROR = 0;
58 CAPTURE_SET_INFO_ERROR = 0;
59 CAPTURE_ATTACH_ERROR = 0;
60 CAPTURE_COMMIT_ERROR = 0;
63 /* tdm_capture_commit */
65 TEST(tdm_capture_commit, work_flow_success_4)
67 tdm_error error = TDM_ERROR_OPERATION_FAILED;
68 struct _tdm_private_capture capture;
69 struct _tdm_private_display private_display;
70 tdm_private_output private_output;
71 tdm_error expected_error = TDM_ERROR_NONE;
75 capture.private_display = &private_display;
76 private_display.func_capture.capture_commit = capture_commit;
77 CALLOC_RETURN_BUFFER = 1;
78 capture.private_output = &private_output;
79 private_output.current_dpms_value = TDM_OUTPUT_DPMS_ON;
81 error = tdm_capture_commit(&capture);
83 ASSERT_EQ(error, expected_error);
86 TEST(tdm_capture_commit, work_flow_success_3)
88 tdm_error error = TDM_ERROR_NONE;
89 struct _tdm_private_capture capture;
90 struct _tdm_private_display private_display;
91 tdm_private_output private_output;
92 tdm_error not_expected_error = TDM_ERROR_NONE;
96 capture.private_display = &private_display;
97 private_display.func_capture.capture_commit = capture_commit;
98 CAPTURE_COMMIT_ERROR = 1;
99 capture.private_output = &private_output;
100 private_output.current_dpms_value = TDM_OUTPUT_DPMS_ON;
102 error = tdm_capture_commit(&capture);
104 ASSERT_NE(error, not_expected_error);
107 TEST(tdm_capture_commit, work_flow_success_2)
109 tdm_error error = TDM_ERROR_NONE;
110 tdm_error expected_error = TDM_ERROR_NOT_IMPLEMENTED;
111 struct _tdm_private_capture capture;
112 struct _tdm_private_display private_display;
113 tdm_private_output private_output;
117 capture.private_display = &private_display;
118 private_display.func_capture.capture_commit = NULL;
119 capture.private_output = &private_output;
120 private_output.current_dpms_value = TDM_OUTPUT_DPMS_ON;
122 error = tdm_capture_commit(&capture);
124 ASSERT_EQ(error, expected_error);
127 TEST(tdm_capture_commit, work_flow_success_1)
129 tdm_error error = TDM_ERROR_NONE;
130 tdm_error expected_error = TDM_ERROR_BAD_REQUEST;
131 struct _tdm_private_capture capture;
132 struct _tdm_private_display private_display;
133 tdm_private_output private_output;
137 capture.private_display = &private_display;
138 private_display.func_capture.capture_commit = NULL;
139 capture.private_output = &private_output;
140 private_output.current_dpms_value = TDM_OUTPUT_DPMS_OFF;
142 error = tdm_capture_commit(&capture);
144 ASSERT_EQ(error, expected_error);
147 TEST(tdm_capture_commit, null_ptr_fail_1)
149 tdm_error error = TDM_ERROR_NONE;
150 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
154 error = tdm_capture_commit(NULL);
156 ASSERT_EQ(error, expected_error);
159 /* tdm_capture_attach */
161 TEST(tdm_capture_attach, null_ptr_fail_2)
163 tdm_error error = TDM_ERROR_NONE;
164 struct _tdm_private_capture capture;
165 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
169 error = tdm_capture_attach(&capture, NULL);
171 ASSERT_EQ(error, expected_error);
174 TEST(tdm_capture_attach, null_ptr_fail_1)
176 tdm_error error = TDM_ERROR_NONE;
177 struct _tbm_surface buffer;
178 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
182 error = tdm_capture_attach(NULL, &buffer);
184 ASSERT_EQ(error, expected_error);
187 /* tdm_capture_set_info */
189 TEST(tdm_capture_set_info, work_flow_success_2)
191 tdm_info_capture info;
192 tdm_error error = TDM_ERROR_OPERATION_FAILED;
193 struct _tdm_private_capture capture;
194 struct _tdm_private_display private_display;
195 tdm_error expected_error = TDM_ERROR_NONE;
199 capture.private_display = &private_display;
200 private_display.func_capture.capture_set_info = capture_set_info;
202 error = tdm_capture_set_info(&capture, &info);
204 ASSERT_EQ(error, expected_error);
207 TEST(tdm_capture_set_info, work_flow_success_1)
209 tdm_info_capture info;
210 tdm_error error = TDM_ERROR_NONE;
211 struct _tdm_private_capture capture;
212 struct _tdm_private_display private_display;
213 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
217 capture.private_display = &private_display;
218 private_display.func_capture.capture_set_info = capture_set_info;
219 CAPTURE_SET_INFO_ERROR = 1;
221 error = tdm_capture_set_info(&capture, &info);
223 ASSERT_EQ(error, expected_error);
226 TEST(tdm_capture_set_info, null_ptr_fail_2)
228 tdm_error error = TDM_ERROR_NONE;
229 struct _tdm_private_capture capture;
230 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
234 error = tdm_capture_set_info(&capture, NULL);
236 ASSERT_EQ(error, expected_error);
239 TEST(tdm_capture_set_info, null_ptr_fail_1)
241 tdm_error error = TDM_ERROR_NONE;
242 tdm_info_capture info;
243 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
247 error = tdm_capture_set_info(NULL, &info);
249 ASSERT_EQ(error, expected_error);
252 /* tdm_capture_create_layer_internal */
254 TEST(tdm_capture_create_layer_internal, work_flow_success_4)
256 tdm_error error = TDM_ERROR_OPERATION_FAILED;
257 struct _tdm_private_layer private_layer;
258 struct _tdm_private_output private_output;
259 struct _tdm_private_display private_display;
260 tdm_private_capture *actual;
261 tdm_private_capture *not_expected = NULL;
262 tdm_error expected_error = TDM_ERROR_NONE;
266 private_layer.private_output = &private_output;
267 private_output.private_display = &private_display;
268 private_display.func_layer.layer_create_capture = layer_create_capture;
269 private_display.func_capture.capture_destroy = capture_destroy;
270 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
272 actual = tdm_capture_create_layer_internal(&private_layer, &error);
274 ASSERT_EQ(error, expected_error);
275 ASSERT_TRUE(actual != not_expected);
279 TEST(tdm_capture_create_layer_internal, work_flow_success_3)
281 tdm_error error = TDM_ERROR_NONE;
282 struct _tdm_private_layer private_layer;
283 struct _tdm_private_output private_output;
284 struct _tdm_private_display private_display;
285 tdm_private_capture *actual;
286 tdm_private_capture *expected = NULL;
287 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
291 private_layer.private_output = &private_output;
292 private_output.private_display = &private_display;
293 private_display.func_layer.layer_create_capture = layer_create_capture;
294 private_display.func_capture.capture_destroy = capture_destroy;
295 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
299 actual = tdm_capture_create_layer_internal(&private_layer, &error);
301 ASSERT_EQ(error, expected_error);
302 ASSERT_TRUE(actual == expected);
305 TEST(tdm_capture_create_layer_internal, work_flow_success_2)
307 tdm_error error = TDM_ERROR_NONE;
308 struct _tdm_private_layer private_layer;
309 struct _tdm_private_output private_output;
310 struct _tdm_private_display private_display;
311 tdm_private_capture *actual;
312 tdm_private_capture *expected = NULL;
316 private_layer.private_output = &private_output;
317 private_output.private_display = &private_display;
318 private_display.func_layer.layer_create_capture = layer_create_capture;
319 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
321 LAYER_CREATE_CAPTURE_ERROR = 1;
323 actual = tdm_capture_create_layer_internal(&private_layer, &error);
325 ASSERT_TRUE(actual == expected);
328 TEST(tdm_capture_create_layer_internal, work_flow_success_1)
330 tdm_error error = TDM_ERROR_NONE;
331 struct _tdm_private_layer private_layer;
332 struct _tdm_private_output private_output;
333 struct _tdm_private_display private_display;
334 tdm_private_capture *actual;
335 tdm_private_capture *expected = NULL;
336 tdm_error expected_error = TDM_ERROR_NO_CAPABILITY;
340 private_layer.private_output = &private_output;
341 private_output.private_display = &private_display;
342 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
344 actual = tdm_capture_create_layer_internal(&private_layer, &error);
346 ASSERT_EQ(error, expected_error);
347 ASSERT_TRUE(actual == expected);
350 /* tc_tdm_capture_create_output_internal */
352 TEST(tdm_capture_create_output_internal, work_flow_success_5)
354 tdm_error error = TDM_ERROR_OPERATION_FAILED;
355 struct _tdm_private_output private_output;
356 struct _tdm_private_display private_display;
357 tdm_private_capture *actual;
358 tdm_private_capture *not_expected = NULL;
359 tdm_error expected_error = TDM_ERROR_NONE;
363 private_output.private_display = &private_display;
364 private_display.func_output.output_create_capture = output_create_capture;
365 private_display.func_capture.capture_destroy = capture_destroy;
366 private_display.func_capture.capture_set_done_handler =
367 capture_set_done_handler;
368 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
370 actual = tdm_capture_create_output_internal(&private_output, &error);
372 ASSERT_EQ(error, expected_error);
373 ASSERT_TRUE(actual != not_expected);
377 TEST(tdm_capture_create_output_internal, work_flow_success_4)
379 tdm_error error = TDM_ERROR_NONE;
380 struct _tdm_private_output private_output;
381 struct _tdm_private_display private_display;
382 tdm_private_capture *actual;
383 tdm_private_capture *expected = NULL;
384 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
388 private_output.private_display = &private_display;
389 private_display.func_output.output_create_capture = output_create_capture;
390 private_display.func_capture.capture_destroy = capture_destroy;
391 private_display.func_capture.capture_set_done_handler = capture_set_done_handler;
392 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
393 CAPTURE_SET_DONE_HANDLER_ERROR = 1;
395 actual = tdm_capture_create_output_internal(&private_output, &error);
397 ASSERT_EQ(error, expected_error);
398 ASSERT_TRUE(actual == expected);
401 TEST(tdm_capture_create_output_internal, work_flow_success_3)
403 tdm_error error = TDM_ERROR_NONE;
404 struct _tdm_private_output private_output;
405 struct _tdm_private_display private_display;
406 tdm_private_capture *actual;
407 tdm_private_capture *expected = NULL;
408 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
412 private_output.private_display = &private_display;
413 private_display.func_output.output_create_capture = output_create_capture;
414 private_display.func_capture.capture_destroy = capture_destroy;
415 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
418 actual = tdm_capture_create_output_internal(&private_output, &error);
420 ASSERT_EQ(error, expected_error);
421 ASSERT_TRUE(actual == expected);
424 TEST(tdm_capture_create_output_internal, work_flow_success_2)
426 tdm_error error = TDM_ERROR_NONE;
427 struct _tdm_private_output private_output;
428 struct _tdm_private_display private_display;
429 tdm_private_capture *actual;
430 tdm_private_capture *expected = NULL;
431 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
435 private_output.private_display = &private_display;
436 private_display.func_output.output_create_capture = output_create_capture;
437 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
438 OUTPUT_CREATE_CAPTURE_ERROR = 1;
440 actual = tdm_capture_create_output_internal(&private_output, &error);
442 ASSERT_EQ(error, expected_error);
443 ASSERT_TRUE(actual == expected);
446 TEST(tdm_capture_create_output_internal, work_flow_success_1)
448 tdm_error error = TDM_ERROR_NONE;
449 struct _tdm_private_output private_output;
450 struct _tdm_private_display private_display;
451 tdm_private_capture *actual;
452 tdm_private_capture *expected = NULL;
453 tdm_error expected_error = TDM_ERROR_NO_CAPABILITY;
457 private_output.private_display = &private_display;
458 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
459 actual = tdm_capture_create_output_internal(&private_output, &error);
461 ASSERT_EQ(error, expected_error);
462 ASSERT_TRUE(actual == expected);