1 /**************************************************************************
3 * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
5 * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
6 * Contact: Andrii Sokolenko <a.sokolenko@samsung.com>
7 * Contact: Roman Marchenko <r.marchenko@samsung.com>
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the
11 * "Software"), to deal in the Software without restriction, including
12 * without limitation the rights to use, copy, modify, merge, publish,
13 * distribute, sub license, and/or sell copies of the Software, and to
14 * permit persons to whom the Software is furnished to do so, subject to
15 * the following conditions:
17 * The above copyright notice and this permission notice (including the
18 * next paragraph) shall be included in all copies or substantial portions
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
24 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 **************************************************************************/
33 class TDMEventLoop : public TDMDisplay
41 TDMEventLoop::TDMEventLoop()
45 void TDMEventLoop::SetUp(void)
48 tdm_display_lock(dpy);
51 void TDMEventLoop::TearDown(void)
53 tdm_display_unlock(dpy);
54 TDMDisplay::TearDown();
58 _ut_tdm_event_loop_fd_cb(int fd, tdm_event_loop_mask mask, void *user_data)
60 bool *done = (bool*)user_data;
63 return TDM_ERROR_NONE;
66 TEST_P(TDMEventLoop, EventLoopAddFdHandler)
69 int pipes[2]; /* 0: read, 1: write */
70 tdm_event_loop_source *source;
74 ASSERT_EQ(pipe(pipes), 0);
77 source = tdm_event_loop_add_fd_handler(dpy, pipes[0], TDM_EVENT_LOOP_READABLE,
78 _ut_tdm_event_loop_fd_cb, &done, &ret);
79 ASSERT_EQ(ret, TDM_ERROR_NONE);
80 ASSERT_NE(source, NULL);
82 len = write(pipes[1], "hello", 5);
87 // ASSERT_EQ(ut_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
89 tdm_event_loop_source_remove(source);
95 TEST_P(TDMEventLoop, EventLoopAddFdHandlerNullObject)
98 tdm_event_loop_source *source;
99 source = tdm_event_loop_add_fd_handler(NULL, 0, TDM_EVENT_LOOP_READABLE,
100 _ut_tdm_event_loop_fd_cb, NULL, &ret);
101 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
102 ASSERT_EQ(source, NULL);
105 TEST_P(TDMEventLoop, EventLoopAddFdHandlerNullOther)
108 tdm_event_loop_source *source;
109 source = tdm_event_loop_add_fd_handler(NULL, -1, TDM_EVENT_LOOP_READABLE, NULL, NULL, &ret);
110 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
111 ASSERT_EQ(source, NULL);
114 TEST_P(TDMEventLoop, EventLoopSourceFdUpdate)
117 int pipes[2]; /* 0: read, 1: write */
118 tdm_event_loop_source *source;
122 ASSERT_EQ(pipe(pipes), 0);
125 source = tdm_event_loop_add_fd_handler(dpy, pipes[0], TDM_EVENT_LOOP_WRITABLE,
126 _ut_tdm_event_loop_fd_cb, &done, &ret);
127 ASSERT_EQ(ret, TDM_ERROR_NONE);
128 ASSERT_NE(source, NULL);
130 ASSERT_EQ(tdm_event_loop_source_fd_update(source, TDM_EVENT_LOOP_READABLE), TDM_ERROR_NONE);
132 len = write(pipes[1], "hello", 5);
137 // ASSERT_EQ(ut_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
139 tdm_event_loop_source_remove(source);
145 TEST_P(TDMEventLoop, EventLoopSourceFdUpdateNullObject)
147 ASSERT_EQ(tdm_event_loop_source_fd_update(NULL, TDM_EVENT_LOOP_READABLE), TDM_ERROR_INVALID_PARAMETER);
151 _ut_tdm_event_loop_timer_cb(void *user_data)
153 bool *done = (bool*)user_data;
156 return TDM_ERROR_NONE;
159 TEST_P(TDMEventLoop, EventLoopAddTimerHandler)
162 tdm_event_loop_source *source;
163 source = tdm_event_loop_add_timer_handler(dpy, _ut_tdm_event_loop_timer_cb, NULL, &ret);
164 ASSERT_EQ(ret, TDM_ERROR_NONE);
165 ASSERT_NE(source, NULL);
166 tdm_event_loop_source_remove(source);
169 TEST_P(TDMEventLoop, EventLoopAddTimerHandlerNullObject)
172 tdm_event_loop_source *source;
173 source = tdm_event_loop_add_timer_handler(NULL, _ut_tdm_event_loop_timer_cb, NULL, &ret);
174 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
175 ASSERT_EQ(source, NULL);
179 TEST_P(TDMEventLoop, EventLoopAddTimerHandlerNullOther)
182 tdm_event_loop_source *source;
183 source = tdm_event_loop_add_timer_handler(dpy, NULL, NULL, &ret);
184 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
185 ASSERT_EQ(source, NULL);
188 TEST_P(TDMEventLoop, EventLoopSourceTimerUpdate)
191 tdm_event_loop_source *source;
192 source = tdm_event_loop_add_timer_handler(dpy, _ut_tdm_event_loop_timer_cb, NULL, &ret);
193 ASSERT_EQ(ret, TDM_ERROR_NONE);
194 ASSERT_NE(source, NULL);
195 ASSERT_EQ(tdm_event_loop_source_timer_update(source, 100), TDM_ERROR_NONE);
198 // ASSERT_EQ(ut_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
199 tdm_event_loop_source_remove(source);
202 TEST_P(TDMEventLoop, EventLoopSourceTimerUpdateNullObject)
204 ASSERT_EQ(tdm_event_loop_source_timer_update(NULL, 100), TDM_ERROR_INVALID_PARAMETER);
207 TEST_P(TDMEventLoop, EventLoopSourceRemoveNullObject)
209 tdm_event_loop_source_remove(NULL);
212 #ifdef TDM_UT_TEST_WITH_PARAMS
213 INSTANTIATE_TEST_CASE_P(TDMEventLoopParams,
215 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
217 INSTANTIATE_TEST_CASE_P(TDMEventLoopParams,
219 Values(TDM_DEFAULT_MODULE));