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 **************************************************************************/
35 class TDMEventLoop : public TDMDisplay
43 TDMEventLoop::TDMEventLoop()
47 void TDMEventLoop::SetUp(void)
50 tdm_display_lock(dpy);
53 void TDMEventLoop::TearDown(void)
55 tdm_display_unlock(dpy);
56 TDMDisplay::TearDown();
60 _tc_tdm_event_loop_fd_cb(int fd, tdm_event_loop_mask mask, void *user_data)
62 bool *done = (bool*)user_data;
65 return TDM_ERROR_NONE;
68 TEST_P(TDMEventLoop, EventLoopAddFdHandler)
71 int pipes[2]; /* 0: read, 1: write */
72 tdm_event_loop_source *source;
76 ASSERT_EQ(pipe(pipes), 0);
79 source = tdm_event_loop_add_fd_handler(dpy, pipes[0], TDM_EVENT_LOOP_READABLE,
80 _tc_tdm_event_loop_fd_cb, &done, &ret);
81 ASSERT_EQ(ret, TDM_ERROR_NONE);
82 ASSERT_NE(source, NULL);
84 len = write(pipes[1], "hello", 5);
89 // ASSERT_EQ(tc_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
91 tdm_event_loop_source_remove(source);
97 TEST_P(TDMEventLoop, EventLoopAddFdHandlerNullObject)
100 tdm_event_loop_source *source;
101 source = tdm_event_loop_add_fd_handler(NULL, 0, TDM_EVENT_LOOP_READABLE,
102 _tc_tdm_event_loop_fd_cb, NULL, &ret);
103 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
104 ASSERT_EQ(source, NULL);
107 TEST_P(TDMEventLoop, EventLoopAddFdHandlerNullOther)
110 tdm_event_loop_source *source;
111 source = tdm_event_loop_add_fd_handler(NULL, -1, TDM_EVENT_LOOP_READABLE, NULL, NULL, &ret);
112 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
113 ASSERT_EQ(source, NULL);
116 TEST_P(TDMEventLoop, EventLoopSourceFdUpdate)
119 int pipes[2]; /* 0: read, 1: write */
120 tdm_event_loop_source *source;
124 ASSERT_EQ(pipe(pipes), 0);
127 source = tdm_event_loop_add_fd_handler(dpy, pipes[0], TDM_EVENT_LOOP_WRITABLE,
128 _tc_tdm_event_loop_fd_cb, &done, &ret);
129 ASSERT_EQ(ret, TDM_ERROR_NONE);
130 ASSERT_NE(source, NULL);
132 ASSERT_EQ(tdm_event_loop_source_fd_update(source, TDM_EVENT_LOOP_READABLE), TDM_ERROR_NONE);
134 len = write(pipes[1], "hello", 5);
139 // ASSERT_EQ(tc_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
141 tdm_event_loop_source_remove(source);
147 TEST_P(TDMEventLoop, EventLoopSourceFdUpdateNullObject)
149 ASSERT_EQ(tdm_event_loop_source_fd_update(NULL, TDM_EVENT_LOOP_READABLE), TDM_ERROR_INVALID_PARAMETER);
153 _tc_tdm_event_loop_timer_cb(void *user_data)
155 bool *done = (bool*)user_data;
158 return TDM_ERROR_NONE;
161 TEST_P(TDMEventLoop, EventLoopAddTimerHandler)
164 tdm_event_loop_source *source;
165 source = tdm_event_loop_add_timer_handler(dpy, _tc_tdm_event_loop_timer_cb, NULL, &ret);
166 ASSERT_EQ(ret, TDM_ERROR_NONE);
167 ASSERT_NE(source, NULL);
168 tdm_event_loop_source_remove(source);
171 TEST_P(TDMEventLoop, EventLoopAddTimerHandlerNullObject)
174 tdm_event_loop_source *source;
175 source = tdm_event_loop_add_timer_handler(NULL, _tc_tdm_event_loop_timer_cb, NULL, &ret);
176 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
177 ASSERT_EQ(source, NULL);
181 TEST_P(TDMEventLoop, EventLoopAddTimerHandlerNullOther)
184 tdm_event_loop_source *source;
185 source = tdm_event_loop_add_timer_handler(dpy, NULL, NULL, &ret);
186 ASSERT_EQ(ret, TDM_ERROR_INVALID_PARAMETER);
187 ASSERT_EQ(source, NULL);
190 TEST_P(TDMEventLoop, EventLoopSourceTimerUpdate)
193 tdm_event_loop_source *source;
194 source = tdm_event_loop_add_timer_handler(dpy, _tc_tdm_event_loop_timer_cb, NULL, &ret);
195 ASSERT_EQ(ret, TDM_ERROR_NONE);
196 ASSERT_NE(source, NULL);
197 ASSERT_EQ(tdm_event_loop_source_timer_update(source, 100), TDM_ERROR_NONE);
200 // ASSERT_EQ(tc_tdm_display_handle_events(dpy), TDM_ERROR_NONE);
201 tdm_event_loop_source_remove(source);
204 TEST_P(TDMEventLoop, EventLoopSourceTimerUpdateNullObject)
206 ASSERT_EQ(tdm_event_loop_source_timer_update(NULL, 100), TDM_ERROR_INVALID_PARAMETER);
209 TEST_P(TDMEventLoop, EventLoopSourceRemoveNullObject)
211 tdm_event_loop_source_remove(NULL);
214 #ifdef TDM_UT_TEST_WITH_PARAMS
215 INSTANTIATE_TEST_CASE_P(TDMEventLoopParams,
217 Combine(Bool(), Bool(), Values(TDM_DEFAULT_MODULE)));
219 INSTANTIATE_TEST_CASE_P(TDMEventLoopParams,
221 Values(TDM_DEFAULT_MODULE));