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_tdm_helper.h"
35 #include "stub_backend.h"
36 #include "stub_tdm_buffer.h"
37 #include "stub_unistd.h"
38 #include "stub_tdm_thread.h"
39 #include "stub_tdm_helper.h"
40 #include "stub_tdm_buffer.h"
44 //local stubs for callbeck functions
45 static int stub_pp_destroy_is_called = 0;
46 static int stub_tdm_pp_done_handler_is_called;
48 static void stub_pp_destroy(tdm_pp *pp)
52 stub_pp_destroy_is_called = 1;
55 static int stub_pp_set_done_handler_is_called = 0;
56 static int stub_pp_set_done_handler_error = 0;
57 static tdm_error stub_pp_set_done_handler(tdm_pp *pp, tdm_pp_done_handler func,
64 if (stub_pp_set_done_handler_error)
65 return TDM_ERROR_OPERATION_FAILED;
67 stub_pp_set_done_handler_is_called = 1;
68 return TDM_ERROR_NONE;
71 static int stub_display_create_pp_is_called = 0;
72 static int stub_display_create_pp_error = 0;
73 static tdm_pp *stub_display_create_pp(tdm_backend_data *bdata, tdm_error *error)
77 if (stub_display_create_pp_error) {
79 *error = TDM_ERROR_OPERATION_FAILED;
82 stub_display_create_pp_is_called = 1;
83 static int backend_pp;
87 static int stub_pp_attach_is_called = 0;
88 static int stub_pp_attach_error = 0;
89 tdm_error stub_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst)
95 if (stub_pp_attach_error)
96 return TDM_ERROR_OPERATION_FAILED;
98 stub_pp_attach_is_called = 1;
99 return TDM_ERROR_NONE;
102 static void stub_tdm_pp_done_handler(tdm_pp *pp, tbm_surface_h src,
103 tbm_surface_h dst, void *user_data)
110 stub_tdm_pp_done_handler_is_called = 1;
113 static void _init_test()
115 stub_tdm_buffer_init();
116 stub_tdm_helper_init();
117 stub_tdm_buffer_init();
118 stub_tdm_thread_init();
124 stub_pp_destroy_is_called = 0;
125 stub_pp_set_done_handler_is_called = 0;
126 stub_pp_set_done_handler_error = 0;
127 stub_display_create_pp_is_called = 0;
128 stub_pp_attach_is_called = 0;
129 stub_pp_attach_error = 0;
130 stub_tdm_pp_done_handler_is_called = 0;
131 stub_display_create_pp_error = 0;
132 tdm_debug_dump = TDM_DUMP_FLAG_PP;
133 tdm_debug_module = TDM_DEBUG_BUFFER;
140 TEST(tdm_pp_commit, work_flow_success_3)
142 tdm_error error = TDM_ERROR_OPERATION_FAILED;
144 tdm_private_display private_display;
145 tdm_pp_private_buffer b_1, b_2;
149 pp.private_display = &private_display;
150 private_display.func_pp.pp_commit = pp_commit;
152 LIST_INITHEAD(&pp.pending_buffer_list);
153 LIST_INITHEAD(&pp.buffer_list);
155 LIST_ADD(&b_1.link, &pp.pending_buffer_list);
156 LIST_ADD(&b_2.link, &pp.pending_buffer_list);
159 error = tdm_pp_commit(&pp);
161 ASSERT_EQ(error, TDM_ERROR_NONE);
162 ASSERT_EQ(LIST_LENGTH(&pp.buffer_list), 2);
165 //TEST(tdm_pp_commit, work_flow_success_2)
167 // tdm_error error = TDM_ERROR_NONE;
168 // tdm_error not_expected_error = TDM_ERROR_NONE;
169 // tdm_private_pp pp;
170 // tdm_private_display private_display;
171 // tdm_pp_private_buffer b_1, b_2;
175 // pp.private_display = &private_display;
176 // private_display.func_pp.pp_commit = pp_commit;
177 // PP_COMMIT_ERROR = 1;
179 // LIST_INITHEAD(&pp.pending_buffer_list);
180 // LIST_INITHEAD(&pp.buffer_list);
182 // LIST_ADD(&b_1.link, &pp.pending_buffer_list);
183 // LIST_ADD(&b_2.link, &pp.pending_buffer_list);
185 // error = tdm_pp_commit(&pp);
187 // ASSERT_NE(error, not_expected_error);
188 // ASSERT_EQ(LIST_LENGTH(&pp.buffer_list), 0);
189 // ASSERT_EQ(stub_tdm_buffer_remove_release_handler_internal_count, 4);
190 // ASSERT_EQ(stub_tdm_buffer_unref_backend_count, 4);
193 TEST(tdm_pp_commit, work_flow_success_1)
195 tdm_error error = TDM_ERROR_NONE;
196 tdm_error expected_error = TDM_ERROR_NOT_IMPLEMENTED;
198 tdm_private_display private_display;
202 pp.private_display = &private_display;
203 private_display.func_pp.pp_commit = NULL;
205 error = tdm_pp_commit(&pp);
207 ASSERT_EQ(error, expected_error);
210 TEST(tdm_pp_commit, null_ptr_fail_1)
212 tdm_error error = TDM_ERROR_NONE;
213 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
217 error = tdm_pp_commit(NULL);
219 ASSERT_EQ(error, expected_error);
224 TEST(tdm_pp_attach, error_pp_attach)
226 tdm_error error = TDM_ERROR_NONE;
227 tdm_private_pp private_pp;
228 tdm_private_display private_display;
229 tdm_backend_module module;
230 struct _tbm_surface src;
231 struct _tbm_surface dst;
235 LIST_INITHEAD(&private_display.pp_list);
236 LIST_ADDTAIL(&private_pp.link, &private_display.pp_list);
237 private_display.module_data = &module;
238 private_display.func_pp.pp_attach = stub_pp_attach;
239 private_display.caps_pp.max_attach_count = 3;
240 module.abi_version = 0x00010002;
242 private_pp.private_display = &private_display;
243 LIST_INITHEAD(&private_pp.pending_buffer_list);
244 LIST_INITHEAD(&private_pp.buffer_list);
246 stub_pp_attach_error = 1;
248 error = tdm_pp_attach(&private_pp, &src, &dst);
250 ASSERT_NE(TDM_ERROR_NONE, error);
253 TEST(tdm_pp_attach, error_calloc_error)
255 tdm_error error = TDM_ERROR_NONE;
256 tdm_private_pp private_pp;
257 tdm_private_display private_display;
258 tdm_backend_module module;
259 struct _tbm_surface src;
260 struct _tbm_surface dst;
264 LIST_INITHEAD(&private_display.pp_list);
265 LIST_ADDTAIL(&private_pp.link, &private_display.pp_list);
266 private_display.module_data = &module;
267 private_display.func_pp.pp_attach = stub_pp_attach;
268 private_display.caps_pp.max_attach_count = 3;
269 module.abi_version = 0x00010002;
271 private_pp.private_display = &private_display;
272 LIST_INITHEAD(&private_pp.pending_buffer_list);
273 LIST_INITHEAD(&private_pp.buffer_list);
277 error = tdm_pp_attach(&private_pp, &src, &dst);
279 ASSERT_EQ(TDM_ERROR_OUT_OF_MEMORY, error);
282 TEST(tdm_pp_attach, error_bad_request)
284 tdm_error error = TDM_ERROR_NONE;
285 tdm_private_pp private_pp;
286 tdm_private_display private_display;
287 tdm_backend_module module;
288 struct _tbm_surface src;
289 struct _tbm_surface dst;
290 tdm_pp_private_buffer pp_buffer_1;
291 tdm_pp_private_buffer pp_buffer_2;
295 LIST_INITHEAD(&private_display.pp_list);
296 LIST_ADDTAIL(&private_pp.link, &private_display.pp_list);
297 private_display.module_data = &module;
298 private_display.func_pp.pp_attach = stub_pp_attach;
299 private_display.caps_pp.max_attach_count = 1;
300 module.abi_version = 0x00010002;
302 private_pp.private_display = &private_display;
303 LIST_INITHEAD(&private_pp.pending_buffer_list);
304 LIST_INITHEAD(&private_pp.buffer_list);
306 LIST_ADD(&pp_buffer_1.link, &private_pp.pending_buffer_list);
307 LIST_ADD(&pp_buffer_2.link, &private_pp.pending_buffer_list);
309 error = tdm_pp_attach(&private_pp, &src, &dst);
311 ASSERT_EQ(TDM_ERROR_BAD_REQUEST, error);
314 TEST(tdm_pp_attach, error_pp_attach_is_not_implemented)
316 tdm_error error = TDM_ERROR_NONE;
317 tdm_private_pp private_pp;
318 tdm_private_display private_display;
319 struct _tbm_surface src;
320 struct _tbm_surface dst;
324 private_display.func_pp.pp_attach = NULL;
326 private_pp.private_display = &private_display;
328 error = tdm_pp_attach(&private_pp, &src, &dst);
330 ASSERT_EQ(TDM_ERROR_NOT_IMPLEMENTED, error);
333 TEST(tdm_pp_attach, work_flow_success_1)
335 tdm_error error = TDM_ERROR_NONE;
336 tdm_private_pp private_pp;
337 tdm_private_display private_display;
338 tdm_backend_module module;
339 struct _tbm_surface src;
340 struct _tbm_surface dst;
344 LIST_INITHEAD(&private_display.pp_list);
345 LIST_ADDTAIL(&private_pp.link, &private_display.pp_list);
346 private_display.module_data = &module;
347 private_display.func_pp.pp_attach = stub_pp_attach;
348 private_display.caps_pp.max_attach_count = 3;
349 module.abi_version = 0x00010002;
351 private_pp.private_display = &private_display;
352 LIST_INITHEAD(&private_pp.pending_buffer_list);
353 LIST_INITHEAD(&private_pp.buffer_list);
354 tdm_debug_dump = TDM_DUMP_FLAG_PP;
355 tdm_debug_module = TDM_DEBUG_BUFFER;
357 error = tdm_pp_attach(&private_pp, &src, &dst);
359 ASSERT_EQ(TDM_ERROR_NONE, error);
360 int num_of_pp_buff = LIST_LENGTH(&private_pp.pending_buffer_list);
361 ASSERT_EQ(1, num_of_pp_buff);
364 TEST(tdm_pp_attach, null_ptr_fail_3)
366 tdm_error error = TDM_ERROR_NONE;
367 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
369 tdm_private_display private_display;
370 struct _tbm_surface src;
374 pp.private_display = &private_display;
376 error = tdm_pp_attach(&pp, &src, NULL);
378 ASSERT_EQ(error, expected_error);
381 TEST(tdm_pp_attach, null_ptr_fail_2)
383 tdm_error error = TDM_ERROR_NONE;
384 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
386 tdm_private_display private_display;
387 struct _tbm_surface dst;
391 pp.private_display = &private_display;
393 error = tdm_pp_attach(&pp, NULL, &dst);
395 ASSERT_EQ(error, expected_error);
398 TEST(tdm_pp_attach, null_ptr_fail_1)
400 tdm_error error = TDM_ERROR_NONE;
401 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
402 struct _tbm_surface src;
403 struct _tbm_surface dst;
407 error = tdm_pp_attach(NULL, &src, &dst);
409 ASSERT_EQ(error, expected_error);
412 /* tdm_pp_set_info */
414 TEST(tdm_pp_set_info, work_flow_success_3)
416 tdm_error error = TDM_ERROR_OPERATION_FAILED;
417 tdm_error expected_error = TDM_ERROR_NONE;
420 tdm_private_display private_display;
424 pp.private_display = &private_display;
425 private_display.func_pp.pp_set_info = pp_set_info;
427 error = tdm_pp_set_info(&pp, &info);
429 ASSERT_EQ(error, expected_error);
432 TEST(tdm_pp_set_info, work_flow_success_2)
434 tdm_error error = TDM_ERROR_NONE;
435 tdm_error not_expected_error = TDM_ERROR_NONE;
438 tdm_private_display private_display;
442 pp.private_display = &private_display;
443 private_display.func_pp.pp_set_info = pp_set_info;
444 PP_SET_INFO_ERROR = 1;
446 error = tdm_pp_set_info(&pp, &info);
448 ASSERT_NE(error, not_expected_error);
451 TEST(tdm_pp_set_info, work_flow_success_1)
453 tdm_error error = TDM_ERROR_NONE;
454 tdm_error expected_error = TDM_ERROR_NOT_IMPLEMENTED;
457 tdm_private_display private_display;
461 pp.private_display = &private_display;
462 private_display.func_pp.pp_set_info = NULL;
464 error = tdm_pp_set_info(&pp, &info);
466 ASSERT_EQ(error, expected_error);
469 TEST(tdm_pp_set_info, null_ptr_fail_2)
471 tdm_error error = TDM_ERROR_NONE;
472 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
474 tdm_private_display private_display;
478 pp.private_display = &private_display;
480 error = tdm_pp_set_info(&pp, NULL);
482 ASSERT_EQ(error, expected_error);
485 TEST(tdm_pp_set_info, null_ptr_fail_1)
487 tdm_error error = TDM_ERROR_NONE;
488 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
493 error = tdm_pp_set_info(NULL, &info);
495 ASSERT_EQ(error, expected_error);
498 TEST(tdm_pp_set_done_handler, work_flow_success_1)
502 tdm_private_display private_display;
507 pp.private_display = &private_display;
508 private_display.func_pp.pp_set_info = NULL;
510 error = tdm_pp_set_done_handler(&pp, stub_tdm_pp_done_handler, &user_data);
511 ASSERT_EQ(TDM_ERROR_NONE, error);
512 ASSERT_EQ(stub_tdm_pp_done_handler, pp.done_func);
513 ASSERT_EQ(&user_data, pp.done_user_data);
515 error = tdm_pp_set_done_handler(&pp, stub_tdm_pp_done_handler, NULL);
516 ASSERT_EQ(TDM_ERROR_NONE, error);
517 ASSERT_EQ(TDM_ERROR_NONE, error);
518 ASSERT_EQ(stub_tdm_pp_done_handler, pp.done_func);
519 ASSERT_EQ(0, pp.done_user_data);
522 TEST(tdm_pp_set_done_handler, work_flow_error_1___NULL)
526 tdm_private_display private_display;
530 pp.private_display = &private_display;
531 private_display.func_pp.pp_set_info = NULL;
533 error = tdm_pp_set_done_handler(&pp, NULL, NULL);
534 ASSERT_NE(TDM_ERROR_NONE, error);
536 error = tdm_pp_set_done_handler(NULL, stub_tdm_pp_done_handler, NULL);
537 ASSERT_NE(TDM_ERROR_NONE, error);
540 TEST(tdm_pp_destroy, work_flow_success_1)
542 tdm_private_pp *private_pp;
543 tdm_pp_private_buffer *pp_buffer1;
544 tdm_pp_private_buffer *pp_buffer2;
545 tdm_private_display private_display;
546 private_pp = (tdm_private_pp *)calloc(1, sizeof(tdm_private_pp));
547 pp_buffer1 = (tdm_pp_private_buffer *)calloc(1, sizeof *pp_buffer1);
548 pp_buffer2 = (tdm_pp_private_buffer *)calloc(1, sizeof *pp_buffer2);
550 private_display.func_pp.pp_destroy = stub_pp_destroy;
553 LIST_INITHEAD(&private_display.pp_list);
554 private_display.func_pp.pp_destroy = stub_pp_destroy;
555 LIST_ADDTAIL(&private_pp->link, &private_display.pp_list);
558 private_pp->private_display = &private_display;
559 LIST_INITHEAD(&private_pp->pending_buffer_list);
560 LIST_ADDTAIL(&pp_buffer1->link, &private_pp->pending_buffer_list);
562 LIST_INITHEAD(&private_pp->buffer_list);
563 LIST_ADDTAIL(&pp_buffer2->link, &private_pp->buffer_list);
565 tdm_pp_destroy(private_pp);
567 ASSERT_EQ(4, stub_tdm_buffer_unref_backend_count);
568 ASSERT_EQ(3, stub_free_call_count);
569 ASSERT_TRUE(stub_pp_destroy_is_called);
572 TEST(tdm_pp_destroy, work_flow_error_1___NULL)
574 tdm_pp_destroy(NULL);
577 /* tdm_pp_create_internal() */
579 TEST(tdm_pp_create_internal, work_flow_success_1)
582 tdm_private_display private_display;
583 tdm_private_pp *private_pp_ret;
584 tdm_private_pp private_pp;
588 stub_tdm_helper_get_time_ret_val = 1.1;
590 private_display.func_pp.pp_destroy = stub_pp_destroy;
591 private_display.func_pp.pp_set_done_handler = stub_pp_set_done_handler;
592 private_display.func_display.display_create_pp = stub_display_create_pp;
593 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
594 LIST_INITHEAD(&private_display.pp_list);
596 private_pp.stamp = stub_tdm_helper_get_time_ret_val;
598 LIST_ADD(&private_pp.link, &private_display.pp_list);
600 private_pp_ret = tdm_pp_create_internal(&private_display, &error);
602 ASSERT_EQ(TDM_ERROR_NONE, error);
603 ASSERT_TRUE(stub_pp_set_done_handler_is_called);
604 ASSERT_TRUE(stub_display_create_pp_is_called);
605 ASSERT_TRUE(private_pp_ret != NULL);
608 TEST(tdm_pp_create_internal, work_flow_error_1___TDM_DISPLAY_CAPABILITY_PP_is_not_set)
611 tdm_private_display private_display;
612 tdm_private_pp *private_pp;
616 private_display.func_pp.pp_destroy = stub_pp_destroy;
617 private_display.func_pp.pp_set_done_handler = stub_pp_set_done_handler;
618 private_display.func_display.display_create_pp = stub_display_create_pp;
619 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
620 LIST_INITHEAD(&private_display.pp_list);
623 private_display.capabilities = (tdm_display_capability)0;
625 private_pp = tdm_pp_create_internal(&private_display, &error);
626 ASSERT_NE(TDM_ERROR_NONE, error);
627 ASSERT_TRUE(private_pp == NULL);
630 TEST(tdm_pp_create_internal, work_flow_error_1___calloc_error)
633 tdm_private_display private_display;
634 tdm_private_pp *private_pp;
638 private_display.func_pp.pp_destroy = stub_pp_destroy;
639 private_display.func_pp.pp_set_done_handler = stub_pp_set_done_handler;
640 private_display.func_display.display_create_pp = stub_display_create_pp;
641 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
642 LIST_INITHEAD(&private_display.pp_list);
646 private_pp = tdm_pp_create_internal(&private_display, &error);
647 ASSERT_NE(TDM_ERROR_NONE, error);
648 ASSERT_TRUE(private_pp == NULL);
651 TEST(tdm_pp_create_internal, work_flow_error_1___create_pp_error)
654 tdm_private_display private_display;
655 tdm_private_pp *private_pp;
659 stub_display_create_pp_error = 1;
660 private_display.func_display.display_create_pp = stub_display_create_pp;
661 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
663 private_pp = tdm_pp_create_internal(&private_display, &error);
664 ASSERT_NE(TDM_ERROR_NONE, error);
665 ASSERT_TRUE(private_pp == NULL);
668 TEST(tdm_pp_create_internal, work_flow_error_1___set_done_handler_error)
671 tdm_private_display private_display;
672 tdm_private_pp *private_pp;
676 stub_pp_set_done_handler_error = 1;
678 private_display.func_pp.pp_destroy = stub_pp_destroy;
679 private_display.func_pp.pp_set_done_handler = stub_pp_set_done_handler;
680 private_display.func_display.display_create_pp = stub_display_create_pp;
681 private_display.capabilities = TDM_DISPLAY_CAPABILITY_PP;
682 LIST_INITHEAD(&private_display.pp_list);
684 private_pp = tdm_pp_create_internal(&private_display, &error);
685 ASSERT_NE(TDM_ERROR_NONE, error);
686 ASSERT_TRUE(private_pp == NULL);
689 /* tdm_pp_cb_done() */
691 TEST(tdm_pp_cb_done, success_not_in_display_thread)
693 tdm_private_pp private_pp;
694 struct _tbm_surface src, dst;
695 tdm_thread_cb_pp_done *pp_done;
699 stub_syscall_return_value = 100;
700 private_pp.owner_tid = stub_syscall_return_value + 1;
701 private_pp.stamp = 200.05;
703 tdm_pp_cb_done(&private_pp, &src, &dst, &private_pp);
705 pp_done = (tdm_thread_cb_pp_done *)stub_tdm_thread_send_cb_buff;
707 ASSERT_EQ(pp_done->base.type, TDM_THREAD_CB_PP_DONE);
708 ASSERT_EQ(pp_done->base.length, sizeof * pp_done);
709 ASSERT_DOUBLE_EQ(pp_done->pp_stamp, private_pp.stamp);
710 ASSERT_TRUE(pp_done->src == &src);
711 ASSERT_TRUE(pp_done->dst == &dst);
712 ASSERT_TRUE(pp_done->user_data == &private_pp);
715 //TEST(tdm_pp_cb_done, success_in_display_thread)
717 // tdm_private_pp private_pp;
718 // struct _tbm_surface src, dst;
719 // tdm_pp_private_buffer *pp_buffer_1;
720 // tdm_pp_private_buffer *pp_buffer_2;
724 // stub_syscall_return_value = 100;
725 // stub_syscall_reset = 1;
726 // private_pp.owner_tid = stub_syscall_return_value;
728 // pp_buffer_1 = (tdm_pp_private_buffer *)calloc(1, sizeof (tdm_pp_private_buffer));
729 // pp_buffer_2 = (tdm_pp_private_buffer *)calloc(1, sizeof (tdm_pp_private_buffer));
730 // pp_buffer_1->src = &src;
731 // pp_buffer_1->dst = &dst;
732 // private_pp.done_func = stub_tdm_pp_done_handler;
734 // LIST_INITHEAD(&private_pp.buffer_list);
735 // LIST_ADD(&pp_buffer_1->link, &private_pp.buffer_list);
736 // LIST_ADD(&pp_buffer_2->link, &private_pp.buffer_list);
738 // tdm_pp_cb_done(&private_pp, &src, &dst, &private_pp);
740 // ASSERT_EQ(stub_tdm_buffer_unref_backend_count, 2);
741 // ASSERT_EQ(FREE_CALLED, 1);
742 // ASSERT_EQ(stub_tdm_pp_done_handler_is_called, 1);
743 // free(pp_buffer_2);
746 /* tdm_pp_find_stamp() */
748 TEST(tdm_pp_find_stamp, success_pp_list_is_empty)
750 tdm_private_pp *private_pp_ret;
751 tdm_private_display private_display;
755 LIST_INITHEAD(&private_display.pp_list);
757 private_pp_ret = tdm_pp_find_stamp(&private_display, 0.5);
759 ASSERT_TRUE(private_pp_ret == NULL);
762 TEST(tdm_pp_find_stamp, success_pp_find_stamp)
764 tdm_private_pp *private_pp_ret;
765 tdm_private_display private_display;
766 tdm_private_pp private_pp;
767 double stamp = 12.25;
771 LIST_INITHEAD(&private_display.pp_list);
772 LIST_ADD(&private_pp.link, &private_display.pp_list);
774 private_pp.stamp = stamp;
776 private_pp_ret = tdm_pp_find_stamp(&private_display, stamp);
778 ASSERT_TRUE(private_pp_ret == &private_pp);