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 "stub_pthread.h"
33 #include "stub_stdlib.h"
34 #include "stub_backend.h"
35 #include "stub_unistd.h"
36 #include "stub_tdm_thread.h"
37 #include "stub_tdm_buffer.h"
38 #include "stub_tdm_helper.h"
40 #include "tdm_capture.c"
42 //local stubs for callbeck functions
43 static int stub_tdm_capture_done_handler_called;
44 static void stub_tdm_capture_done_handler(tdm_capture *capture,
45 tbm_surface_h buffer, void *user_data)
47 stub_tdm_capture_done_handler_called = 1;
52 static void _init_test()
54 stub_tdm_helper_init();
55 stub_tdm_buffer_init();
56 stub_tdm_thread_init();
62 tdm_debug_dump = TDM_DUMP_FLAG_CAPTURE;
63 tdm_debug_module = TDM_DEBUG_BUFFER;
64 stub_tdm_capture_done_handler_called = 0;
67 /* tdm_capture_commit */
69 TEST(tdm_capture_commit, work_flow_success_4)
71 tdm_error error = TDM_ERROR_OPERATION_FAILED;
72 struct _tdm_private_capture capture;
73 struct _tdm_private_display private_display;
74 tdm_private_output private_output;
75 tdm_error expected_error = TDM_ERROR_NONE;
76 tdm_pp_private_buffer b_1, b_2;
80 LIST_INITHEAD(&capture.pending_buffer_list);
81 LIST_INITHEAD(&capture.buffer_list);
83 LIST_ADD(&b_1.link, &capture.pending_buffer_list);
84 LIST_ADD(&b_2.link, &capture.pending_buffer_list);
86 capture.private_display = &private_display;
87 private_display.func_capture.capture_commit = capture_commit;
88 CALLOC_RETURN_BUFFER = 1;
89 capture.private_output = &private_output;
90 private_output.current_dpms_value = TDM_OUTPUT_DPMS_ON;
92 error = tdm_capture_commit(&capture);
94 ASSERT_EQ(error, expected_error);
95 ASSERT_EQ(LIST_LENGTH(&capture.buffer_list), 2);
98 //TEST(tdm_capture_commit, work_flow_success_3)
100 // tdm_error error = TDM_ERROR_NONE;
101 // struct _tdm_private_capture capture;
102 // struct _tdm_private_display private_display;
103 // tdm_private_output private_output;
104 // tdm_pp_private_buffer b_1, b_2;
108 // LIST_INITHEAD(&capture.pending_buffer_list);
109 // LIST_INITHEAD(&capture.buffer_list);
111 // LIST_ADD(&b_1.link, &capture.pending_buffer_list);
112 // LIST_ADD(&b_2.link, &capture.pending_buffer_list);
114 // capture.private_display = &private_display;
115 // private_display.func_capture.capture_commit = capture_commit;
116 // CAPTURE_COMMIT_ERROR = 1;
117 // capture.private_output = &private_output;
118 // private_output.current_dpms_value = TDM_OUTPUT_DPMS_ON;
120 // error = tdm_capture_commit(&capture);
122 // ASSERT_NE(error, TDM_ERROR_NONE);
123 // ASSERT_EQ(LIST_LENGTH(&capture.buffer_list), 0);
124 // ASSERT_EQ(stub_tdm_buffer_remove_release_handler_internal_count, 2);
125 // ASSERT_EQ(stub_tdm_buffer_unref_backend_count, 2);
128 TEST(tdm_capture_commit, work_flow_success_2)
130 tdm_error error = TDM_ERROR_NONE;
131 tdm_error expected_error = TDM_ERROR_NOT_IMPLEMENTED;
132 struct _tdm_private_capture capture;
133 struct _tdm_private_display private_display;
134 tdm_private_output private_output;
138 LIST_INITHEAD(&capture.pending_buffer_list);
140 capture.private_display = &private_display;
141 private_display.func_capture.capture_commit = NULL;
142 capture.private_output = &private_output;
143 private_output.current_dpms_value = TDM_OUTPUT_DPMS_ON;
145 error = tdm_capture_commit(&capture);
147 ASSERT_EQ(error, expected_error);
150 TEST(tdm_capture_commit, work_flow_success_1)
152 tdm_error error = TDM_ERROR_NONE;
153 tdm_error expected_error = TDM_ERROR_BAD_REQUEST;
154 struct _tdm_private_capture capture;
155 struct _tdm_private_display private_display;
156 tdm_private_output private_output;
160 LIST_INITHEAD(&capture.pending_buffer_list);
162 capture.private_display = &private_display;
163 private_display.func_capture.capture_commit = NULL;
164 capture.private_output = &private_output;
165 private_output.current_dpms_value = TDM_OUTPUT_DPMS_OFF;
167 error = tdm_capture_commit(&capture);
169 ASSERT_EQ(error, expected_error);
172 TEST(tdm_capture_commit, null_ptr_fail_1)
174 tdm_error error = TDM_ERROR_NONE;
175 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
179 error = tdm_capture_commit(NULL);
181 ASSERT_EQ(error, expected_error);
184 /* tdm_capture_set_info */
186 TEST(tdm_capture_set_info, error_capture_set_info_is_null)
188 tdm_info_capture info;
190 struct _tdm_private_capture capture;
191 struct _tdm_private_display private_display;
195 capture.private_display = &private_display;
196 private_display.func_capture.capture_set_info = NULL;
198 error = tdm_capture_set_info(&capture, &info);
200 ASSERT_EQ(error, TDM_ERROR_NOT_IMPLEMENTED);
203 TEST(tdm_capture_set_info, work_flow_success_2)
205 tdm_info_capture info;
206 tdm_error error = TDM_ERROR_OPERATION_FAILED;
207 struct _tdm_private_capture capture;
208 struct _tdm_private_display private_display;
209 tdm_error expected_error = TDM_ERROR_NONE;
210 tdm_private_output private_output;
211 tdm_output_mode current_mode;
215 capture.private_output = &private_output;
216 private_output.current_mode = ¤t_mode;
217 current_mode.vrefresh = 24;
218 info.type = TDM_CAPTURE_TYPE_STREAM;
221 capture.private_display = &private_display;
222 private_display.func_capture.capture_set_info = capture_set_info;
224 error = tdm_capture_set_info(&capture, &info);
226 ASSERT_EQ(error, expected_error);
227 ASSERT_EQ(info.frequency, current_mode.vrefresh);
230 TEST(tdm_capture_set_info, work_flow_success_1)
232 tdm_info_capture info;
233 tdm_error error = TDM_ERROR_NONE;
234 struct _tdm_private_capture capture;
235 struct _tdm_private_display private_display;
236 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
240 capture.private_display = &private_display;
241 private_display.func_capture.capture_set_info = capture_set_info;
242 CAPTURE_SET_INFO_ERROR = 1;
244 error = tdm_capture_set_info(&capture, &info);
246 ASSERT_EQ(error, expected_error);
249 TEST(tdm_capture_set_info, null_ptr_fail_2)
251 tdm_error error = TDM_ERROR_NONE;
252 struct _tdm_private_capture capture;
253 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
257 error = tdm_capture_set_info(&capture, NULL);
259 ASSERT_EQ(error, expected_error);
262 TEST(tdm_capture_set_info, null_ptr_fail_1)
264 tdm_error error = TDM_ERROR_NONE;
265 tdm_info_capture info;
266 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
270 error = tdm_capture_set_info(NULL, &info);
272 ASSERT_EQ(error, expected_error);
275 /* tdm_capture_create_layer_internal */
277 TEST(tdm_capture_create_layer_internal, work_flow_success_4)
279 tdm_error error = TDM_ERROR_OPERATION_FAILED;
280 struct _tdm_private_layer private_layer;
281 struct _tdm_private_output private_output;
282 struct _tdm_private_display private_display;
283 tdm_private_capture *actual;
284 tdm_private_capture *not_expected = NULL;
285 tdm_error expected_error = TDM_ERROR_NONE;
289 LIST_INITHEAD(&private_layer.capture_list);
290 LIST_INITHEAD(&private_display.capture_list);
292 private_layer.private_output = &private_output;
293 private_output.private_display = &private_display;
294 private_display.func_layer.layer_create_capture = layer_create_capture;
295 private_display.func_capture.capture_destroy = capture_destroy;
296 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
297 private_display.caps_capture.capabilities = TDM_CAPTURE_CAPABILITY_LAYER;
299 actual = tdm_capture_create_layer_internal(&private_layer, &error);
301 ASSERT_EQ(error, expected_error);
302 ASSERT_TRUE(actual != not_expected);
306 TEST(tdm_capture_create_layer_internal, work_flow_success_3)
308 tdm_error error = TDM_ERROR_NONE;
309 struct _tdm_private_layer private_layer;
310 struct _tdm_private_output private_output;
311 struct _tdm_private_display private_display;
312 tdm_private_capture *actual;
313 tdm_private_capture *expected = NULL;
314 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
318 LIST_INITHEAD(&private_layer.capture_list);
319 LIST_INITHEAD(&private_display.capture_list);
321 private_layer.private_output = &private_output;
322 private_output.private_display = &private_display;
323 private_display.func_layer.layer_create_capture = layer_create_capture;
324 private_display.func_capture.capture_destroy = capture_destroy;
325 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
326 private_display.caps_capture.capabilities = TDM_CAPTURE_CAPABILITY_LAYER;
330 actual = tdm_capture_create_layer_internal(&private_layer, &error);
332 ASSERT_EQ(error, expected_error);
333 ASSERT_TRUE(actual == expected);
336 TEST(tdm_capture_create_layer_internal, work_flow_success_2)
338 tdm_error error = TDM_ERROR_NONE;
339 struct _tdm_private_layer private_layer;
340 struct _tdm_private_output private_output;
341 struct _tdm_private_display private_display;
342 tdm_private_capture *actual;
343 tdm_private_capture *expected = NULL;
347 LIST_INITHEAD(&private_layer.capture_list);
348 LIST_INITHEAD(&private_display.capture_list);
350 private_layer.private_output = &private_output;
351 private_output.private_display = &private_display;
352 private_display.func_layer.layer_create_capture = layer_create_capture;
353 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
355 LAYER_CREATE_CAPTURE_ERROR = 1;
357 actual = tdm_capture_create_layer_internal(&private_layer, &error);
359 ASSERT_TRUE(actual == expected);
362 TEST(tdm_capture_create_layer_internal, work_flow_success_1)
364 tdm_error error = TDM_ERROR_NONE;
365 struct _tdm_private_layer private_layer;
366 struct _tdm_private_output private_output;
367 struct _tdm_private_display private_display;
368 tdm_private_capture *actual;
369 tdm_private_capture *expected = NULL;
370 tdm_error expected_error = TDM_ERROR_NO_CAPABILITY;
374 LIST_INITHEAD(&private_layer.capture_list);
375 LIST_INITHEAD(&private_display.capture_list);
377 private_layer.private_output = &private_output;
378 private_output.private_display = &private_display;
379 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
381 actual = tdm_capture_create_layer_internal(&private_layer, &error);
383 ASSERT_EQ(error, expected_error);
384 ASSERT_TRUE(actual == expected);
387 /* tc_tdm_capture_create_output_internal */
389 TEST(tdm_capture_create_output_internal, work_flow_success_5)
391 tdm_error error = TDM_ERROR_OPERATION_FAILED;
392 struct _tdm_private_output private_output;
393 struct _tdm_private_display private_display;
394 tdm_private_capture *actual;
395 tdm_private_capture *not_expected = NULL;
396 tdm_error expected_error = TDM_ERROR_NONE;
397 tdm_private_capture private_capture;
401 LIST_INITHEAD(&private_output.capture_list);
402 LIST_INITHEAD(&private_display.capture_list);
404 private_output.private_display = &private_display;
405 private_display.func_output.output_create_capture = output_create_capture;
406 private_display.func_capture.capture_destroy = capture_destroy;
407 private_display.func_capture.capture_set_done_handler =
408 capture_set_done_handler;
409 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
410 private_display.caps_capture.capabilities = TDM_CAPTURE_CAPABILITY_OUTPUT;
412 private_capture.stamp = stub_tdm_helper_get_time_ret_val;
414 LIST_ADD(&private_capture.display_link, &private_display.capture_list);
416 actual = tdm_capture_create_output_internal(&private_output, &error);
418 ASSERT_EQ(error, expected_error);
419 ASSERT_TRUE(actual != not_expected);
423 TEST(tdm_capture_create_output_internal, work_flow_success_4)
425 tdm_error error = TDM_ERROR_NONE;
426 struct _tdm_private_output private_output;
427 struct _tdm_private_display private_display;
428 tdm_private_capture *actual;
429 tdm_private_capture *expected = NULL;
430 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
434 LIST_INITHEAD(&private_output.capture_list);
435 LIST_INITHEAD(&private_display.capture_list);
437 private_output.private_display = &private_display;
438 private_display.func_output.output_create_capture = output_create_capture;
439 private_display.func_capture.capture_destroy = capture_destroy;
440 private_display.func_capture.capture_set_done_handler = capture_set_done_handler;
441 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
442 private_display.caps_capture.capabilities = TDM_CAPTURE_CAPABILITY_OUTPUT;
443 CAPTURE_SET_DONE_HANDLER_ERROR = 1;
445 actual = tdm_capture_create_output_internal(&private_output, &error);
447 ASSERT_EQ(error, expected_error);
448 ASSERT_TRUE(actual == expected);
451 TEST(tdm_capture_create_output_internal, work_flow_success_3)
453 tdm_error error = TDM_ERROR_NONE;
454 struct _tdm_private_output private_output;
455 struct _tdm_private_display private_display;
456 tdm_private_capture *actual;
457 tdm_private_capture *expected = NULL;
458 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
462 LIST_INITHEAD(&private_output.capture_list);
463 LIST_INITHEAD(&private_display.capture_list);
465 private_output.private_display = &private_display;
466 private_display.func_output.output_create_capture = output_create_capture;
467 private_display.func_capture.capture_destroy = capture_destroy;
468 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
470 private_display.caps_capture.capabilities = TDM_CAPTURE_CAPABILITY_OUTPUT;
472 actual = tdm_capture_create_output_internal(&private_output, &error);
474 ASSERT_EQ(error, expected_error);
475 ASSERT_TRUE(actual == expected);
478 TEST(tdm_capture_create_output_internal, work_flow_success_2)
480 tdm_error error = TDM_ERROR_NONE;
481 struct _tdm_private_output private_output;
482 struct _tdm_private_display private_display;
483 tdm_private_capture *actual;
484 tdm_private_capture *expected = NULL;
485 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
489 LIST_INITHEAD(&private_output.capture_list);
490 LIST_INITHEAD(&private_display.capture_list);
492 private_output.private_display = &private_display;
493 private_display.func_output.output_create_capture = output_create_capture;
494 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
495 private_display.caps_capture.capabilities = TDM_CAPTURE_CAPABILITY_OUTPUT;
496 OUTPUT_CREATE_CAPTURE_ERROR = 1;
498 actual = tdm_capture_create_output_internal(&private_output, &error);
500 ASSERT_EQ(error, expected_error);
501 ASSERT_TRUE(actual == expected);
504 TEST(tdm_capture_create_output_internal, work_flow_success_1)
506 tdm_error error = TDM_ERROR_NONE;
507 struct _tdm_private_output private_output;
508 struct _tdm_private_display private_display;
509 tdm_private_capture *actual;
510 tdm_private_capture *expected = NULL;
511 tdm_error expected_error = TDM_ERROR_NO_CAPABILITY;
515 LIST_INITHEAD(&private_output.capture_list);
516 LIST_INITHEAD(&private_display.capture_list);
518 private_output.private_display = &private_display;
519 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
520 actual = tdm_capture_create_output_internal(&private_output, &error);
522 ASSERT_EQ(error, expected_error);
523 ASSERT_TRUE(actual == expected);
526 TEST(tdm_capture_create_output_internal, TDM_CAPTURE_CAPABILITY_OUTPUT_is_not_set)
528 tdm_error error = TDM_ERROR_NONE;
529 struct _tdm_private_output private_output;
530 struct _tdm_private_display private_display;
531 tdm_private_capture *actual;
532 tdm_private_capture *expected = NULL;
533 tdm_error expected_error = TDM_ERROR_NO_CAPABILITY;
537 LIST_INITHEAD(&private_output.capture_list);
538 LIST_INITHEAD(&private_display.capture_list);
540 private_output.private_display = &private_display;
541 private_display.capabilities = TDM_DISPLAY_CAPABILITY_CAPTURE;
542 private_display.caps_capture.capabilities = TDM_CAPTURE_CAPABILITY_LAYER;
544 actual = tdm_capture_create_output_internal(&private_output, &error);
546 ASSERT_EQ(error, expected_error);
547 ASSERT_TRUE(actual == expected);
550 /* tdm_capture_cb_done() */
552 TEST(tdm_capture_cb_done, success_not_in_display_thread)
554 tdm_private_capture private_capture;
555 struct _tbm_surface buffer;
556 tdm_thread_cb_capture_done *capture_done;
557 tdm_private_display private_display;
561 private_capture.private_display = &private_display;
562 stub_syscall_return_value = 50;
563 private_capture.owner_tid = stub_syscall_return_value + 1;
564 private_capture.stamp = 10.15;
566 tdm_capture_cb_done(&private_capture, &buffer, &private_capture);
568 capture_done = (tdm_thread_cb_capture_done *)stub_tdm_thread_send_cb_buff;
570 ASSERT_EQ(capture_done->base.type, TDM_THREAD_CB_CAPTURE_DONE);
571 ASSERT_EQ(capture_done->base.length, sizeof * capture_done);
572 ASSERT_DOUBLE_EQ(capture_done->capture_stamp, private_capture.stamp);
573 ASSERT_TRUE(capture_done->buffer == &buffer);
574 ASSERT_TRUE(capture_done->user_data == &private_capture);
577 //TEST(tdm_capture_cb_done, success_in_display_thread)
579 // tdm_private_capture private_capture;
580 // struct _tbm_surface buffer;
581 // tdm_thread_cb_capture_done *capture_done;
582 // tdm_private_display private_display;
583 // tdm_capture_private_buffer *capture_buffer_1;
584 // tdm_capture_private_buffer *capture_buffer_2;
588 // capture_buffer_1 = (tdm_capture_private_buffer *)
589 // calloc(1, sizeof * capture_buffer_1);
590 // capture_buffer_2 = (tdm_capture_private_buffer *)
591 // calloc(1, sizeof * capture_buffer_2);
593 // LIST_INITHEAD(&private_capture.buffer_list);
594 // LIST_ADD(&capture_buffer_1->link, &private_capture.buffer_list);
595 // LIST_ADD(&capture_buffer_2->link, &private_capture.buffer_list);
597 // capture_buffer_1->buffer = &buffer;
599 // private_capture.private_display = &private_display;
600 // stub_syscall_return_value = 50;
601 // stub_syscall_reset = 1;
602 // private_capture.owner_tid = stub_syscall_return_value;
603 // private_capture.done_func = stub_tdm_capture_done_handler;
605 // tdm_capture_cb_done(&private_capture, &buffer, &private_capture);
607 // ASSERT_EQ(FREE_CALLED, 1);
608 // ASSERT_EQ(stub_tdm_capture_done_handler_called, 1);
609 // ASSERT_EQ(stub_tdm_buffer_unref_backend_count, 1);
610 // ASSERT_TRUE(!_tdm_capture_find_tbm_buffer(&private_capture.buffer_list, &buffer));
613 /* tdm_capture_find_stamp() */
615 TEST(tdm_capture_find_stamp, success_capture_list_is_empty)
617 tdm_private_capture *capture_ret;
618 tdm_private_display private_display;
622 LIST_INITHEAD(&private_display.capture_list);
624 capture_ret = tdm_capture_find_stamp(&private_display, 0.5);
626 ASSERT_EQ(capture_ret, NULL);
629 TEST(tdm_capture_find_stamp, success)
631 tdm_private_capture *capture_ret;
632 tdm_private_display private_display;
633 double stamp = 54.54;
634 tdm_private_capture capture;
638 capture.stamp = stamp;
640 LIST_INITHEAD(&private_display.capture_list);
641 LIST_ADD(&capture.display_link, &private_display.capture_list);
643 capture_ret = tdm_capture_find_stamp(&private_display, stamp);
645 ASSERT_EQ(capture_ret, &capture);
648 /* tdm_capture_destroy_internal() */
650 //TEST(tdm_capture_destroy_internal, success)
652 // tdm_private_capture *capture;
653 // tdm_private_display private_display;
654 // struct list_head list;
655 // struct list_head dsp_list;
656 // tdm_buffer_info *b1, *b2;
660 // b1 = (tdm_buffer_info *)calloc(1, sizeof * b1);
661 // b2 = (tdm_buffer_info *)calloc(1, sizeof * b2);
663 // capture = (tdm_private_capture *)calloc(1, sizeof * capture);
664 // capture->private_display = &private_display;
666 // private_display.func_capture.capture_destroy = capture_destroy;
668 // LIST_INITHEAD(&list);
669 // LIST_INITHEAD(&dsp_list);
670 // LIST_INITHEAD(&capture->pending_buffer_list);
671 // LIST_INITHEAD(&capture->buffer_list);
673 // LIST_ADD(&capture->link, &list);
674 // LIST_ADD(&capture->display_link, &dsp_list);
675 // LIST_ADD(&b1->link, &capture->pending_buffer_list);
676 // LIST_ADD(&b2->link, &capture->buffer_list);
678 // tdm_capture_destroy_internal(capture);
680 // ASSERT_TRUE(LIST_IS_EMPTY(&list));
681 // ASSERT_TRUE(LIST_IS_EMPTY(&dsp_list));
682 // ASSERT_EQ(stub_tdm_buffer_unref_backend_count, 2);
683 // ASSERT_EQ(FREE_CALLED, 1);
684 // ASSERT_EQ(capture_destroy_is_called, 1);
687 /* tdm_capture_destroy() */
689 //TEST(tdm_capture_destroy, success)
691 // tdm_private_capture *capture;
692 // tdm_private_display private_display;
693 // struct list_head list;
694 // struct list_head dsp_list;
695 // tdm_buffer_info *b1, *b2;
699 // b1 = (tdm_buffer_info *)calloc(1, sizeof * b1);
700 // b2 = (tdm_buffer_info *)calloc(1, sizeof * b2);
702 // capture = (tdm_private_capture *)calloc(1, sizeof * capture);
703 // capture->private_display = &private_display;
705 // private_display.func_capture.capture_destroy = capture_destroy;
707 // LIST_INITHEAD(&list);
708 // LIST_INITHEAD(&dsp_list);
709 // LIST_INITHEAD(&capture->pending_buffer_list);
710 // LIST_INITHEAD(&capture->buffer_list);
712 // LIST_ADD(&capture->link, &list);
713 // LIST_ADD(&capture->display_link, &dsp_list);
714 // LIST_ADD(&b1->link, &capture->pending_buffer_list);
715 // LIST_ADD(&b2->link, &capture->buffer_list);
717 // tdm_capture_destroy(capture);
719 // ASSERT_TRUE(LIST_IS_EMPTY(&list));
720 // ASSERT_TRUE(LIST_IS_EMPTY(&dsp_list));
721 // ASSERT_EQ(stub_tdm_buffer_unref_backend_count, 2);
722 // ASSERT_EQ(FREE_CALLED, 1);
723 // ASSERT_EQ(capture_destroy_is_called, 1);
726 /* tdm_capture_set_done_handler() */
728 TEST(tdm_capture_set_done_handler, error_capture_is_null)
732 error = tdm_capture_set_done_handler(NULL, stub_tdm_capture_done_handler, NULL);
734 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
737 TEST(tdm_capture_set_done_handler, error_func_is_null)
740 tdm_private_capture capture;
742 error = tdm_capture_set_done_handler(&capture, NULL, NULL);
744 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
747 TEST(tdm_capture_set_done_handler, success)
750 tdm_private_capture capture;
753 error = tdm_capture_set_done_handler(&capture, stub_tdm_capture_done_handler, &user_data);
755 ASSERT_EQ(error, TDM_ERROR_NONE);
756 ASSERT_TRUE(capture.done_func == stub_tdm_capture_done_handler);
757 ASSERT_TRUE(capture.done_user_data == &user_data);
760 /* tdm_capture_attach() */
762 TEST(tdm_capture_attach, error_buffer_is_null)
764 tdm_error error = TDM_ERROR_NONE;
765 struct _tdm_private_capture capture;
766 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
770 error = tdm_capture_attach(&capture, NULL);
772 ASSERT_EQ(error, expected_error);
775 TEST(tdm_capture_attach, error_capture_is_null)
777 tdm_error error = TDM_ERROR_NONE;
778 struct _tbm_surface buffer;
782 error = tdm_capture_attach(NULL, &buffer);
784 ASSERT_EQ(error, TDM_ERROR_INVALID_PARAMETER);
787 TEST(tdm_capture_attach, error_func_capture_attach_is_null)
789 tdm_error error = TDM_ERROR_NONE;
790 struct _tdm_private_capture capture;
791 struct _tbm_surface buffer;
792 tdm_private_display dsp;
796 capture.private_display = &dsp;
797 dsp.func_capture.capture_attach = NULL;
799 error = tdm_capture_attach(&capture, &buffer);
801 ASSERT_EQ(error, TDM_ERROR_NOT_IMPLEMENTED);
804 TEST(tdm_capture_attach, error_length_of_pending_buffer_list_ge_max_attach_count)
806 tdm_error error = TDM_ERROR_NONE;
807 struct _tdm_private_capture capture;
808 struct _tbm_surface buffer;
809 tdm_private_display dsp;
810 tdm_backend_module module;
811 tdm_capture_private_buffer b1, b2;
815 capture.private_display = &dsp;
816 dsp.func_capture.capture_attach = capture_attach;
818 dsp.module_data = &module;
819 module.abi_version = 0x000100002;
821 LIST_INITHEAD(&capture.pending_buffer_list);
822 LIST_INITHEAD(&capture.buffer_list);
823 LIST_ADD(&b1.link, &capture.pending_buffer_list);
824 LIST_ADD(&b2.link, &capture.pending_buffer_list);
826 dsp.caps_capture.max_attach_count = 1;
828 error = tdm_capture_attach(&capture, &buffer);
830 ASSERT_EQ(error, TDM_ERROR_BAD_REQUEST);
833 TEST(tdm_capture_attach, error_calloc)
835 tdm_error error = TDM_ERROR_NONE;
836 struct _tdm_private_capture capture;
837 struct _tbm_surface buffer;
838 tdm_private_display dsp;
839 tdm_backend_module module;
843 capture.private_display = &dsp;
844 dsp.func_capture.capture_attach = capture_attach;
846 dsp.module_data = &module;
847 module.abi_version = 0x000100002;
849 LIST_INITHEAD(&capture.pending_buffer_list);
850 LIST_INITHEAD(&capture.buffer_list);
852 dsp.caps_capture.max_attach_count = 3;
856 error = tdm_capture_attach(&capture, &buffer);
858 ASSERT_EQ(error, TDM_ERROR_OUT_OF_MEMORY);
861 TEST(tdm_capture_attach, error_capture_attach)
863 tdm_error error = TDM_ERROR_NONE;
864 struct _tdm_private_capture capture;
865 struct _tbm_surface buffer;
866 tdm_private_display dsp;
867 tdm_backend_module module;
871 capture.private_display = &dsp;
872 dsp.func_capture.capture_attach = capture_attach;
874 dsp.module_data = &module;
875 module.abi_version = 0x000100002;
877 LIST_INITHEAD(&capture.pending_buffer_list);
878 LIST_INITHEAD(&capture.buffer_list);
880 dsp.caps_capture.max_attach_count = 3;
882 CAPTURE_ATTACH_ERROR = 1;
884 error = tdm_capture_attach(&capture, &buffer);
886 ASSERT_NE(error, TDM_ERROR_NONE);
889 TEST(tdm_capture_attach, success)
891 tdm_error error = TDM_ERROR_NONE;
892 struct _tdm_private_capture capture;
893 struct _tbm_surface buffer;
894 tdm_private_display dsp;
895 tdm_backend_module module;
896 tdm_capture_private_buffer *capture_buffer;
900 capture.private_display = &dsp;
901 dsp.func_capture.capture_attach = capture_attach;
903 dsp.module_data = &module;
904 module.abi_version = 0x000100002;
906 LIST_INITHEAD(&capture.pending_buffer_list);
907 LIST_INITHEAD(&capture.buffer_list);
909 dsp.caps_capture.max_attach_count = 3;
911 error = tdm_capture_attach(&capture, &buffer);
913 ASSERT_EQ(error, TDM_ERROR_NONE);
914 ASSERT_TRUE(!LIST_IS_EMPTY(&capture.pending_buffer_list));
915 free(container_of(capture.pending_buffer_list.next, capture_buffer, link));