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 typedef struct _tbm_surface_queue tbm_surface_queue_s;
32 typedef struct _tbm_surface tbm_surface_s;
34 #include "pthread_stubs.h"
35 #include "stdlib_stubs.h"
37 #define pthread_mutex_lock ut_pthread_mutex_lock
38 #define pthread_mutex_unlock ut_pthread_mutex_unlock
39 #define pthread_mutex_init ut_pthread_mutex_init
40 #define pthread_cond_signal ut_pthread_cond_signal
41 #define pthread_cond_wait ut_pthread_cond_wait
42 #define calloc ut_calloc
45 #include "tbm_surface_queue.c"
47 /* HELPER FUNCTIONS */
49 static void ut_tbm_surface_queue_notify_cb(tbm_surface_queue_h surface_queue,
52 static tbm_surface_h ut_tbm_surface_alloc_cb(tbm_surface_queue_h surface_queue,
55 static void ut_tbm_surface_free_cb(tbm_surface_queue_h surface_queue,
56 void *data, tbm_surface_h surface) {}
58 static void ut_enqueue(tbm_surface_queue_h queue, queue_node *node) {}
60 static queue_node *ut_dequeue(tbm_surface_queue_h queue)
65 static void ut_release(tbm_surface_queue_h queue, queue_node *node) {}
67 static queue_node *ut_acquire(tbm_surface_queue_h queue)
72 static void _init_test()
74 PTHREAD_MUTEX_INIT_ERROR = 0;
78 FREE_TESTED_PTR = NULL;
79 free_called_for_tested_ptr = 0;
84 /* tbm_surface_queue_sequence_create */
86 TEST(tbm_surface_queue_sequence_create, work_flow_success_6)
88 tbm_surface_queue_h surface_queue = NULL;
89 int queue_size = 1000;
97 surface_queue = tbm_surface_queue_sequence_create(queue_size, width, height,
100 ASSERT_NE(surface_queue, NULL);
101 tbm_surface_queue_s copy_surface_queue = *surface_queue;
102 tbm_queue_default data = *((tbm_queue_default *) surface_queue->impl_data);
103 free(surface_queue->impl_data);
105 ASSERT_EQ(queue_size, data.queue_size);
106 ASSERT_EQ(flags, data.flags);
107 ASSERT_EQ(queue_size, copy_surface_queue.queue_size);
108 ASSERT_EQ(width, copy_surface_queue.width);
109 ASSERT_EQ(height, copy_surface_queue.height);
110 ASSERT_EQ(format, copy_surface_queue.format);
113 TEST(tbm_surface_queue_sequence_create, work_flow_success_5)
115 tbm_surface_queue_h surface_queue = NULL;
116 tbm_surface_queue_h expected_surface_queue = NULL;
117 int queue_size = 1000;
127 surface_queue = tbm_surface_queue_sequence_create(queue_size, width, height,
130 ASSERT_EQ(surface_queue, expected_surface_queue);
133 TEST(tbm_surface_queue_sequence_create, work_flow_success_4)
135 tbm_surface_queue_h surface_queue = NULL;
136 tbm_surface_queue_h expected_surface_queue = NULL;
137 int queue_size = 1000;
145 surface_queue = tbm_surface_queue_sequence_create(queue_size, width, height,
148 ASSERT_EQ(surface_queue, expected_surface_queue);
151 TEST(tbm_surface_queue_sequence_create, work_flow_success_3)
153 tbm_surface_queue_h surface_queue = NULL;
154 tbm_surface_queue_h expected_surface_queue = NULL;
155 int queue_size = 1000;
163 surface_queue = tbm_surface_queue_sequence_create(queue_size, width, height,
166 ASSERT_EQ(surface_queue, expected_surface_queue);
169 TEST(tbm_surface_queue_sequence_create, work_flow_success_2)
171 tbm_surface_queue_h surface_queue = NULL;
172 tbm_surface_queue_h expected_surface_queue = NULL;
173 int queue_size = 1000;
181 surface_queue = tbm_surface_queue_sequence_create(queue_size, width, height,
184 ASSERT_EQ(surface_queue, expected_surface_queue);
187 TEST(tbm_surface_queue_sequence_create, work_flow_success_1)
189 tbm_surface_queue_h surface_queue = NULL;
190 tbm_surface_queue_h expected_surface_queue = NULL;
199 surface_queue = tbm_surface_queue_sequence_create(queue_size, width, height,
202 ASSERT_EQ(surface_queue, expected_surface_queue);
205 /* tbm_surface_queue_create() */
207 TEST(tbm_surface_queue_create, work_flow_success_6)
209 tbm_surface_queue_h surface_queue = NULL;
210 int queue_size = 1000;
218 surface_queue = tbm_surface_queue_create(queue_size, width, height,
221 ASSERT_NE(surface_queue, NULL);
222 tbm_surface_queue_s copy_surface_queue = *surface_queue;
223 tbm_queue_default data = *((tbm_queue_default *) surface_queue->impl_data);
224 free(surface_queue->impl_data);
226 ASSERT_EQ(queue_size, data.queue_size);
227 ASSERT_EQ(flags, data.flags);
228 ASSERT_EQ(queue_size, copy_surface_queue.queue_size);
229 ASSERT_EQ(width, copy_surface_queue.width);
230 ASSERT_EQ(height, copy_surface_queue.height);
231 ASSERT_EQ(format, copy_surface_queue.format);
234 TEST(tbm_surface_queue_create, work_flow_success_5)
236 tbm_surface_queue_h surface_queue = NULL;
237 tbm_surface_queue_h expected_surface_queue = NULL;
238 int queue_size = 1000;
248 surface_queue = tbm_surface_queue_create(queue_size, width, height,
251 ASSERT_EQ(surface_queue, expected_surface_queue);
254 TEST(tbm_surface_queue_create, work_flow_success_4)
256 tbm_surface_queue_h surface_queue = NULL;
257 tbm_surface_queue_h expected_surface_queue = NULL;
258 int queue_size = 1000;
266 surface_queue = tbm_surface_queue_create(queue_size, width, height,
269 ASSERT_EQ(surface_queue, expected_surface_queue);
272 TEST(tbm_surface_queue_create, work_flow_success_3)
274 tbm_surface_queue_h surface_queue = NULL;
275 tbm_surface_queue_h expected_surface_queue = NULL;
276 int queue_size = 1000;
284 surface_queue = tbm_surface_queue_create(queue_size, width, height,
287 ASSERT_EQ(surface_queue, expected_surface_queue);
290 TEST(tbm_surface_queue_create, work_flow_success_2)
292 tbm_surface_queue_h surface_queue = NULL;
293 tbm_surface_queue_h expected_surface_queue = NULL;
294 int queue_size = 1000;
302 surface_queue = tbm_surface_queue_create(queue_size, width, height,
305 ASSERT_EQ(surface_queue, expected_surface_queue);
308 TEST(tbm_surface_queue_create, work_flow_success_1)
310 tbm_surface_queue_h surface_queue = NULL;
311 tbm_surface_queue_h expected_surface_queue = NULL;
320 surface_queue = tbm_surface_queue_create(queue_size, width, height,
323 ASSERT_EQ(surface_queue, expected_surface_queue);
326 /* tbm_surface_queue_flush() */
328 TEST(tbm_surface_queue_flush, work_flow_success_1)
330 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
331 tbm_surface_queue_error_e expected_error =
332 TBM_SURFACE_QUEUE_ERROR_NONE;
333 tbm_surface_queue_s surface_queue;
334 LIST_INITHEAD(&surface_queue.list);
335 LIST_INITHEAD(&surface_queue.reset_noti);
336 surface_queue.impl = NULL;
340 error = tbm_surface_queue_flush(&surface_queue);
342 ASSERT_EQ(error, expected_error);
345 TEST(tbm_surface_queue_flush, null_ptr_fail_1)
347 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
348 tbm_surface_queue_error_e expected_error =
349 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
353 error = tbm_surface_queue_flush(NULL);
355 ASSERT_EQ(error, expected_error);
358 /* tbm_surface_queue_reset() */
360 TEST(tbm_surface_queue_reset, work_flow_success_2)
362 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
363 tbm_surface_queue_error_e expected_error =
364 TBM_SURFACE_QUEUE_ERROR_NONE;
365 tbm_surface_queue_s surface_queue;
366 int width, height, format;
373 surface_queue.width = 1;
374 surface_queue.height = 1;
375 surface_queue.format = 1;
376 LIST_INITHEAD(&surface_queue.list);
377 LIST_INITHEAD(&surface_queue.reset_noti);
378 surface_queue.impl = NULL;
380 error = tbm_surface_queue_reset(&surface_queue, width, height, format);
382 ASSERT_EQ(error, expected_error);
383 ASSERT_EQ(width, surface_queue.width);
384 ASSERT_EQ(height, surface_queue.height);
385 ASSERT_EQ(format, surface_queue.format);
388 TEST(tbm_surface_queue_reset, work_flow_success_1)
390 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
391 tbm_surface_queue_error_e expected_error =
392 TBM_SURFACE_QUEUE_ERROR_NONE;
393 tbm_surface_queue_s surface_queue;
394 int width, height, format;
401 surface_queue.width = width;
402 surface_queue.height = height;
403 surface_queue.format = format;
405 error = tbm_surface_queue_reset(&surface_queue, width, height, format);
407 ASSERT_EQ(error, expected_error);
410 TEST(tbm_surface_queue_reset, null_ptr_fail_1)
412 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
413 tbm_surface_queue_error_e expected_error =
414 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
418 error = tbm_surface_queue_reset(NULL, 0, 0, 0);
420 ASSERT_EQ(error, expected_error);
423 /* tbm_surface_queue_destroy() */
425 TEST(tbm_surface_queue_destroy, work_flow_success_1)
427 tbm_surface_queue_h surface_queue = calloc(1, sizeof(*surface_queue));
428 queue_notify *destory_item1;
429 queue_notify *destory_item2;
430 queue_notify *acquirable_item1;
431 queue_notify *acquirable_item2;
432 queue_notify *dequeuable_item1;
433 queue_notify *dequeuable_item2;
434 queue_notify *reset_item1;
435 queue_notify *reset_item2;
439 surface_queue->impl = NULL;
440 destory_item1 = calloc(1, sizeof(*destory_item1));
441 destory_item2 = calloc(1, sizeof(*destory_item2));
442 acquirable_item1 = calloc(1, sizeof(*acquirable_item1));
443 acquirable_item2 = calloc(1, sizeof(*acquirable_item2));
444 dequeuable_item1 = calloc(1, sizeof(*dequeuable_item1));
445 dequeuable_item2 = calloc(1, sizeof(*dequeuable_item2));
446 reset_item1 = calloc(1, sizeof(*reset_item1));
447 reset_item2 = calloc(1, sizeof(*reset_item2));
448 destory_item1->cb = ut_tbm_surface_queue_notify_cb;
449 destory_item2->cb = ut_tbm_surface_queue_notify_cb;
450 LIST_INITHEAD(&surface_queue->destory_noti);
451 LIST_INITHEAD(&surface_queue->list);
452 LIST_INITHEAD(&surface_queue->acquirable_noti);
453 LIST_INITHEAD(&surface_queue->dequeuable_noti);
454 LIST_INITHEAD(&surface_queue->reset_noti);
455 LIST_ADD(&destory_item1->link, &surface_queue->destory_noti);
456 LIST_ADD(&destory_item2->link, &surface_queue->destory_noti);
457 LIST_ADD(&dequeuable_item1->link, &surface_queue->dequeuable_noti);
458 LIST_ADD(&dequeuable_item2->link, &surface_queue->dequeuable_noti);
459 LIST_ADD(&acquirable_item1->link, &surface_queue->acquirable_noti);
460 LIST_ADD(&acquirable_item2->link, &surface_queue->acquirable_noti);
461 LIST_ADD(&reset_item1->link, &surface_queue->reset_noti);
462 LIST_ADD(&reset_item2->link, &surface_queue->reset_noti);
464 tbm_surface_queue_destroy(surface_queue);
466 ASSERT_GE(free_call_count, 9);
469 /* tbm_surface_queue_can_acquire() */
471 TEST(tbm_surface_queue_can_acquire, work_flow_success_3)
476 tbm_surface_queue_s surface_queue;
481 _queue_init(&surface_queue.dirty_queue);
482 _queue_node_push_back(&surface_queue.dirty_queue, &node);
484 actual = tbm_surface_queue_can_acquire(&surface_queue, wait);
486 ASSERT_EQ(actual, expected);
489 TEST(tbm_surface_queue_can_acquire, work_flow_success_2)
494 tbm_surface_queue_s surface_queue;
498 _queue_init(&surface_queue.dirty_queue);
500 actual = tbm_surface_queue_can_acquire(&surface_queue, wait);
502 ASSERT_EQ(actual, expected);
505 TEST(tbm_surface_queue_can_acquire, work_flow_success_1)
510 tbm_surface_queue_s surface_queue;
514 _queue_init(&surface_queue.dirty_queue);
515 LIST_INITHEAD(&surface_queue.list);
517 actual = tbm_surface_queue_can_acquire(&surface_queue, wait);
519 ASSERT_EQ(actual, expected);
522 TEST(tbm_surface_queue_can_acquire, null_ptr_fail_1)
529 actual = tbm_surface_queue_can_acquire(NULL, 0);
531 ASSERT_EQ(actual, expected);
534 /* tbm_surface_queue_acquire() */
536 TEST(tbm_surface_queue_acquire, work_flow_success_4)
538 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
539 tbm_surface_queue_error_e expected_error =
540 TBM_SURFACE_QUEUE_ERROR_NONE;
541 tbm_surface_s expected_surface;
542 tbm_surface_queue_s surface_queue;
543 tbm_surface_s *surface;
548 surface_queue.impl = NULL;
549 _queue_init(&surface_queue.dirty_queue);
550 node.surface = &expected_surface;
551 _queue_node_push_back(&surface_queue.dirty_queue, &node);
553 error = tbm_surface_queue_acquire(&surface_queue, &surface);
555 ASSERT_EQ(error, expected_error);
556 ASSERT_TRUE(surface == &expected_surface);
559 TEST(tbm_surface_queue_acquire, work_flow_success_3)
561 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
562 tbm_surface_queue_error_e expected_error =
563 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
564 tbm_surface_queue_s surface_queue;
565 tbm_surface_s *surface;
570 surface_queue.impl = NULL;
571 _queue_init(&surface_queue.dirty_queue);
573 _queue_node_push_back(&surface_queue.dirty_queue, &node);
575 error = tbm_surface_queue_acquire(&surface_queue, &surface);
577 ASSERT_EQ(error, expected_error);
580 TEST(tbm_surface_queue_acquire, work_flow_success_2)
582 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
583 tbm_surface_queue_error_e expected_error =
584 TBM_SURFACE_QUEUE_ERROR_EMPTY;
585 tbm_surface_queue_s surface_queue;
586 tbm_surface_s *surface;
590 surface_queue.impl = NULL;
591 _queue_init(&surface_queue.dirty_queue);
593 error = tbm_surface_queue_acquire(&surface_queue, &surface);
595 ASSERT_EQ(error, expected_error);
598 TEST(tbm_surface_queue_acquire, work_flow_success_1)
600 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
601 tbm_surface_queue_error_e expected_error =
602 TBM_SURFACE_QUEUE_ERROR_EMPTY;
603 tbm_surface_queue_s surface_queue;
604 tbm_surface_s *surface;
605 tbm_surface_queue_interface impl;
609 surface_queue.impl = &impl;
610 impl.acquire = ut_acquire;
612 error = tbm_surface_queue_acquire(&surface_queue, &surface);
614 ASSERT_EQ(error, expected_error);
617 TEST(tbm_surface_queue_acquire, null_ptr_fail_2)
619 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
620 tbm_surface_queue_error_e expected_error =
621 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
622 tbm_surface_queue_s surface_queue;
626 error = tbm_surface_queue_acquire(&surface_queue, NULL);
628 ASSERT_EQ(error, expected_error);
631 TEST(tbm_surface_queue_acquire, null_ptr_fail_1)
633 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
634 tbm_surface_queue_error_e expected_error =
635 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
636 tbm_surface_s *surface;
640 error = tbm_surface_queue_acquire(NULL, &surface);
642 ASSERT_EQ(error, expected_error);
646 /* tbm_surface_queue_release() */
648 TEST(tbm_surface_queue_release, work_flow_success_5)
650 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
651 tbm_surface_queue_error_e expected_error =
652 TBM_SURFACE_QUEUE_ERROR_NONE;
653 tbm_surface_queue_s surface_queue;
654 tbm_surface_s surface;
659 _queue_init(&surface_queue.free_queue);
660 _queue_init(&surface_queue.dirty_queue);
661 LIST_INITHEAD(&surface_queue.list);
662 node.surface = &surface;
663 LIST_ADD(&node.link, &surface_queue.list);
664 surface_queue.impl = NULL;
665 LIST_INITHEAD(&surface_queue.dequeuable_noti);
667 error = tbm_surface_queue_release(&surface_queue, &surface);
669 ASSERT_EQ(error, expected_error);
672 TEST(tbm_surface_queue_release, work_flow_success_4)
674 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
675 tbm_surface_queue_error_e expected_error =
676 TBM_SURFACE_QUEUE_ERROR_NONE;
677 tbm_surface_queue_s surface_queue;
678 tbm_surface_s surface;
680 tbm_surface_queue_interface impl;
684 _queue_init(&surface_queue.free_queue);
685 _queue_init(&surface_queue.dirty_queue);
686 LIST_INITHEAD(&surface_queue.list);
687 node.surface = &surface;
688 LIST_ADD(&node.link, &surface_queue.list);
689 surface_queue.impl = &impl;
690 impl.release = &ut_release;
692 error = tbm_surface_queue_release(&surface_queue, &surface);
694 ASSERT_EQ(error, expected_error);
697 TEST(tbm_surface_queue_release, work_flow_success_3)
699 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
700 tbm_surface_queue_error_e expected_error =
701 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
702 tbm_surface_queue_s surface_queue;
703 tbm_surface_s surface;
708 _queue_init(&surface_queue.free_queue);
709 _queue_init(&surface_queue.dirty_queue);
710 LIST_INITHEAD(&surface_queue.list);
711 node.surface = &surface;
712 LIST_ADD(&node.item_link, &surface_queue.dirty_queue.head);
714 error = tbm_surface_queue_release(&surface_queue, &surface);
716 ASSERT_EQ(error, expected_error);
719 TEST(tbm_surface_queue_release, work_flow_success_2)
721 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
722 tbm_surface_queue_error_e expected_error =
723 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
724 tbm_surface_queue_s surface_queue;
725 tbm_surface_s surface;
730 _queue_init(&surface_queue.free_queue);
731 _queue_init(&surface_queue.dirty_queue);
732 LIST_INITHEAD(&surface_queue.list);
733 node.surface = &surface;
734 LIST_ADD(&node.item_link, &surface_queue.free_queue.head);
736 error = tbm_surface_queue_release(&surface_queue, &surface);
738 ASSERT_EQ(error, expected_error);
741 TEST(tbm_surface_queue_release, work_flow_success_1)
743 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
744 tbm_surface_queue_error_e expected_error =
745 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
746 tbm_surface_queue_s surface_queue;
747 tbm_surface_s surface;
751 _queue_init(&surface_queue.free_queue);
752 _queue_init(&surface_queue.dirty_queue);
753 LIST_INITHEAD(&surface_queue.list);
755 error = tbm_surface_queue_release(&surface_queue, &surface);
757 ASSERT_EQ(error, expected_error);
760 TEST(tbm_surface_queue_release, null_ptr_fail_2)
762 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
763 tbm_surface_queue_error_e expected_error =
764 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
765 tbm_surface_queue_s surface_queue;
769 error = tbm_surface_queue_release(&surface_queue, NULL);
771 ASSERT_EQ(error, expected_error);
774 TEST(tbm_surface_queue_release, null_ptr_fail_1)
776 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
777 tbm_surface_queue_error_e expected_error =
778 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
779 tbm_surface_s surface;
783 error = tbm_surface_queue_release(NULL, &surface);
785 ASSERT_EQ(error, expected_error);
789 /* tbm_surface_queue_can_dequeue() */
791 TEST(tbm_surface_queue_can_dequeue, work_flow_success_3)
796 tbm_surface_queue_s surface_queue;
801 LIST_INITHEAD(&surface_queue.free_queue.head);
802 surface_queue.free_queue.count = 0;
803 surface_queue.impl = NULL;
804 LIST_INITHEAD(&surface_queue.free_queue.head);
805 LIST_ADD(&node.item_link, &surface_queue.free_queue.head);
807 actual = tbm_surface_queue_can_dequeue(&surface_queue, wait);
809 ASSERT_EQ(actual, expected);
813 TEST(tbm_surface_queue_can_dequeue, work_flow_success_2)
818 tbm_surface_queue_s surface_queue;
822 LIST_INITHEAD(&surface_queue.free_queue.head);
823 surface_queue.free_queue.count = 0;
824 surface_queue.impl = NULL;
826 actual = tbm_surface_queue_can_dequeue(&surface_queue, wait);
828 ASSERT_EQ(actual, expected);
832 TEST(tbm_surface_queue_can_dequeue, work_flow_success_1)
837 tbm_surface_queue_s surface_queue;
841 LIST_INITHEAD(&surface_queue.free_queue.head);
842 surface_queue.free_queue.count = 0;
843 surface_queue.impl = NULL;
845 actual = tbm_surface_queue_can_dequeue(&surface_queue, wait);
847 ASSERT_EQ(actual, expected);
850 TEST(tbm_surface_queue_can_dequeue, null_ptr_fail_1)
857 actual = tbm_surface_queue_can_dequeue(NULL, 0);
859 ASSERT_EQ(actual, expected);
862 /* tbm_surface_queue_dequeue() */
864 TEST(tbm_surface_queue_dequeue, work_flow_success_3)
866 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
867 tbm_surface_queue_error_e expected_error =
868 TBM_SURFACE_QUEUE_ERROR_NONE;
869 tbm_surface_queue_s surface_queue;
870 tbm_surface_s *surface;
871 tbm_surface_s expected_surface;
876 surface_queue.impl = NULL;
877 node.surface = &expected_surface;
878 LIST_INITHEAD(&surface_queue.free_queue.head);
879 LIST_ADD(&node.item_link, &surface_queue.free_queue.head);
881 error = tbm_surface_queue_dequeue(&surface_queue, &surface);
883 ASSERT_EQ(error, expected_error);
884 ASSERT_TRUE(surface == &expected_surface);
887 TEST(tbm_surface_queue_dequeue, work_flow_success_2)
889 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
890 tbm_surface_queue_error_e expected_error =
891 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
892 tbm_surface_queue_s surface_queue;
893 tbm_surface_s *surface;
898 surface_queue.impl = NULL;
900 LIST_INITHEAD(&surface_queue.free_queue.head);
901 LIST_ADD(&node.item_link, &surface_queue.free_queue.head);
903 error = tbm_surface_queue_dequeue(&surface_queue, &surface);
905 ASSERT_EQ(error, expected_error);
908 TEST(tbm_surface_queue_dequeue, work_flow_success_1)
910 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
911 tbm_surface_queue_error_e expected_error =
912 TBM_SURFACE_QUEUE_ERROR_EMPTY;
913 tbm_surface_queue_s surface_queue;
914 tbm_surface_s *surface;
915 tbm_surface_queue_interface impl;
919 surface_queue.impl = &impl;
920 impl.dequeue = ut_dequeue;
922 error = tbm_surface_queue_dequeue(&surface_queue, &surface);
924 ASSERT_EQ(error, expected_error);
927 TEST(tbm_surface_queue_dequeue, null_ptr_fail_2)
929 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
930 tbm_surface_queue_error_e expected_error =
931 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
932 tbm_surface_queue_s surface_queue;
936 error = tbm_surface_queue_dequeue(&surface_queue, NULL);
938 ASSERT_EQ(error, expected_error);
941 TEST(tbm_surface_queue_dequeue, null_ptr_fail_1)
943 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
944 tbm_surface_queue_error_e expected_error =
945 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
946 tbm_surface_s *surface;
950 error = tbm_surface_queue_dequeue(NULL, &surface);
952 ASSERT_EQ(error, expected_error);
955 /* tbm_surface_queue_enqueue() */
957 TEST(tbm_surface_queue_enqueue, work_flow_success_5)
959 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
960 tbm_surface_queue_error_e expected_error =
961 TBM_SURFACE_QUEUE_ERROR_NONE;
962 tbm_surface_queue_s surface_queue;
963 tbm_surface_s surface;
968 node.surface = &surface;
969 LIST_INITHEAD(&surface_queue.free_queue.head);
970 LIST_INITHEAD(&surface_queue.dirty_queue.head);
971 LIST_INITHEAD(&surface_queue.list);
972 LIST_ADD(&node.link, &surface_queue.list);
973 tbm_surface_queue_interface impl;
974 surface_queue.impl = &impl;
975 impl.enqueue = ut_enqueue;
976 surface_queue.dirty_queue.count = 0;
977 LIST_INITHEAD(&surface_queue.dirty_queue.head);
978 LIST_INITHEAD(&surface_queue.acquirable_noti);
980 error = tbm_surface_queue_enqueue(&surface_queue, &surface);
982 ASSERT_EQ(error, expected_error);
985 TEST(tbm_surface_queue_enqueue, work_flow_success_4)
987 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
988 tbm_surface_queue_error_e expected_error =
989 TBM_SURFACE_QUEUE_ERROR_NONE;
990 tbm_surface_queue_s surface_queue;
991 tbm_surface_s surface;
996 node.surface = &surface;
997 LIST_INITHEAD(&surface_queue.free_queue.head);
998 LIST_INITHEAD(&surface_queue.dirty_queue.head);
999 LIST_INITHEAD(&surface_queue.list);
1000 LIST_ADD(&node.link, &surface_queue.list);
1001 surface_queue.impl = NULL;
1002 surface_queue.dirty_queue.count = 0;
1003 LIST_INITHEAD(&surface_queue.dirty_queue.head);
1004 LIST_INITHEAD(&surface_queue.acquirable_noti);
1006 error = tbm_surface_queue_enqueue(&surface_queue, &surface);
1008 ASSERT_EQ(error, expected_error);
1011 TEST(tbm_surface_queue_enqueue, work_flow_success_3)
1013 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1014 tbm_surface_queue_error_e expected_error =
1015 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
1016 tbm_surface_queue_s surface_queue;
1017 tbm_surface_s surface;
1022 LIST_INITHEAD(&surface_queue.free_queue.head);
1023 LIST_INITHEAD(&surface_queue.dirty_queue.head);
1024 LIST_INITHEAD(&surface_queue.list);
1025 LIST_ADD(&node.item_link, &surface_queue.dirty_queue.head);
1027 error = tbm_surface_queue_enqueue(&surface_queue, &surface);
1029 ASSERT_EQ(error, expected_error);
1032 TEST(tbm_surface_queue_enqueue, work_flow_success_2)
1034 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1035 tbm_surface_queue_error_e expected_error =
1036 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
1037 tbm_surface_queue_s surface_queue;
1038 tbm_surface_s surface;
1043 LIST_INITHEAD(&surface_queue.free_queue.head);
1044 LIST_INITHEAD(&surface_queue.dirty_queue.head);
1045 LIST_INITHEAD(&surface_queue.list);
1046 LIST_ADD(&node.item_link, &surface_queue.free_queue.head);
1048 error = tbm_surface_queue_enqueue(&surface_queue, &surface);
1050 ASSERT_EQ(error, expected_error);
1053 TEST(tbm_surface_queue_enqueue, work_flow_success_1)
1055 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1056 tbm_surface_queue_error_e expected_error =
1057 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
1058 tbm_surface_queue_s surface_queue;
1059 tbm_surface_s surface;
1063 LIST_INITHEAD(&surface_queue.free_queue.head);
1064 LIST_INITHEAD(&surface_queue.dirty_queue.head);
1065 LIST_INITHEAD(&surface_queue.list);
1067 error = tbm_surface_queue_enqueue(&surface_queue, &surface);
1069 ASSERT_EQ(error, expected_error);
1072 TEST(tbm_surface_queue_enqueue, null_ptr_fail_2)
1074 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1075 tbm_surface_queue_error_e expected_error =
1076 TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE;
1077 tbm_surface_queue_s surface_queue;
1081 error = tbm_surface_queue_enqueue(&surface_queue, NULL);
1083 ASSERT_EQ(error, expected_error);
1086 TEST(tbm_surface_queue_enqueue, null_ptr_fail_1)
1088 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1089 tbm_surface_queue_error_e expected_error =
1090 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1091 tbm_surface_s surface;
1095 error = tbm_surface_queue_enqueue(NULL, &surface);
1097 ASSERT_EQ(error, expected_error);
1100 /* tbm_surface_queue_remove_reset_cb() */
1102 TEST(tbm_surface_queue_remove_reset_cb, work_flow_success_1)
1104 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1105 tbm_surface_queue_error_e expected_error =
1106 TBM_SURFACE_QUEUE_ERROR_NONE;
1107 tbm_surface_queue_s surface;
1110 queue_notify *find_item;
1115 item = (queue_notify *)calloc(1, sizeof(queue_notify));
1116 FREE_TESTED_PTR = item;
1118 LIST_INITHEAD(&item->link);
1119 item->cb = ut_tbm_surface_queue_notify_cb;
1122 LIST_INITHEAD(&surface.reset_noti);
1123 LIST_ADDTAIL(&item->link, &surface.reset_noti);
1127 error = tbm_surface_queue_remove_reset_cb(&surface,
1128 ut_tbm_surface_queue_notify_cb,
1131 ASSERT_EQ(error, expected_error);
1132 if (!LIST_IS_EMPTY(&surface.reset_noti)) {
1133 LIST_FOR_EACH_ENTRY_SAFE(find_item, tmp, &surface.reset_noti, link) {
1134 if (find_item->data == &data)
1138 ASSERT_TRUE(find_item == NULL);
1139 ASSERT_EQ(free_called_for_tested_ptr, 1);
1142 TEST(tbm_surface_queue_remove_reset_cb, null_ptr_fail_1)
1144 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1145 tbm_surface_queue_error_e expected_error =
1146 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1150 error = tbm_surface_queue_remove_reset_cb(NULL, NULL, NULL);
1152 ASSERT_EQ(error, expected_error);
1155 /* tbm_surface_queue_add_reset_cb() */
1157 TEST(tbm_surface_queue_add_reset_cb, work_flow_success_1)
1159 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1160 tbm_surface_queue_error_e expected_error =
1161 TBM_SURFACE_QUEUE_ERROR_NONE;
1162 tbm_surface_queue_s surface;
1169 LIST_INITHEAD(&surface.reset_noti);
1171 error = tbm_surface_queue_add_reset_cb(&surface,
1172 ut_tbm_surface_queue_notify_cb,
1175 ASSERT_EQ(error, expected_error);
1176 if (!LIST_IS_EMPTY(&surface.reset_noti)) {
1177 LIST_FOR_EACH_ENTRY_SAFE(item, tmp, &surface.reset_noti, link) {
1178 if (item->data == &data && item->cb == ut_tbm_surface_queue_notify_cb)
1182 ASSERT_TRUE(item != NULL);
1186 TEST(tbm_surface_queue_add_reset_cb, null_ptr_fail_1)
1188 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1189 tbm_surface_queue_error_e expected_error =
1190 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1194 error = tbm_surface_queue_add_reset_cb(NULL, NULL, NULL);
1196 ASSERT_EQ(error, expected_error);
1199 /* tbm_surface_queue_get_size() */
1201 TEST(tbm_surface_queue_get_size, work_flow_success_1)
1204 int expected_size = 1000;
1205 tbm_surface_queue_s surface;
1209 surface.queue_size = expected_size;
1211 size = tbm_surface_queue_get_size(&surface);
1213 ASSERT_EQ(size, expected_size);
1216 TEST(tbm_surface_queue_get_size, null_ptr_fail_1)
1219 int expected_size = 0;
1223 size = tbm_surface_queue_get_size(NULL);
1225 ASSERT_EQ(size, expected_size);
1228 /* tbm_surface_queue_get_format() */
1230 TEST(tbm_surface_queue_get_format, work_flow_success_1)
1233 int expected_format = 20;
1234 tbm_surface_queue_s surface;
1238 surface.format = expected_format;
1240 format = tbm_surface_queue_get_format(&surface);
1242 ASSERT_EQ(format, expected_format);
1245 TEST(tbm_surface_queue_get_format, null_ptr_fail_1)
1248 int expected_format = 0;
1252 format = tbm_surface_queue_get_format(NULL);
1254 ASSERT_EQ(format, expected_format);
1257 /* tbm_surface_queue_get_height() */
1259 TEST(tbm_surface_queue_get_height, work_flow_success_1)
1262 int expected_height = 50;
1263 tbm_surface_queue_s surface;
1267 surface.height = expected_height;
1269 height = tbm_surface_queue_get_height(&surface);
1271 ASSERT_EQ(height, expected_height);
1274 TEST(tbm_surface_queue_get_height, null_ptr_fail_1)
1277 int expected_height = 0;
1281 height = tbm_surface_queue_get_height(NULL);
1283 ASSERT_EQ(height, expected_height);
1286 /* tbm_surface_queue_get_width() */
1288 TEST(tbm_surface_queue_get_width, work_flow_success_1)
1291 int expected_width = 50;
1292 tbm_surface_queue_s surface;
1296 surface.width = expected_width;
1298 width = tbm_surface_queue_get_width(&surface);
1300 ASSERT_EQ(width, expected_width);
1303 TEST(tbm_surface_queue_get_width, null_ptr_fail_1)
1306 int expected_width = 0;
1310 width = tbm_surface_queue_get_width(NULL);
1312 ASSERT_EQ(width, expected_width);
1315 /* tbm_surface_queue_set_alloc_cb() */
1317 TEST(tbm_surface_queue_set_alloc_cb, work_flow_success_1)
1319 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1320 tbm_surface_queue_error_e expected_error =
1321 TBM_SURFACE_QUEUE_ERROR_NONE;
1322 tbm_surface_queue_s surface;
1327 error = tbm_surface_queue_set_alloc_cb(&surface, ut_tbm_surface_alloc_cb,
1328 ut_tbm_surface_free_cb, &data);
1330 ASSERT_EQ(error, expected_error);
1331 ASSERT_TRUE(surface.alloc_cb == ut_tbm_surface_alloc_cb);
1332 ASSERT_TRUE(surface.free_cb == ut_tbm_surface_free_cb);
1333 ASSERT_TRUE(surface.alloc_cb_data == &data);
1336 TEST(tbm_surface_queue_set_alloc_cb, null_ptr_fail_1)
1338 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1339 tbm_surface_queue_error_e expected_error =
1340 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1344 error = tbm_surface_queue_set_alloc_cb(NULL, NULL, NULL, NULL);
1346 ASSERT_EQ(error, expected_error);
1349 /* tbm_surface_queue_remove_acquirable_cb() */
1351 TEST(tbm_surface_queue_remove_acquirable_cb, work_flow_success_1)
1353 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1354 tbm_surface_queue_error_e expected_error =
1355 TBM_SURFACE_QUEUE_ERROR_NONE;
1356 tbm_surface_queue_s surface;
1359 queue_notify *find_item;
1364 item = (queue_notify *)calloc(1, sizeof(queue_notify));
1365 FREE_TESTED_PTR = item;
1367 LIST_INITHEAD(&item->link);
1368 item->cb = ut_tbm_surface_queue_notify_cb;
1371 LIST_INITHEAD(&surface.acquirable_noti);
1372 LIST_ADDTAIL(&item->link, &surface.acquirable_noti);
1376 error = tbm_surface_queue_remove_acquirable_cb(&surface,
1377 ut_tbm_surface_queue_notify_cb,
1380 ASSERT_EQ(error, expected_error);
1381 if (!LIST_IS_EMPTY(&surface.acquirable_noti)) {
1382 LIST_FOR_EACH_ENTRY_SAFE(find_item, tmp, &surface.acquirable_noti, link) {
1383 if (find_item->data == &data)
1387 ASSERT_TRUE(find_item == NULL);
1388 ASSERT_EQ(free_called_for_tested_ptr, 1);
1391 TEST(tbm_surface_queue_remove_acquirable_cb, null_ptr_fail_1)
1393 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1394 tbm_surface_queue_error_e expected_error =
1395 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1399 error = tbm_surface_queue_remove_acquirable_cb(NULL, NULL, NULL);
1401 ASSERT_EQ(error, expected_error);
1404 /* tbm_surface_queue_add_acquirable_cb() */
1406 TEST(tbm_surface_queue_add_acquirable_cb, work_flow_success_1)
1408 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1409 tbm_surface_queue_error_e expected_error =
1410 TBM_SURFACE_QUEUE_ERROR_NONE;
1411 tbm_surface_queue_s surface;
1415 tbm_surface_queue_notify_cb cb;
1416 tbm_surface_queue_notify_cb expected_cb;
1420 LIST_INITHEAD(&surface.acquirable_noti);
1422 error = tbm_surface_queue_add_acquirable_cb(&surface,
1423 ut_tbm_surface_queue_notify_cb,
1426 ASSERT_EQ(error, expected_error);
1427 if (!LIST_IS_EMPTY(&surface.acquirable_noti)) {
1428 LIST_FOR_EACH_ENTRY_SAFE(item, tmp, &surface.acquirable_noti, link) {
1429 if (item->data == &data)
1433 ASSERT_TRUE(item != NULL);
1435 expected_cb = ut_tbm_surface_queue_notify_cb;
1437 ASSERT_TRUE(cb == expected_cb);
1440 TEST(tbm_surface_queue_add_acquirable_cb, null_ptr_fail_1)
1442 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1443 tbm_surface_queue_error_e expected_error =
1444 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1448 error = tbm_surface_queue_add_acquirable_cb(NULL, NULL, NULL);
1450 ASSERT_EQ(error, expected_error);
1453 /* tbm_surface_queue_remove_dequeuable_cb() */
1455 TEST(tbm_surface_queue_remove_dequeuable_cb, work_flow_success_1)
1457 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1458 tbm_surface_queue_error_e expected_error =
1459 TBM_SURFACE_QUEUE_ERROR_NONE;
1460 tbm_surface_queue_s surface;
1463 queue_notify *find_item;
1468 item = (queue_notify *)calloc(1, sizeof(queue_notify));
1469 FREE_TESTED_PTR = item;
1471 LIST_INITHEAD(&item->link);
1472 item->cb = ut_tbm_surface_queue_notify_cb;
1475 LIST_INITHEAD(&surface.dequeuable_noti);
1476 LIST_ADDTAIL(&item->link, &surface.dequeuable_noti);
1480 error = tbm_surface_queue_remove_dequeuable_cb(&surface,
1481 ut_tbm_surface_queue_notify_cb,
1484 ASSERT_EQ(error, expected_error);
1485 if (!LIST_IS_EMPTY(&surface.dequeuable_noti)) {
1486 LIST_FOR_EACH_ENTRY_SAFE(find_item, tmp, &surface.dequeuable_noti, link) {
1487 if (find_item->data == &data)
1491 ASSERT_TRUE(find_item == NULL);
1492 ASSERT_EQ(free_called_for_tested_ptr, 1);
1495 TEST(tbm_surface_queue_remove_dequeuable_cb, null_ptr_fail_1)
1497 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1498 tbm_surface_queue_error_e expected_error =
1499 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1503 error = tbm_surface_queue_remove_dequeuable_cb(NULL, NULL, NULL);
1505 ASSERT_EQ(error, expected_error);
1508 /* tbm_surface_queue_add_dequeuable_cb() */
1510 TEST(tbm_surface_queue_add_dequeuable_cb, work_flow_success_1)
1512 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1513 tbm_surface_queue_error_e expected_error =
1514 TBM_SURFACE_QUEUE_ERROR_NONE;
1515 tbm_surface_queue_s surface;
1522 LIST_INITHEAD(&surface.dequeuable_noti);
1524 error = tbm_surface_queue_add_dequeuable_cb(&surface,
1525 ut_tbm_surface_queue_notify_cb,
1528 ASSERT_EQ(error, expected_error);
1529 if (!LIST_IS_EMPTY(&surface.dequeuable_noti)) {
1530 LIST_FOR_EACH_ENTRY_SAFE(item, tmp, &surface.dequeuable_noti, link) {
1531 if (item->data == &data)
1535 ASSERT_TRUE(item != NULL);
1536 tbm_surface_queue_notify_cb cb = item->cb;
1537 tbm_surface_queue_notify_cb expected_cb = ut_tbm_surface_queue_notify_cb;
1539 ASSERT_TRUE(cb == expected_cb);
1542 TEST(tbm_surface_queue_add_dequeuable_cb, null_ptr_fail_1)
1544 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1545 tbm_surface_queue_error_e expected_error =
1546 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1550 error = tbm_surface_queue_add_dequeuable_cb(NULL, NULL, NULL);
1552 ASSERT_EQ(error, expected_error);
1555 /* tbm_surface_queue_remove_destroy_cb() */
1557 TEST(tbm_surface_queue_remove_destroy_cb, work_flow_success_1)
1559 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1560 tbm_surface_queue_error_e expected_error =
1561 TBM_SURFACE_QUEUE_ERROR_NONE;
1562 tbm_surface_queue_s surface;
1565 queue_notify *find_item;
1570 item = (queue_notify *)calloc(1, sizeof(queue_notify));
1571 FREE_TESTED_PTR = item;
1573 LIST_INITHEAD(&item->link);
1574 item->cb = ut_tbm_surface_queue_notify_cb;
1577 LIST_INITHEAD(&surface.destory_noti);
1578 LIST_ADDTAIL(&item->link, &surface.destory_noti);
1582 error = tbm_surface_queue_remove_destroy_cb(&surface,
1583 ut_tbm_surface_queue_notify_cb,
1586 ASSERT_EQ(error, expected_error);
1587 if (!LIST_IS_EMPTY(&surface.destory_noti)) {
1588 LIST_FOR_EACH_ENTRY_SAFE(find_item, tmp, &surface.destory_noti, link) {
1589 if (find_item->data == &data)
1593 ASSERT_TRUE(find_item == NULL);
1594 ASSERT_EQ(free_called_for_tested_ptr, 1);
1597 TEST(tbm_surface_queue_remove_destroy_cb, null_ptr_fail_1)
1599 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1600 tbm_surface_queue_error_e expected_error =
1601 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1605 error = tbm_surface_queue_remove_destroy_cb(NULL, NULL, NULL);
1607 ASSERT_EQ(error, expected_error);
1610 /* tbm_surface_queue_add_destroy_cb() */
1612 TEST(tbm_surface_queue_add_destroy_cb, work_flow_success_1)
1614 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1615 tbm_surface_queue_error_e expected_error =
1616 TBM_SURFACE_QUEUE_ERROR_NONE;
1617 tbm_surface_queue_s surface;
1621 tbm_surface_queue_notify_cb cb;
1622 tbm_surface_queue_notify_cb expected_cb;
1626 LIST_INITHEAD(&surface.destory_noti);
1628 error = tbm_surface_queue_add_destroy_cb(&surface,
1629 ut_tbm_surface_queue_notify_cb,
1632 ASSERT_EQ(error, expected_error);
1633 if (!LIST_IS_EMPTY(&surface.destory_noti)) {
1634 LIST_FOR_EACH_ENTRY_SAFE(item, tmp, &surface.destory_noti, link) {
1635 if (item->data == &data)
1639 ASSERT_TRUE(item != NULL);
1641 expected_cb = ut_tbm_surface_queue_notify_cb;
1643 ASSERT_EQ(cb, expected_cb);
1646 TEST(tbm_surface_queue_add_destroy_cb, null_ptr_fail_1)
1648 tbm_surface_queue_error_e error = TBM_SURFACE_QUEUE_ERROR_NONE;
1649 tbm_surface_queue_error_e expected_error =
1650 TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE;
1654 error = tbm_surface_queue_add_destroy_cb(NULL, NULL, NULL);
1656 ASSERT_EQ(error, expected_error);