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 /* The tbm_surface.h contains the public APIs. Therefore, the error values has TBM_SURFACE_ prefix,
34 * but the values of the TBM_SURFACE_ prefix error types has the same vaules as TBM_ERROR_ prefix types.
35 * We check the two error types in this TBMSurface testcase.
38 class TBMSurface : public TBMBufmgr
49 tbm_surface_h surface;
52 void TBMSurface::SetUp()
54 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
58 result = (tbm_surface_error_e)tbm_surface_query_formats(&formats, &num_formats);
59 ASSERT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_NONE));
60 ASSERT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_NONE));
62 for (uint32_t i = 0; i < num_formats; i++)
63 if (formats[i] == TBM_FORMAT_ARGB8888)
64 format = TBM_FORMAT_ARGB8888;
66 /* fail if there is no TBM_FORMAT_ARGB8888 format */
67 ASSERT_TRUE(format == TBM_FORMAT_ARGB8888);
71 surface = tbm_surface_internal_create_with_flags(width, height, format, TBM_BO_DEFAULT);
72 ASSERT_TRUE(surface != NULL);
73 ASSERT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_NONE));
74 ASSERT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
77 void TBMSurface::TearDown()
80 tbm_surface_internal_destroy(surface);
81 ASSERT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_NONE));
82 ASSERT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
87 TBMBufmgr::TearDown();
90 static int memory_for_invalid_param;
91 static tbm_surface_h invalid_surface = (tbm_surface_h)&memory_for_invalid_param;
93 TEST_F(TBMSurface, SurfaceCeateFailInvalidGeometry)
95 tbm_surface_h surf1 = NULL;
97 surf1 = tbm_surface_create(-1, 1024, TBM_FORMAT_ARGB8888);
98 EXPECT_EQ(nullptr, surf1); // Expected Value: NULL
99 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
100 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
102 surf1 = tbm_surface_create(720, -1, TBM_FORMAT_ARGB8888);
103 EXPECT_EQ(nullptr, surf1);
104 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
105 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
107 surf1 = tbm_surface_create(720, 1024, 0);
108 EXPECT_EQ(nullptr, surf1);
109 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
110 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
113 TEST_F(TBMSurface, SurfaceCeateSuccess)
115 tbm_surface_h surf1 = NULL;
116 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
118 for (uint32_t i = 0; i < num_formats; i++) {
119 surf1 = tbm_surface_create(720, 1024, formats[i]);
120 EXPECT_NE((tbm_surface_h)NULL, surf1);
121 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_NONE));
122 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
123 result = (tbm_surface_error_e)tbm_surface_destroy(surf1);
124 EXPECT_EQ(TBM_SURFACE_ERROR_NONE, result);
125 EXPECT_EQ(TBM_ERROR_NONE, result);
129 TEST_F(TBMSurface, SurfaceGetFormatFailInvalidInput)
131 tbm_format fmt = tbm_surface_get_format(invalid_surface);
133 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
134 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
137 TEST_F(TBMSurface, SurfaceGetFormatFailNull)
139 tbm_format fmt = tbm_surface_get_format(NULL);
141 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
142 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
145 TEST_F(TBMSurface, SurfaceGetFormatSuccess)
147 tbm_format fmt = tbm_surface_get_format(surface);
148 EXPECT_EQ(this->format, fmt);
149 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_NONE));
150 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
153 TEST_F(TBMSurface, SurfaceGetWidthFailInvalidInput)
155 int width = tbm_surface_get_width(invalid_surface);
156 EXPECT_EQ(width, TBM_SURFACE_ERROR_INVALID_PARAMETER);
157 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
158 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
161 TEST_F(TBMSurface, SurfaceGetWidthFailNull)
163 int width = tbm_surface_get_width(NULL);
164 EXPECT_EQ(width, TBM_SURFACE_ERROR_INVALID_PARAMETER);
165 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
166 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
169 TEST_F(TBMSurface, SurfaceGetWidthSuccess)
171 int width = tbm_surface_get_width(surface);
172 EXPECT_EQ(this->width, width);
173 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_NONE));
174 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
177 TEST_F(TBMSurface, SurfaceGetHeightFailInvalidInput)
179 int height = tbm_surface_get_height(invalid_surface);
180 EXPECT_EQ(height, TBM_SURFACE_ERROR_INVALID_PARAMETER);
181 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
182 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
185 TEST_F(TBMSurface, SurfaceGetHeightFailNull)
187 int height = tbm_surface_get_height(NULL);
188 EXPECT_EQ(height, TBM_SURFACE_ERROR_INVALID_PARAMETER);
189 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
190 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
193 TEST_F(TBMSurface, SurfaceGetHeightSuccess)
195 int height = tbm_surface_get_height(surface);
196 EXPECT_EQ(this->height, height);
197 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_SURFACE_ERROR_NONE));
198 EXPECT_STREQ(tbm_error_str(tbm_get_last_error()), tbm_error_str(TBM_ERROR_NONE));
201 TEST_F(TBMSurface, SurfaceGetInfoInvalidInput)
203 tbm_surface_info_s info;
204 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
206 result = (tbm_surface_error_e)tbm_surface_get_info(invalid_surface, &info);
207 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
208 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
211 TEST_F(TBMSurface, SurfaceGetInfoFailNull)
213 tbm_surface_info_s info;
214 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
216 result = (tbm_surface_error_e)tbm_surface_get_info(surface, NULL);
217 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
218 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
220 result = (tbm_surface_error_e)tbm_surface_get_info(NULL, &info);
221 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
222 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
224 result = (tbm_surface_error_e)tbm_surface_get_info(NULL, NULL);
225 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
226 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
229 TEST_F(TBMSurface, SurfaceGetInfoSuccess)
231 tbm_surface_info_s info;
232 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
234 result = (tbm_surface_error_e)tbm_surface_get_info(surface, &info);
235 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_NONE));
236 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_NONE));
237 EXPECT_EQ(this->format, info.format);
238 EXPECT_EQ(this->height, info.height);
239 EXPECT_EQ(this->width, info.width);
240 EXPECT_GT(info.num_planes, 0);
241 EXPECT_GT(info.bpp, 0);
242 EXPECT_GT(info.size, 0);
245 TEST_F(TBMSurface, SurfaceMapFailInvalidInput)
247 tbm_surface_info_s info;
248 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
250 result = (tbm_surface_error_e)tbm_surface_map(invalid_surface, 0, &info);
251 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
252 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
255 TEST_F(TBMSurface, SurfaceMapFailNull)
257 tbm_surface_info_s info;
258 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
260 result = (tbm_surface_error_e)tbm_surface_map(surface, 0, NULL);
261 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
262 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
264 result = (tbm_surface_error_e)tbm_surface_map(NULL, 0, &info);
265 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
266 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
269 TEST_F(TBMSurface, SurfaceMapSuccess)
271 tbm_surface_info_s info;
272 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
274 result = (tbm_surface_error_e)tbm_surface_map(surface, 0, &info);
275 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_NONE));
276 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_NONE));
277 EXPECT_EQ(this->format, info.format);
278 EXPECT_EQ(this->height, info.height);
279 EXPECT_EQ(this->width, info.width);
280 EXPECT_GT(info.num_planes, 0);
281 EXPECT_GT(info.bpp, 0);
282 EXPECT_GT(info.size, 0);
284 result = (tbm_surface_error_e)tbm_surface_unmap(surface);
285 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_NONE));
286 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_NONE));
289 TEST_F(TBMSurface, SurfaceUnmapFailInvalidInput)
291 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
292 result = (tbm_surface_error_e)tbm_surface_unmap(invalid_surface);
293 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
294 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));
297 TEST_F(TBMSurface, SurfaceUnmapFailNull)
299 tbm_surface_error_e result = TBM_SURFACE_ERROR_NONE;
301 result = (tbm_surface_error_e)tbm_surface_unmap(NULL);
302 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_SURFACE_ERROR_INVALID_PARAMETER));
303 EXPECT_STREQ(tbm_error_str(result), tbm_error_str(TBM_ERROR_INVALID_PARAMETER));