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 //**************************************************************************/
31 //#include "gtest/gtest.h"
33 //#include "tbm_stubs.h"
34 //#include "stub_pthread.h"
35 //#include "stub_stdlib.h"
36 //#include "stub_tdm_server.h"
37 //#include "stub_tdm_thread.h"
40 #include "tdm_event_loop.c"
42 //#define ZEROING_DATA(ptr, size_of_ptr) memset((void*)ptr, 0, size_of_ptr);
44 //static void _init_test()
46 // WL_EVENT_LOOP_ADD_FD_ERROR = 0;
47 // WL_EVENT_SOURCE_FD_UPDATE_ERROR = 0;
48 // WL_EVENT_LOOP_ADD_TIMER_ERROR = 0;
49 // WL_EVENT_SOURCE_TIMER_UPDATE_ERROR = 0;
50 // WL_DISPLAY_CREATE_ERROR = 0;
53 // stub_pthread_init();
55 // stub_stdlib_init();
57 // stub_tdm_thread_init();
60 ///* HELPER FUNCTIONS */
62 //tdm_error ut_tdm_event_loop_fd_handler(int fd, tdm_event_loop_mask mask,
69 // return TDM_ERROR_NONE;
72 //tdm_error ut_tdm_event_loop_timer_handler(void *user_data)
76 // return TDM_ERROR_NONE;
81 ///* tdm_event_loop_source_timer_update */
83 //TEST(tdm_event_loop_source_timer_update, work_flow_success_2)
85 // tdm_error error = TDM_ERROR_OPERATION_FAILED;
86 // tdm_error expected_error = TDM_ERROR_NONE;
87 // tdm_event_loop_source_timer source;
91 // error = tdm_event_loop_source_timer_update(&source, 100);
93 // ASSERT_EQ(error, expected_error);
96 //TEST(tdm_event_loop_source_timer_update, work_flow_success_1)
98 // tdm_error error = TDM_ERROR_NONE;
99 // tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
100 // tdm_event_loop_source_timer source;
104 // WL_EVENT_SOURCE_TIMER_UPDATE_ERROR = 1;
106 // error = tdm_event_loop_source_timer_update(&source, 100);
108 // ASSERT_EQ(error, expected_error);
111 //TEST(tdm_event_loop_source_timer_update, null_ptr_fail_1)
113 // tdm_error error = TDM_ERROR_NONE;
114 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
118 // error = tdm_event_loop_source_timer_update(NULL, 100);
120 // ASSERT_EQ(error, expected_error);
123 ///* tdm_event_loop_add_timer_handler */
125 //TEST(tdm_event_loop_add_timer_handler, work_flow_success_3)
127 // tdm_error error = TDM_ERROR_OUT_OF_MEMORY;
128 // tdm_error expected_error = TDM_ERROR_NONE;
129 // tdm_private_display dpy;
130 // tdm_private_loop private_loop;
131 // tdm_event_loop_source_timer *timer_source;
132 // struct wl_event_loop wl_loop;
136 // dpy.private_loop = &private_loop;
137 // private_loop.wl_loop = &wl_loop;
140 // (tdm_event_loop_source_timer *)tdm_event_loop_add_timer_handler(&dpy,
141 // ut_tdm_event_loop_timer_handler,
144 // ASSERT_EQ(error, expected_error);
145 // free(timer_source);
148 //TEST(tdm_event_loop_add_timer_handler, work_flow_success_2)
150 // tdm_error error = TDM_ERROR_NONE;
151 // tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
152 // tdm_private_display dpy;
153 // tdm_private_loop private_loop;
154 // struct wl_event_loop wl_loop;
158 // dpy.private_loop = &private_loop;
159 // private_loop.wl_loop = &wl_loop;
160 // WL_EVENT_LOOP_ADD_TIMER_ERROR = 1;
162 // tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
165 // ASSERT_EQ(error, expected_error);
168 //TEST(tdm_event_loop_add_timer_handler, work_flow_success_1)
170 // tdm_error error = TDM_ERROR_NONE;
171 // tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
172 // tdm_private_display dpy;
173 // tdm_private_loop private_loop;
174 // struct wl_event_loop wl_loop;
178 // dpy.private_loop = &private_loop;
179 // private_loop.wl_loop = &wl_loop;
182 // tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
185 // ASSERT_EQ(error, expected_error);
188 //TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_4)
190 // tdm_error error = TDM_ERROR_NONE;
191 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
192 // tdm_private_display dpy;
193 // tdm_private_loop private_loop;
197 // dpy.private_loop = &private_loop;
198 // private_loop.wl_loop = NULL;
200 // tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
203 // ASSERT_EQ(error, expected_error);
206 //TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_3)
208 // tdm_error error = TDM_ERROR_NONE;
209 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
210 // tdm_private_display dpy;
214 // dpy.private_loop = NULL;
216 // tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
219 // ASSERT_EQ(error, expected_error);
222 //TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_2)
224 // tdm_error error = TDM_ERROR_NONE;
225 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
226 // tdm_private_display dpy;
230 // tdm_event_loop_add_timer_handler(&dpy, NULL,
233 // ASSERT_EQ(error, expected_error);
236 //TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_1)
238 // tdm_error error = TDM_ERROR_NONE;
239 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
243 // tdm_event_loop_add_timer_handler(NULL, ut_tdm_event_loop_timer_handler,
246 // ASSERT_EQ(error, expected_error);
249 ///* tdm_event_loop_source_fd_update */
251 //TEST(tdm_event_loop_source_fd_update, work_flow_success_2)
253 // tdm_error error = TDM_ERROR_OPERATION_FAILED;
254 // tdm_error expected_error = TDM_ERROR_NONE;
255 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
256 // tdm_event_loop_source_fd source;
260 // error = tdm_event_loop_source_fd_update(&source, mask);
262 // ASSERT_EQ(error, expected_error);
265 //TEST(tdm_event_loop_source_fd_update, work_flow_success_1)
267 // tdm_error error = TDM_ERROR_NONE;
268 // tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
269 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
270 // tdm_event_loop_source_fd source;
274 // WL_EVENT_SOURCE_FD_UPDATE_ERROR = 1;
276 // error = tdm_event_loop_source_fd_update(&source, mask);
278 // ASSERT_EQ(error, expected_error);
281 //TEST(tdm_event_loop_source_fd_update, null_ptr_fail_1)
283 // tdm_error error = TDM_ERROR_NONE;
284 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
285 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
289 // error = tdm_event_loop_source_fd_update(NULL, mask);
291 // ASSERT_EQ(error, expected_error);
294 ///* tdm_event_loop_add_fd_handler */
296 //TEST(tdm_event_loop_add_fd_handler, work_flow_success_3)
298 // tdm_error error = TDM_ERROR_INVALID_PARAMETER;
299 // tdm_error expected_error = TDM_ERROR_NONE;
300 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
301 // tdm_private_display dpy;
302 // tdm_private_loop private_loop;
303 // struct wl_event_loop wl_loop;
304 // tdm_event_loop_source_fd *fd_source;
308 // dpy.private_loop = &private_loop;
309 // private_loop.wl_loop = &wl_loop;
312 // (tdm_event_loop_source_fd *)tdm_event_loop_add_fd_handler(&dpy, 5, mask,
313 // ut_tdm_event_loop_fd_handler,
317 // ASSERT_EQ(error, expected_error);
320 //TEST(tdm_event_loop_add_fd_handler, work_flow_success_2)
322 // tdm_error error = TDM_ERROR_NONE;
323 // tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
324 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
325 // tdm_private_display dpy;
326 // tdm_private_loop private_loop;
327 // struct wl_event_loop wl_loop;
330 // dpy.private_loop = &private_loop;
331 // private_loop.wl_loop = &wl_loop;
332 // WL_EVENT_LOOP_ADD_FD_ERROR = 1;
334 // tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
337 // ASSERT_EQ(error, expected_error);
340 //TEST(tdm_event_loop_add_fd_handler, work_flow_success_1)
342 // tdm_error error = TDM_ERROR_NONE;
343 // tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
344 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
345 // tdm_private_display dpy;
346 // tdm_private_loop private_loop;
347 // struct wl_event_loop wl_loop;
351 // dpy.private_loop = &private_loop;
352 // private_loop.wl_loop = &wl_loop;
355 // tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
358 // ASSERT_EQ(error, expected_error);
361 //TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_5)
363 // tdm_error error = TDM_ERROR_NONE;
364 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
365 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
366 // tdm_private_display dpy;
367 // tdm_private_loop private_loop;
371 // dpy.private_loop = &private_loop;
372 // private_loop.wl_loop = NULL;
374 // tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
377 // ASSERT_EQ(error, expected_error);
380 //TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_4)
382 // tdm_error error = TDM_ERROR_NONE;
383 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
384 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
385 // tdm_private_display dpy;
389 // dpy.private_loop = NULL;
391 // tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
394 // ASSERT_EQ(error, expected_error);
397 //TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_3)
399 // tdm_error error = TDM_ERROR_NONE;
400 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
401 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
402 // tdm_private_display dpy;
406 // tdm_event_loop_add_fd_handler(&dpy, 5, mask, NULL,
409 // ASSERT_EQ(error, expected_error);
412 //TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_2)
414 // tdm_error error = TDM_ERROR_NONE;
415 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
416 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
417 // tdm_private_display dpy;
421 // tdm_event_loop_add_fd_handler(&dpy, -1, mask, ut_tdm_event_loop_fd_handler,
424 // ASSERT_EQ(error, expected_error);
427 //TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_1)
429 // tdm_error error = TDM_ERROR_NONE;
430 // tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
431 // tdm_event_loop_mask mask = TDM_EVENT_LOOP_READABLE;
435 // tdm_event_loop_add_fd_handler(NULL, 5, mask, ut_tdm_event_loop_fd_handler,
438 // ASSERT_EQ(error, expected_error);
441 ///* tdm_event_loop_init */
443 //TEST(tdm_event_loop_init, success_private_loop_was_allocated)
445 // tdm_error error = TDM_ERROR_NONE;
446 // tdm_error expected_error = TDM_ERROR_NONE;
447 // tdm_private_display private_display;
448 // tdm_private_loop private_loop;
450 // private_display.private_loop = &private_loop;
452 // error = tdm_event_loop_init(&private_display);
454 // ASSERT_EQ(error, expected_error);
457 //TEST(tdm_event_loop_init, error_could_not_allocate_private_loop)
459 // tdm_error error = TDM_ERROR_NONE;
460 // tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
461 // tdm_private_display private_display;
465 // private_display.private_loop = NULL;
468 // error = tdm_event_loop_init(&private_display);
470 // ASSERT_EQ(error, expected_error);
473 //TEST(tdm_event_loop_init, error_could_not_create_display)
475 // tdm_error error = TDM_ERROR_NONE;
476 // tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
477 // tdm_private_display private_display;
481 // ZEROING_DATA(&private_display, sizeof(tdm_private_display));
482 // WL_DISPLAY_CREATE_ERROR = 1;
484 // error = tdm_event_loop_init(&private_display);
486 // ASSERT_EQ(error, expected_error);
489 //TEST(tdm_event_loop_init, error_init_tdm_server)
491 // tdm_error error = TDM_ERROR_NONE;
492 // tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
493 // tdm_private_display private_display;
497 // ZEROING_DATA(&private_display, sizeof(tdm_private_display));
498 // stdub_tdm_server_init_error = 1;
500 // error = tdm_event_loop_init(&private_display);
502 // ASSERT_EQ(error, expected_error);
505 //TEST(tdm_event_loop_init, error_init_thread)
507 // tdm_error error = TDM_ERROR_NONE;
508 // tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
509 // tdm_private_display private_display;
513 // ZEROING_DATA(&private_display, sizeof(tdm_private_display));
514 // stub_tdm_thread_init_init_error = 1;
516 // error = tdm_event_loop_init(&private_display);
518 // ASSERT_EQ(error, expected_error);
521 //TEST(tdm_event_loop_init, success_first_initialization_of_private_loop)
523 // tdm_error error = TDM_ERROR_NONE;
524 // tdm_error expected_error = TDM_ERROR_NONE;
525 // tdm_private_display private_display;
526 // int expected_fd = -1;
530 // ZEROING_DATA(&private_display, sizeof(tdm_private_display));
532 // error = tdm_event_loop_init(&private_display);
534 // ASSERT_EQ(error, expected_error);
535 // ASSERT_TRUE(private_display.private_loop);
536 // ASSERT_EQ(private_display.private_loop->backend_fd, expected_fd);
538 // /* XXX: private_loop has been allocated within tdm_event_loop_init
539 // * so it's out duty to delete it */
540 // free(private_display.private_loop);
543 ///* tdm_event_loop_deinit */
545 //TEST(tdm_event_loop_deinit, success_private_loop_is_NULL)
547 // tdm_private_display private_display;
551 // ZEROING_DATA(&private_display, sizeof(tdm_private_display));
553 // tdm_event_loop_deinit(&private_display);
555 // ASSERT_FALSE(private_display.private_loop);
558 //TEST(tdm_event_loop_deinit, success_private_loop_is_not_NULL)
560 // tdm_private_display private_display;
561 // tdm_event_loop_source_base *event_loop_source_base;
562 // struct wl_display wl_display;
566 // ZEROING_DATA(&private_display, sizeof(tdm_private_display));
568 // private_display.private_loop = calloc(1, sizeof(tdm_private_loop));
569 // private_display.private_loop->backend_source = NULL;
570 // private_display.private_loop->wl_display = &wl_display;
572 // tdm_event_loop_deinit(&private_display);
574 // ASSERT_FALSE(private_display.private_loop);
577 ///* tdm_event_loop_source_remove */
579 //TEST(tdm_event_loop_source_remove, success_source_is_NULL)
582 // tdm_event_loop_source_remove(NULL);
585 //TEST(tdm_event_loop_source_remove, success_source_is_not_NULL)
587 // tdm_event_loop_source_base *base;
591 // base = calloc(1, sizeof(tdm_event_loop_source_base));
592 // ASSERT_TRUE(base);
594 // tdm_event_loop_source_remove(base);
597 ///* tdm_event_loop_flush */
599 //TEST(tdm_event_loop_flush, success_wl_display_is_NULL)
601 // tdm_private_display private_display;
602 // tdm_private_loop private_loop;
604 // ZEROING_DATA(&private_display, sizeof(private_display))
605 // ZEROING_DATA(&private_loop, sizeof(private_loop))
607 // private_display.private_loop = &private_loop;
609 // tdm_event_loop_flush(&private_display);
612 //TEST(tdm_event_loop_flush, success_wl_display_is_not_NULL)
614 // tdm_private_display private_display;
615 // tdm_private_loop private_loop;
616 // struct wl_display wl_display;
618 // ZEROING_DATA(&private_display, sizeof(private_display))
619 // ZEROING_DATA(&private_loop, sizeof(private_loop))
621 // private_display.private_loop = &private_loop;
622 // private_display.private_loop->wl_display = &wl_display;
624 // tdm_event_loop_flush(&private_display);