1 #include "gtest/gtest.h"
7 #include "tdm_backend.h"
8 #include "tbm_bufmgr.h"
9 #include "tbm_surface.h"
10 #include "tbm_surface_internal.h"
11 #include "tbm_drm_helper.h"
14 class TDMBuffer: public ::testing::Test
17 static tbm_bufmgr tbm_bufmgr_s;
20 tbm_surface_h surface;
24 static void SetEnv(void)
26 setenv("TDM_DEBUG_MODULE", "all", 1);
27 setenv("TDM_DEBUG", "1", 1);
28 setenv("TDM_THREAD", "0", 1);
29 setenv("XDG_RUNTIME_DIR", "/run", 1);
30 setenv("TBM_DISPLAY_SERVER", "1", 1);
33 static void UnsetEnv(void)
35 unsetenv("TDM_DEBUG_MODULE");
36 unsetenv("TDM_DEBUG");
37 unsetenv("TDM_THREAD");
38 unsetenv("XDG_RUNTIME_DIR");
39 unsetenv("TBM_DISPLAY_SERVER");
42 static void SetUpTestCase()
45 tbm_bufmgr_s = tbm_bufmgr_init(-1);
46 ASSERT_FALSE(tbm_bufmgr_s == NULL);
47 master_fd = tbm_drm_helper_get_master_fd();
50 static void TearDownTestCase()
52 tbm_bufmgr_deinit(tbm_bufmgr_s);
56 int temp_master_fd = tbm_drm_helper_get_master_fd();
57 EXPECT_EQ(temp_master_fd, -1) << "Fatal Error. Can't deinit tdm/tbm" << std::endl;
58 if (temp_master_fd > -1)
67 surface = tbm_surface_create(256, 256, TBM_FORMAT_ARGB8888);
68 ASSERT_TRUE(surface != NULL);
73 while (tbm_surface_internal_is_valid(surface))
74 tbm_surface_destroy(surface);
79 tbm_bufmgr TDMBuffer::tbm_bufmgr_s = NULL;
80 int TDMBuffer::master_fd = -42;
83 static int handler_is_called = 0;
84 static void release_handler(tbm_surface_h buffer, void *user_data)
86 if (user_data == &handler_is_called)
87 handler_is_called = 1;
89 static void destroy_handler(tbm_surface_h buffer, void *user_data)
91 if (user_data == &handler_is_called)
92 handler_is_called = 1;
95 /* tbm_surface_h tdm_buffer_ref_backend(tbm_surface_h buffer) */
96 TEST_F(TDMBuffer, RefFailNULL)
98 tbm_surface_h buffer = NULL;
100 buffer = tdm_buffer_ref_backend(NULL);
101 ASSERT_EQ(NULL, buffer);
104 TEST_F(TDMBuffer, RefSuccessful)
106 tbm_surface_h buffer = NULL;
108 buffer = tdm_buffer_ref_backend(surface);
109 ASSERT_EQ(buffer, surface);
111 buffer = tdm_buffer_ref_backend(surface);
112 ASSERT_EQ(buffer, surface);
116 /* void tdm_buffer_unref_backend(tbm_surface_h buffer) */
117 TEST_F(TDMBuffer, UnrefFailNULL)
119 tdm_buffer_unref_backend(NULL);
122 TEST_F(TDMBuffer, UnrefSuccessfulTwoRefUnref)
124 tbm_surface_h buffer = NULL;
126 buffer = tdm_buffer_ref_backend(surface);
127 ASSERT_EQ(buffer, surface);
128 buffer = tdm_buffer_ref_backend(surface);
129 ASSERT_EQ(buffer, surface);
132 tdm_buffer_unref_backend(surface);
133 ASSERT_TRUE(tbm_surface_internal_is_valid(surface));
136 tdm_buffer_unref_backend(surface);
137 ASSERT_TRUE(tbm_surface_internal_is_valid(surface));
140 TEST_F(TDMBuffer, UnrefSuccessfulWithoutRef)
142 tdm_buffer_unref_backend(surface);
143 ASSERT_FALSE(tbm_surface_internal_is_valid(surface));
146 TEST_F(TDMBuffer, UnrefSuccessfulOneRefTwoUnref)
148 tbm_surface_h buffer = NULL;
150 buffer = tdm_buffer_ref_backend(surface);
151 ASSERT_EQ(buffer, surface);
153 tdm_buffer_unref_backend(surface);
154 ASSERT_TRUE(tbm_surface_internal_is_valid(surface));
156 tdm_buffer_unref_backend(surface);
157 ASSERT_FALSE(tbm_surface_internal_is_valid(surface));
160 /* tdm_error tdm_buffer_add_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data) */
161 TEST_F(TDMBuffer, AddReleaseHandlerFailNULL)
163 error = tdm_buffer_add_release_handler(NULL, release_handler, &handler_is_called);
164 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
166 error = tdm_buffer_add_release_handler(surface, NULL, &handler_is_called);
167 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
170 TEST_F(TDMBuffer, AddReleaseHandlerSuccessful)
172 error = tdm_buffer_add_release_handler(surface, release_handler, &handler_is_called);
173 ASSERT_EQ(TDM_ERROR_NONE, error);
175 handler_is_called = 0;
176 tdm_buffer_unref_backend(surface);
177 ASSERT_TRUE(handler_is_called);
181 /* void tdm_buffer_remove_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data) */
182 TEST_F(TDMBuffer, RemoveReleaseHandlerFailNULL)
184 tdm_buffer_remove_release_handler(NULL, release_handler, &handler_is_called);
186 tdm_buffer_remove_release_handler(surface, NULL, &handler_is_called);
189 TEST_F(TDMBuffer, RemoveReleaseHandlerFailWithoutAdd)
191 tdm_buffer_remove_release_handler(surface, release_handler, &handler_is_called);
194 TEST_F(TDMBuffer, RemoveReleaseHandlerSuccessful)
196 error = tdm_buffer_add_release_handler(surface, release_handler, &handler_is_called);
197 ASSERT_EQ(TDM_ERROR_NONE, error);
199 tdm_buffer_remove_release_handler(surface, release_handler, &handler_is_called);
201 handler_is_called = 0;
202 tdm_buffer_unref_backend(surface);
203 ASSERT_FALSE(handler_is_called);
206 /* tdm_error tdm_buffer_add_destroy_handler(tbm_surface_h buffer, tdm_buffer_destroy_handler func, void *user_data) */
207 TEST_F(TDMBuffer, AddDestroyHandlerFailNULL)
209 error = tdm_buffer_add_destroy_handler(NULL, destroy_handler, &handler_is_called);
210 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
212 error = tdm_buffer_add_destroy_handler(surface, NULL, &handler_is_called);
213 ASSERT_EQ(TDM_ERROR_INVALID_PARAMETER, error);
216 TEST_F(TDMBuffer, AddDestroyHandlerSuccessful)
218 error = tdm_buffer_add_destroy_handler(surface, destroy_handler, &handler_is_called);
219 ASSERT_EQ(TDM_ERROR_NONE, error);
221 handler_is_called = 0;
222 tbm_surface_internal_unref(surface);
223 ASSERT_TRUE(handler_is_called);
227 /* void tdm_buffer_remove_destroy_handler() */
228 TEST_F(TDMBuffer, RemoveDestroyHandlerFailNULL)
230 tdm_buffer_remove_destroy_handler(NULL, release_handler, &handler_is_called);
232 tdm_buffer_remove_destroy_handler(surface, NULL, &handler_is_called);
235 TEST_F(TDMBuffer, RemoveDestroyHandlerFailWithoutAdd)
237 tdm_buffer_remove_destroy_handler(surface, release_handler, &handler_is_called);
240 TEST_F(TDMBuffer, RemoveDestroyHandlerSuccessful)
242 error = tdm_buffer_add_destroy_handler(surface, release_handler, &handler_is_called);
243 ASSERT_EQ(TDM_ERROR_NONE, error);
245 tdm_buffer_remove_destroy_handler(surface, release_handler, &handler_is_called);
247 handler_is_called = 0;
248 tbm_surface_internal_unref(surface);
249 ASSERT_FALSE(handler_is_called);