1 #include <gtest/gtest.h>
4 #include <tbm_bufmgr.h>
5 #include <tbm_surface.h>
6 #include <tbm_surface_internal.h>
10 /* int tbm_surface_internal_query_supported_formats(uint32_t **formats, uint32_t *num) */
11 TEST_F(UtInit, SurfaceInternalQueryFormatsFailNull)
14 tbm_format *formats = NULL;
16 ut_set_default_tbm_env();
18 ASSERT_FALSE(tbm_surface_internal_query_supported_formats(&formats, NULL));
20 ASSERT_FALSE(tbm_surface_internal_query_supported_formats(NULL, &num));
23 TEST_F(UtInit, SurfaceInternalQueryFormatsSuccess)
26 tbm_format *formats = NULL;
28 ut_set_default_tbm_env();
30 ASSERT_TRUE(tbm_surface_internal_query_supported_formats(&formats, &num));
32 ASSERT_NE((tbm_format *)NULL, formats);
33 for (uint32_t i = 0; i < num; i++)
34 ASSERT_NE(0, formats[i]);
41 /* tbm_surface_h tbm_surface_internal_create_with_flags(int width, int height, int format, int flags) */
42 TEST_F(UtInit, SurfaceInternalCeatewithFlagsFailInvalidInput)
44 tbm_surface_h surface = NULL;
46 ut_set_default_tbm_env();
48 surface = tbm_surface_internal_create_with_flags(-1, 1024, TBM_FORMAT_ARGB8888, TBM_BO_DEFAULT);
49 ASSERT_EQ(nullptr, surface); // Expected Value: NULL
51 surface = tbm_surface_internal_create_with_flags(720, -1, TBM_FORMAT_ARGB8888, TBM_BO_DEFAULT);
52 ASSERT_EQ(nullptr, surface);
54 surface = tbm_surface_internal_create_with_flags(720, 1024, 0, TBM_BO_DEFAULT);
55 ASSERT_EQ(nullptr, surface);
57 surface = tbm_surface_internal_create_with_flags(720, 1024, 0, (TBM_BO_WC << 1));
58 ASSERT_EQ(nullptr, surface);
61 TEST_F(UtInit, SurfaceInternalCeatewithFlagsSuccess)
63 tbm_surface_h surface = NULL;
65 tbm_format *formats = NULL;
67 ut_set_default_tbm_env();
69 ASSERT_TRUE(tbm_surface_internal_query_supported_formats(&formats, &num));
71 for (uint32_t i = 0; i < num; i++) {
72 surface = tbm_surface_internal_create_with_flags(720, 1024, formats[i], TBM_BO_DEFAULT);
73 ASSERT_NE(nullptr, surface);
74 tbm_surface_internal_destroy(surface);
82 /* void tbm_surface_internal_destroy(tbm_surface_h surface) */
83 TEST_F(UtInit, SurfaceInternalSurfaceInteranlDestroyFailNULL)
85 ut_set_default_tbm_env();
87 tbm_surface_internal_destroy(NULL);
90 TEST_F(UtInit, SurfaceInteranlDestroyFailTwice)
92 tbm_surface_h surface = NULL;
94 tbm_format *formats = NULL;
96 ASSERT_TRUE(tbm_surface_internal_query_supported_formats(&formats, &num));
97 ASSERT_TRUE(formats != NULL);
100 surface = tbm_surface_internal_create_with_flags(720, 1024, formats[0], TBM_BO_DEFAULT);
102 tbm_surface_internal_destroy(surface);
104 tbm_surface_internal_destroy(surface);
110 /* tbm_surface_internal_is_valid(tbm_surface_h surface) */
111 TEST_F(SurfaceInternalTest, IsValid)
115 ASSERT_FALSE(tbm_surface_internal_is_valid(NULL));
116 ASSERT_FALSE(tbm_surface_internal_is_valid((tbm_surface_h)&invalid_surf));
117 ASSERT_TRUE(tbm_surface_internal_is_valid(surface));;
121 /* int tbm_surface_internal_get_num_bos(tbm_surface_h surface) */
122 TEST_F(SurfaceInternalTest, GetNumBosFailNULL)
124 int num = tbm_surface_internal_get_num_bos(NULL);
128 TEST_F(SurfaceInternalTest, GetNumBosSuccess)
130 int num = tbm_surface_internal_get_num_bos(surface);
131 ASSERT_TRUE(num > 0);
134 /* tbm_bo tbm_surface_internal_get_bo(tbm_surface_h surface, int bo_idx) */
135 TEST_F(SurfaceInternalTest, GetBoFailNULL)
137 tbm_bo bo = tbm_surface_internal_get_bo(NULL, 0);
138 ASSERT_EQ(nullptr, bo);
141 TEST_F(SurfaceInternalTest, GetBoFailInvalideInput)
143 tbm_surface_h invalide_surface = (tbm_surface_h)1;
147 /* invalid surface */
148 bo = tbm_surface_internal_get_bo(invalide_surface, 0);
149 ASSERT_EQ(nullptr, bo);
151 num = tbm_surface_internal_get_num_bos(surface);
152 ASSERT_TRUE(num > 0);
154 /* invalid index of bo */
155 bo = tbm_surface_internal_get_bo(surface, -1);
156 ASSERT_EQ(nullptr, bo);
157 bo = tbm_surface_internal_get_bo(surface, num);
158 ASSERT_EQ(nullptr, bo);
161 TEST_F(SurfaceInternalTest, GetBoSuccess)
166 num = tbm_surface_internal_get_num_bos(surface);
167 ASSERT_TRUE(num > 0);
169 for (int i = 0; i < num; i++) {
170 bo = tbm_surface_internal_get_bo(surface, i);
171 ASSERT_NE((tbm_bo)NULL, bo);
175 /* tbm_surface_h tbm_surface_internal_create_with_bos(tbm_surface_info_s *info, tbm_bo *bos, int num) */
176 TEST_F(SurfaceInternalTest, CreateWithBosNullInput)
178 tbm_surface_h surf = NULL;
179 tbm_surface_info_s info = { 0 };
180 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
183 result = (tbm_surface_error_e)tbm_surface_get_info(surface, &info);
184 ASSERT_EQ(TBM_SURFACE_ERROR_NONE, result);
186 surf = tbm_surface_internal_create_with_bos(NULL, NULL, 1);
188 surf = tbm_surface_internal_create_with_bos(&info, NULL, 1);
189 ASSERT_EQ(nullptr, surf);
191 surf = tbm_surface_internal_create_with_bos(NULL, bos, 1);
192 ASSERT_EQ(nullptr, surf);
195 TEST_F(SurfaceInternalTest, CreateWithBosFailInvalidInput)
197 tbm_surface_h surf = NULL;
198 tbm_surface_info_s info;
199 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
200 tbm_bo bos[4] = { NULL };
203 result = (tbm_surface_error_e)tbm_surface_get_info(surface, &info);
204 ASSERT_EQ(TBM_SURFACE_ERROR_NONE, result);
206 num = tbm_surface_internal_get_num_bos(surface);
207 ASSERT_TRUE(num > 0);
209 for (int i = 0; i < num; i++) {
210 bos[i] = tbm_surface_internal_get_bo(surface, i);
211 ASSERT_NE(nullptr, bos[i]);
215 /* wrong number of bo */
216 surf = tbm_surface_internal_create_with_bos(&info, bos, num + 1);
217 ASSERT_EQ(nullptr, surf);
218 surf = tbm_surface_internal_create_with_bos(&info, bos, num - 1);
219 ASSERT_EQ(nullptr, surf);
223 surf = tbm_surface_internal_create_with_bos(&info, bos, num);
224 ASSERT_EQ(nullptr, surf);
227 TEST_F(SurfaceInternalTest, CreateWithBosSuccess)
229 tbm_surface_h surf = NULL;
230 tbm_surface_info_s info;
231 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
232 tbm_bo bos[4] = { NULL };
235 result = (tbm_surface_error_e)tbm_surface_get_info(surface, &info);
236 ASSERT_EQ(TBM_SURFACE_ERROR_NONE, result);
238 num = tbm_surface_internal_get_num_bos(surface);
239 ASSERT_TRUE(num > 0);
241 for (int i = 0; i < num; i++) {
242 bos[i] = tbm_surface_internal_get_bo(surface, i);
243 ASSERT_NE(nullptr, bos[i]);
246 surf = tbm_surface_internal_create_with_bos(&info, bos, num);
247 ASSERT_NE(nullptr, surf);
248 tbm_surface_internal_destroy(surf);
250 /* set size plane to zero*/
251 info.planes[0].size = 0;
252 surf = tbm_surface_internal_create_with_bos(&info, bos, num);
253 ASSERT_NE(nullptr, surf);
254 tbm_surface_internal_destroy(surf);
258 surf = tbm_surface_internal_create_with_bos(&info, bos, num);
259 ASSERT_NE(nullptr, surf);
260 tbm_surface_internal_destroy(surf);
262 /* set size to zero*/
264 surf = tbm_surface_internal_create_with_bos(&info, bos, num);
265 ASSERT_NE(nullptr, surf);
266 tbm_surface_internal_destroy(surf);
269 /* void tbm_surface_internal_unref(tbm_surface_h surface) */
270 TEST_F(SurfaceInternalTest, UnrefFailNull)
272 tbm_surface_internal_unref(NULL);
275 TEST_F(SurfaceInternalTest, UnrefFailInvaildInput)
278 tbm_surface_internal_unref((tbm_surface_h)&surf);
281 TEST_F(SurfaceInternalTest, UnrefSuccess)
283 tbm_surface_internal_unref(surface);
285 ASSERT_FALSE(tbm_surface_internal_is_valid(surface)) ;
290 /* void tbm_surface_internal_ref(tbm_surface_h surface) */
291 TEST_F(UtInit, RefFailNull)
293 tbm_surface_internal_ref(NULL);
296 TEST_F(UtInit, RefFailInvaildInput)
299 tbm_surface_internal_ref((tbm_surface_h)&surf);
302 TEST_F(SurfaceInternalTest, RefSuccess)
304 tbm_surface_internal_ref(surface);
305 tbm_surface_internal_unref(surface);
306 ASSERT_TRUE(tbm_surface_internal_is_valid(surface)) ;
309 /* tbm_surface_internal_get_num_planes() */
310 TEST_F(UtInit, GetNumPlanes)
313 num = tbm_surface_internal_get_num_planes(0);
316 num = tbm_surface_internal_get_num_planes(TBM_FORMAT_ARGB8888);
319 num = tbm_surface_internal_get_num_planes(TBM_FORMAT_NV12);
322 num = tbm_surface_internal_get_num_planes(TBM_FORMAT_YUV410);
326 /* tbm_surface_internal_get_size() */
327 TEST_F(SurfaceInternalTest, GetSizeFailNull)
329 int size = tbm_surface_internal_get_size(NULL);
333 TEST_F(SurfaceInternalTest, GetSizeFailInvaildInput)
336 int size = tbm_surface_internal_get_size((tbm_surface_h)&surf);
340 TEST_F(SurfaceInternalTest, GetSizeSuccess)
342 int size = tbm_surface_internal_get_size(surface);
346 /* tbm_surface_internal_get_plane_data(tbm_surface_h surface, int plane_idx, uint32_t *size, uint32_t *offset, uint32_t *pitch) */
347 TEST_F(SurfaceInternalTest, GetPlaneDataFailNull)
349 ASSERT_FALSE(tbm_surface_internal_get_plane_data(NULL, 0, NULL, NULL, NULL));
352 TEST_F(SurfaceInternalTest, GetPlaneDataFailInvaildInput)
356 ASSERT_FALSE(tbm_surface_internal_get_plane_data((tbm_surface_h)&surf, 0, NULL, NULL, NULL));
357 ASSERT_FALSE(tbm_surface_internal_get_plane_data(surface, -1, NULL, NULL, NULL));
358 ASSERT_FALSE(tbm_surface_internal_get_plane_data(surface, 3, NULL, NULL, NULL));
361 TEST_F(SurfaceInternalTest, GetPlaneDataSuccess)
363 uint32_t size = 0, offset = 0, pitch = 0;
365 ASSERT_TRUE(tbm_surface_internal_get_plane_data(surface, 0, &size, NULL, NULL));
368 ASSERT_TRUE(tbm_surface_internal_get_plane_data(surface, 0, NULL, &offset, NULL));
370 ASSERT_TRUE(tbm_surface_internal_get_plane_data(surface, 0, NULL, NULL, &pitch));
374 /* tbm_surface_internal_get_bpp(tbm_format format) */
375 TEST_F(UtInit, GetBpp)
378 bpp = tbm_surface_internal_get_bpp(0);
381 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_RGB332);
384 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_RGB565);
387 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_RGB888);
390 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_ARGB8888);
393 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_NV12);
396 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_NV16);
399 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_YUV410);
402 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_YUV411);
405 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_YUV422);
408 bpp = tbm_surface_internal_get_bpp(TBM_FORMAT_YUV444);
411 /* tbm_surface_internal_get_plane_bo_idx(tbm_surface_h surface, int plane_idx) */
412 TEST_F(SurfaceInternalTest, GetPlaneBoIndexFailNull)
414 int idx = tbm_surface_internal_get_plane_bo_idx(NULL, 0);
418 TEST_F(SurfaceInternalTest, GetPlaneBoIndexFailInvaildInput)
423 idx = tbm_surface_internal_get_plane_bo_idx((tbm_surface_h)&surf, 0);
426 idx = tbm_surface_internal_get_plane_bo_idx(surface, -1);
430 TEST_F(SurfaceInternalTest, GetPlaneBoIndexSuccess)
434 idx = tbm_surface_internal_get_plane_bo_idx(surface, 0);
438 static int tbm_data_free_is_called = 0;
439 void data_free_handle(void *user_data)
441 ASSERT_TRUE(user_data == &tbm_data_free_is_called);
442 int *is_called = (int *)user_data;
446 /* tbm_surface_internal_add_user_data(tbm_surface_h surface, unsigned long key, tbm_data_free data_free_func) */
447 TEST_F(SurfaceInternalTest, AddUserDataFailNull)
449 static const unsigned long key_ud = 0;
450 ASSERT_FALSE(tbm_surface_internal_add_user_data(NULL, key_ud, NULL));
453 TEST_F(SurfaceInternalTest, AddUserDataFailInvaildInput)
455 static const unsigned long key_ud = 0;
457 ASSERT_FALSE(tbm_surface_internal_add_user_data((tbm_surface_h)&surf, key_ud, NULL));
460 TEST_F(SurfaceInternalTest, AddUserDataSuccess)
462 unsigned long key_ud = 157;
463 ASSERT_TRUE(tbm_surface_internal_add_user_data(surface, key_ud, NULL));
466 TEST_F(SurfaceInternalTest, AddUserDataFailDoubleKey)
468 unsigned long key_ud = 5487;
469 ASSERT_TRUE(tbm_surface_internal_add_user_data(surface, key_ud, NULL));
471 ASSERT_FALSE(tbm_surface_internal_add_user_data(surface, key_ud, NULL));
474 /* tbm_surface_internal_set_user_data(tbm_surface_h surface, unsigned long key, void *data) */
475 TEST_F(SurfaceInternalTest, SetUserDataFailNull)
477 static const unsigned long key_ud = 0;
478 ASSERT_FALSE(tbm_surface_internal_set_user_data(NULL, key_ud, &tbm_data_free_is_called));
481 TEST_F(SurfaceInternalTest, SetUserDataFailInvaildInput)
483 static const unsigned long key_ud = 0;
486 ASSERT_FALSE(tbm_surface_internal_set_user_data(surface,
487 key_ud, &tbm_data_free_is_called)) << "invalid key";
489 ASSERT_FALSE(tbm_surface_internal_set_user_data((tbm_surface_h)&surf,
490 key_ud, &tbm_data_free_is_called)) << "invalid surface";
494 TEST_F(SurfaceInternalTest, SetUserDataSuccess)
496 unsigned long key_ud = 87947;
497 ASSERT_TRUE(tbm_surface_internal_add_user_data(surface, key_ud, data_free_handle));
500 ASSERT_TRUE(tbm_surface_internal_set_user_data(surface, key_ud, &tbm_data_free_is_called));
502 /*the second call: previous data has to be released*/
503 tbm_data_free_is_called = 0;
504 ASSERT_TRUE(tbm_surface_internal_set_user_data(surface, key_ud, NULL));
505 ASSERT_TRUE(tbm_data_free_is_called);
507 /*the third call: previous data(NULL) hasn't to be released*/
508 tbm_data_free_is_called = 0;
509 ASSERT_TRUE(tbm_surface_internal_set_user_data(surface, key_ud, NULL));
510 ASSERT_FALSE(tbm_data_free_is_called);
513 /* tbm_surface_internal_get_user_data(tbm_surface_h surface, unsigned long key, void **data) */
514 TEST_F(SurfaceInternalTest, GetUserDataFailNull)
516 static const unsigned long key_ud = 0;
518 ASSERT_FALSE(tbm_surface_internal_get_user_data(NULL, key_ud, (void **)&data));
520 ASSERT_FALSE(tbm_surface_internal_get_user_data(surface, key_ud, NULL));
523 TEST_F(SurfaceInternalTest, GetUserDataFailInvaildInput)
525 static const unsigned long key_ud = 0;
529 ASSERT_FALSE(tbm_surface_internal_get_user_data(surface,
530 key_ud, (void **)&data)) << "invalid key" << std::endl;
532 ASSERT_FALSE(tbm_surface_internal_get_user_data((tbm_surface_h)&surf,
533 key_ud, (void **)&data)) << "invalid surface" << std::endl;
537 TEST_F(SurfaceInternalTest, GetUserDataSuccess)
539 unsigned long key_ud = 97456789;
542 ASSERT_TRUE(tbm_surface_internal_add_user_data(surface, key_ud, data_free_handle));
543 ASSERT_TRUE(tbm_surface_internal_set_user_data(surface, key_ud, &tbm_data_free_is_called));
546 ASSERT_TRUE(tbm_surface_internal_get_user_data(surface, key_ud, (void **)&data));
547 ASSERT_TRUE(data == &tbm_data_free_is_called);
549 /* check if data is NULL */
550 ASSERT_TRUE(tbm_surface_internal_set_user_data(surface, key_ud, NULL));
551 ASSERT_TRUE(tbm_surface_internal_get_user_data(surface, key_ud, (void **)&data));
552 ASSERT_TRUE(data == NULL);
555 /* tbm_surface_internal_delete_user_data(tbm_surface_h surface, unsigned long key) */
556 TEST_F(SurfaceInternalTest, DeleteUserDataFailNull)
558 static const int key_ud = 0;
559 ASSERT_FALSE(tbm_surface_internal_delete_user_data(NULL, key_ud));
562 TEST_F(SurfaceInternalTest, DeleteUserDataFailInvaildInput)
564 static const int key_ud = 0;
566 ASSERT_FALSE(tbm_surface_internal_delete_user_data(surface, key_ud)) << "invalid key";
568 ASSERT_FALSE(tbm_surface_internal_delete_user_data((tbm_surface_h)&surf, key_ud)) << "invalid surface";
571 TEST_F(SurfaceInternalTest, DeleteUserDataSuccess)
573 unsigned long key_ud = UINT_MAX;
575 ASSERT_TRUE(tbm_surface_internal_add_user_data(surface, key_ud, data_free_handle));
576 ASSERT_TRUE(tbm_surface_internal_set_user_data(surface, key_ud, &tbm_data_free_is_called));
578 tbm_data_free_is_called = 0;
579 ASSERT_TRUE(tbm_surface_internal_delete_user_data(surface, key_ud));
580 ASSERT_TRUE(tbm_data_free_is_called);
581 ASSERT_FALSE(tbm_surface_internal_set_user_data(surface, key_ud, &tbm_data_free_is_called));