*
**************************************************************************/
+#include <string.h>
+
#include "gtest/gtest.h"
#include "tbm_stubs.h"
#include "stub_pthread.h"
#include "stub_stdlib.h"
+#include "stub_tdm_server.h"
+#include "stub_tdm_thread.h"
#include "tdm_event_loop.c"
+#define ZEROING_DATA(ptr, size_of_ptr) memset((void*)ptr, 0, size_of_ptr);
+
static void _init_test()
{
WL_EVENT_LOOP_ADD_FD_ERROR = 0;
WL_EVENT_SOURCE_FD_UPDATE_ERROR = 0;
WL_EVENT_LOOP_ADD_TIMER_ERROR = 0;
WL_EVENT_SOURCE_TIMER_UPDATE_ERROR = 0;
+ WL_DISPLAY_CREATE_ERROR = 0;
+
stub_pthread_init();
stub_tbm_init();
stub_stdlib_init();
+ stub_tdm_server();
+ stub_tdm_thread_init();
}
/* HELPER FUNCTIONS */
/* tdm_event_loop_source_timer_update */
-TEST(tdm_event_loop_source_timer, work_flow_success_2)
+TEST(tdm_event_loop_source_timer_update, work_flow_success_2)
{
tdm_error error = TDM_ERROR_OPERATION_FAILED;
tdm_error expected_error = TDM_ERROR_NONE;
ASSERT_EQ(error, expected_error);
}
-TEST(tdm_event_loop_source_timer, work_flow_success_1)
+TEST(tdm_event_loop_source_timer_update, work_flow_success_1)
{
tdm_error error = TDM_ERROR_NONE;
tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
ASSERT_EQ(error, expected_error);
}
+
+/* tdm_event_loop_init */
+
+TEST(tdm_event_loop_init, success_private_loop_was_allocated)
+{
+ tdm_error error = TDM_ERROR_NONE;
+ tdm_error expected_error = TDM_ERROR_NONE;
+ tdm_private_display private_display;
+ tdm_private_loop private_loop;
+
+ private_display.private_loop = &private_loop;
+
+ error = tdm_event_loop_init(&private_display);
+
+ ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_could_not_allocate_private_loop)
+{
+ tdm_error error = TDM_ERROR_NONE;
+ tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
+ tdm_private_display private_display;
+
+ _init_test();
+
+ private_display.private_loop = NULL;
+ CALLOC_ERROR = 1;
+
+ error = tdm_event_loop_init(&private_display);
+
+ ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_could_not_create_display)
+{
+ tdm_error error = TDM_ERROR_NONE;
+ tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
+ tdm_private_display private_display;
+
+ _init_test();
+
+ ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+ WL_DISPLAY_CREATE_ERROR = 1;
+
+ error = tdm_event_loop_init(&private_display);
+
+ ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_init_tdm_server)
+{
+ tdm_error error = TDM_ERROR_NONE;
+ tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
+ tdm_private_display private_display;
+
+ _init_test();
+
+ ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+ stdub_tdm_server_init_error = 1;
+
+ error = tdm_event_loop_init(&private_display);
+
+ ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, error_init_thread)
+{
+ tdm_error error = TDM_ERROR_NONE;
+ tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
+ tdm_private_display private_display;
+
+ _init_test();
+
+ ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+ stub_tdm_thread_init_init_error = 1;
+
+ error = tdm_event_loop_init(&private_display);
+
+ ASSERT_EQ(error, expected_error);
+}
+
+TEST(tdm_event_loop_init, success_first_initialization_of_private_loop)
+{
+ tdm_error error = TDM_ERROR_NONE;
+ tdm_error expected_error = TDM_ERROR_NONE;
+ tdm_private_display private_display;
+ int expected_fd = -1;
+
+ _init_test();
+
+ ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+
+ error = tdm_event_loop_init(&private_display);
+
+ ASSERT_EQ(error, expected_error);
+ ASSERT_TRUE(private_display.private_loop);
+ ASSERT_EQ(private_display.private_loop->backend_fd, expected_fd);
+
+ /* XXX: private_loop has been allocated within tdm_event_loop_init
+ * so it's out duty to delete it */
+ free(private_display.private_loop);
+}
+
+/* tdm_event_loop_deinit */
+
+TEST(tdm_event_loop_deinit, success_private_loop_is_NULL)
+{
+ tdm_private_display private_display;
+
+ _init_test();
+
+ ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+
+ tdm_event_loop_deinit(&private_display);
+
+ ASSERT_FALSE(private_display.private_loop);
+}
+
+TEST(tdm_event_loop_deinit, success_private_loop_is_not_NULL)
+{
+ tdm_private_display private_display;
+ tdm_event_loop_source_base *event_loop_source_base;
+ struct wl_display wl_display;
+
+ _init_test();
+
+ ZEROING_DATA(&private_display, sizeof(tdm_private_display));
+
+ private_display.private_loop = calloc(1, sizeof(tdm_private_loop));
+ private_display.private_loop->backend_source = NULL;
+ private_display.private_loop->wl_display = &wl_display;
+
+ tdm_event_loop_deinit(&private_display);
+
+ ASSERT_FALSE(private_display.private_loop);
+}
+
+/* tdm_event_loop_source_remove */
+
+TEST(tdm_event_loop_source_remove, success_source_is_NULL)
+{
+ _init_test();
+ tdm_event_loop_source_remove(NULL);
+}
+
+TEST(tdm_event_loop_source_remove, success_source_is_not_NULL)
+{
+ tdm_event_loop_source_base *base;
+
+ _init_test();
+
+ base = calloc(1, sizeof(tdm_event_loop_source_base));
+ ASSERT_TRUE(base);
+
+ tdm_event_loop_source_remove(base);
+}
+
+/* tdm_event_loop_flush */
+
+TEST(tdm_event_loop_flush, success_wl_display_is_NULL)
+{
+ tdm_private_display private_display;
+ tdm_private_loop private_loop;
+
+ ZEROING_DATA(&private_display, sizeof(private_display))
+ ZEROING_DATA(&private_loop, sizeof(private_loop))
+
+ private_display.private_loop = &private_loop;
+
+ tdm_event_loop_flush(&private_display);
+}
+
+TEST(tdm_event_loop_flush, success_wl_display_is_not_NULL)
+{
+ tdm_private_display private_display;
+ tdm_private_loop private_loop;
+ struct wl_display wl_display;
+
+ ZEROING_DATA(&private_display, sizeof(private_display))
+ ZEROING_DATA(&private_loop, sizeof(private_loop))
+
+ private_display.private_loop = &private_loop;
+ private_display.private_loop->wl_display = &wl_display;
+
+ tdm_event_loop_flush(&private_display);
+}
+
+
+
+
+