1/* 2 * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "drawing_color.h" 17#include "drawing_error_code.h" 18#include "drawing_filter.h" 19#include "drawing_mask_filter.h" 20#include "drawing_rect.h" 21#include "drawing_round_rect.h" 22#include "utils/scalar.h" 23#include "gtest/gtest.h" 24#include <random> 25 26using namespace testing; 27using namespace testing::ext; 28 29namespace OHOS { 30namespace Rosen { 31namespace Drawing { 32class DrawingNativeRoundRectTest : public testing::Test {}; 33 34/* 35 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0100 36 * @tc.name: testRoundRectCreateNormal 37 * @tc.desc: test for testRoundRectCreateNormal. 38 * @tc.size : SmallTest 39 * @tc.type : Function 40 * @tc.level : Level 0 41 */ 42HWTEST_F(DrawingNativeRoundRectTest, testRoundRectCreateNormal, TestSize.Level0) { 43 // 1. OH_Drawing_RoundRectCreate 44 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 45 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 46 // 2. Free memory 47 OH_Drawing_RoundRectDestroy(roundRect); 48 OH_Drawing_RectDestroy(rect); 49} 50 51/* 52 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0101 53 * @tc.name: testRoundRectCreateNull 54 * @tc.desc: test for testRoundRectCreateNull. 55 * @tc.size : SmallTest 56 * @tc.type : Function 57 * @tc.level : Level 3 58 */ 59HWTEST_F(DrawingNativeRoundRectTest, testRoundRectCreateNull, TestSize.Level3) { 60 // 1. OH_Drawing_RoundRectCreate with nullptr as the first parameter, check the error code using 61 // OH_Drawing_ErrorCodeGet 62 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 63 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(nullptr, 20, 20); 64 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 65 // 2. OH_Drawing_RoundRectCreate with 0 as the second parameter 66 OH_Drawing_RoundRect *roundRect2 = OH_Drawing_RoundRectCreate(rect, 0, 20); 67 // 3. OH_Drawing_RoundRectCreate with 0 as the third parameter 68 OH_Drawing_RoundRect *roundRect3 = OH_Drawing_RoundRectCreate(rect, 20, 0); 69 // 4. Free memory 70 OH_Drawing_RoundRectDestroy(roundRect); 71 OH_Drawing_RoundRectDestroy(roundRect2); 72 OH_Drawing_RoundRectDestroy(roundRect3); 73 OH_Drawing_RectDestroy(rect); 74} 75 76/* 77 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0102 78 * @tc.name: testRoundRectCreateAbnormal 79 * @tc.desc: test for testRoundRectCreateAbnormal. 80 * @tc.size : SmallTest 81 * @tc.type : Function 82 * @tc.level : Level 3 83 */ 84HWTEST_F(DrawingNativeRoundRectTest, testRoundRectCreateAbnormal, TestSize.Level3) { 85 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 86 // 1. OH_Drawing_RoundRectCreate with a negative value for the second parameter xRad 87 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, -20, 20); 88 // 2. OH_Drawing_RoundRectCreate with a negative value for the third parameter yRad 89 OH_Drawing_RoundRect *roundRect2 = OH_Drawing_RoundRectCreate(rect, 20, -20); 90 // 3. Free memory 91 OH_Drawing_RoundRectDestroy(roundRect); 92 OH_Drawing_RoundRectDestroy(roundRect2); 93 OH_Drawing_RectDestroy(rect); 94} 95 96/* 97 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0103 98 * @tc.name: testRoundRectCreateMaximum 99 * @tc.desc: test for testRoundRectCreateMaximum. 100 * @tc.size : SmallTest 101 * @tc.type : Function 102 * @tc.level : Level 3 103 */ 104HWTEST_F(DrawingNativeRoundRectTest, testRoundRectCreateMaximum, TestSize.Level3) { 105 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 106 // 1. OH_Drawing_RoundRectCreate with the second parameter xRad as the maximum value 107 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, FLT_MAX, 20); 108 // 2. OH_Drawing_RoundRectCreate with the third parameter yRad as the maximum value 109 OH_Drawing_RoundRect *roundRect2 = OH_Drawing_RoundRectCreate(rect, 20, FLT_MAX); 110 // 3. Free memory 111 OH_Drawing_RoundRectDestroy(roundRect); 112 OH_Drawing_RoundRectDestroy(roundRect2); 113 OH_Drawing_RectDestroy(rect); 114} 115 116/* 117 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0104 118 * @tc.name: testRoundRectCreateMultipleCalls 119 * @tc.desc: test for testRoundRectCreateMultipleCalls. 120 * @tc.size : SmallTest 121 * @tc.type : Function 122 * @tc.level : Level 3 123 */ 124HWTEST_F(DrawingNativeRoundRectTest, testRoundRectCreateMultipleCalls, TestSize.Level3) { 125 // 1. Call OH_Drawing_RoundRectCreate 10 times 126 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 127 for (int i = 0; i < 10; i++) { 128 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 129 EXPECT_NE(roundRect, nullptr); 130 OH_Drawing_RoundRectDestroy(roundRect); 131 } 132} 133 134/* 135 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0200 136 * @tc.name: testRoundRectSetGetCornerNormal 137 * @tc.desc: test for testRoundRectSetGetCornerNormal. 138 * @tc.size : SmallTest 139 * @tc.type : Function 140 * @tc.level : Level 0 141 */ 142HWTEST_F(DrawingNativeRoundRectTest, testRoundRectSetGetCornerNormal, TestSize.Level0) { 143 // 1. OH_Drawing_RoundRectCreate 144 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 145 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 146 // 2. Enumerate OH_Drawing_RoundRectSetCorner and OH_Drawing_RoundRectGetCorner with OH_Drawing_CornerPos values 147 OH_Drawing_CornerPos posArray[] = { 148 CORNER_POS_TOP_LEFT, 149 CORNER_POS_TOP_RIGHT, 150 CORNER_POS_BOTTOM_RIGHT, 151 CORNER_POS_BOTTOM_LEFT, 152 }; 153 for (OH_Drawing_CornerPos pos : posArray) { 154 OH_Drawing_RoundRectSetCorner(roundRect, pos, {10.0f, 10.0f}); 155 OH_Drawing_Corner_Radii radii = OH_Drawing_RoundRectGetCorner(roundRect, pos); 156 EXPECT_EQ(IsScalarAlmostEqual(radii.x, 10.0f), true); 157 EXPECT_EQ(IsScalarAlmostEqual(radii.y, 10.0f), true); 158 } 159 // 3. OH_Drawing_RoundRectSetCorner with integer values for x and y radii, and call OH_Drawing_RoundRectGetCorner to 160 // retrieve the values 161 OH_Drawing_RoundRectSetCorner(roundRect, CORNER_POS_TOP_LEFT, {10, 10}); 162 OH_Drawing_Corner_Radii radii = OH_Drawing_RoundRectGetCorner(roundRect, CORNER_POS_TOP_LEFT); 163 EXPECT_EQ(IsScalarAlmostEqual(radii.x, 10), true); 164 EXPECT_EQ(IsScalarAlmostEqual(radii.y, 10), true); 165 // 4. OH_Drawing_RoundRectSetCorner with decimal values for x and y radii, and call OH_Drawing_RoundRectGetCorner to 166 // retrieve the values 167 OH_Drawing_RoundRectSetCorner(roundRect, CORNER_POS_TOP_LEFT, {10.1f, 10.1f}); 168 OH_Drawing_Corner_Radii radii2 = OH_Drawing_RoundRectGetCorner(roundRect, CORNER_POS_TOP_LEFT); 169 EXPECT_EQ(IsScalarAlmostEqual(radii2.x, 10.1f), true); 170 EXPECT_EQ(IsScalarAlmostEqual(radii2.y, 10.1f), true); 171 // 5. Free memory 172 OH_Drawing_RoundRectDestroy(roundRect); 173 OH_Drawing_RectDestroy(rect); 174} 175 176/* 177 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0201 178 * @tc.name: testRoundRectSetGetCornerNull 179 * @tc.desc: test for testRoundRectSetGetCornerNull. 180 * @tc.size : SmallTest 181 * @tc.type : Function 182 * @tc.level : Level 3 183 */ 184HWTEST_F(DrawingNativeRoundRectTest, testRoundRectSetGetCornerNull, TestSize.Level3) { 185 // 1. OH_Drawing_RoundRectCreate 186 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 187 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 188 // 2. OH_Drawing_RoundRectSetCorner with nullptr as the first parameter, check the error code using 189 // OH_Drawing_ErrorCodeGet 190 OH_Drawing_RoundRectSetCorner(nullptr, CORNER_POS_TOP_LEFT, {10.0f, 10.0f}); 191 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 192 // 3. OH_Drawing_RoundRectSetCorner with 0 as the third parameter 193 OH_Drawing_RoundRectSetCorner(roundRect, CORNER_POS_TOP_LEFT, {0, 0}); 194 // 4. OH_Drawing_RoundRectGetCorner with nullptr as the first parameter, check the error code using 195 // OH_Drawing_ErrorCodeGet 196 OH_Drawing_RoundRectGetCorner(nullptr, CORNER_POS_TOP_LEFT); 197 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 198 // 5. Free memory 199 OH_Drawing_RoundRectDestroy(roundRect); 200 OH_Drawing_RectDestroy(rect); 201} 202 203/* 204 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0202 205 * @tc.name: testRoundRectSetGetCornerAbnormal 206 * @tc.desc: test for testRoundRectSetGetCornerAbnormal. 207 * @tc.size : SmallTest 208 * @tc.type : Function 209 * @tc.level : Level 3 210 */ 211HWTEST_F(DrawingNativeRoundRectTest, testRoundRectSetGetCornerAbnormal, TestSize.Level3) { 212 // 1. OH_Drawing_RoundRectCreate 213 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 214 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 215 // 2. OH_Drawing_RoundRectSetCorner with negative value for x-axis in OH_Drawing_Corner_Radii, followed by 216 // OH_Drawing_RoundRectGetCorner 217 OH_Drawing_RoundRectSetCorner(roundRect, CORNER_POS_TOP_LEFT, {-10.0f, 10.0f}); 218 OH_Drawing_Corner_Radii radii = OH_Drawing_RoundRectGetCorner(roundRect, CORNER_POS_TOP_LEFT); 219 EXPECT_EQ(IsScalarAlmostEqual(radii.x, -10.0f), true); 220 EXPECT_EQ(IsScalarAlmostEqual(radii.y, 10.0f), true); 221 // 3. OH_Drawing_RoundRectSetCorner with negative value for y-axis in OH_Drawing_Corner_Radii, followed by 222 // OH_Drawing_RoundRectGetCorner 223 OH_Drawing_RoundRectSetCorner(roundRect, CORNER_POS_TOP_LEFT, {10.0f, -10.0f}); 224 OH_Drawing_Corner_Radii radii2 = OH_Drawing_RoundRectGetCorner(roundRect, CORNER_POS_TOP_LEFT); 225 EXPECT_EQ(IsScalarAlmostEqual(radii2.x, 10.0f), true); 226 EXPECT_EQ(IsScalarAlmostEqual(radii2.y, -10.0f), true); 227 // 4. Free memory 228 OH_Drawing_RoundRectDestroy(roundRect); 229 OH_Drawing_RectDestroy(rect); 230} 231 232/* 233 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0203 234 * @tc.name: testRoundRectSetGetCornerMaximum 235 * @tc.desc: test for testRoundRectSetGetCornerMaximum. 236 * @tc.size : SmallTest 237 * @tc.type : Function 238 * @tc.level : Level 3 239 */ 240HWTEST_F(DrawingNativeRoundRectTest, testRoundRectSetGetCornerMaximum, TestSize.Level3) { 241 // 1. OH_Drawing_RoundRectCreate 242 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 243 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 244 // 2. Call OH_Drawing_RoundRectSetCorner with the maximum value for the x-axis in OH_Drawing_Corner_Radii, followed 245 // by OH_Drawing_RoundRectGetCorner 246 OH_Drawing_RoundRectSetCorner(roundRect, CORNER_POS_TOP_LEFT, {FLT_MAX, 10.0f}); 247 OH_Drawing_Corner_Radii radii = OH_Drawing_RoundRectGetCorner(roundRect, CORNER_POS_TOP_LEFT); 248 EXPECT_EQ(IsScalarAlmostEqual(radii.x, FLT_MAX), true); 249 EXPECT_EQ(IsScalarAlmostEqual(radii.y, 10.0f), true); 250 // 3. Call OH_Drawing_RoundRectSetCorner with the maximum value for the y-axis in OH_Drawing_Corner_Radii, followed 251 // by OH_Drawing_RoundRectGetCorner 252 OH_Drawing_RoundRectSetCorner(roundRect, CORNER_POS_TOP_LEFT, {10.0f, FLT_MAX}); 253 OH_Drawing_Corner_Radii radii2 = OH_Drawing_RoundRectGetCorner(roundRect, CORNER_POS_TOP_LEFT); 254 EXPECT_EQ(IsScalarAlmostEqual(radii2.x, 10.0f), true); 255 EXPECT_EQ(IsScalarAlmostEqual(radii2.y, FLT_MAX), true); 256 // 4. Free memory 257 OH_Drawing_RoundRectDestroy(roundRect); 258 OH_Drawing_RectDestroy(rect); 259} 260 261/* 262 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0204 263 * @tc.name: testRoundRectSetGetCornerMultipleCalls 264 * @tc.desc: test for testRoundRectSetGetCornerMultipleCalls. 265 * @tc.size : SmallTest 266 * @tc.type : Function 267 * @tc.level : Level 3 268 */ 269HWTEST_F(DrawingNativeRoundRectTest, testRoundRectSetGetCornerMultipleCalls, TestSize.Level3) { 270 // 1. OH_Drawing_RoundRectCreate 271 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 272 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 273 // 2. OH_Drawing_RoundRectSetCorner (pass random values for x-axis and y-axis radii, and a random enum value for 274 // OH_Drawing_CornerPos), followed by calling OH_Drawing_RoundRectGetCorner 275 std::random_device rd; 276 std::mt19937 gen(rd()); 277 std::uniform_real_distribution<float> dis(0, 100); 278 std::uniform_int_distribution<int> dis2(0, 3); 279 for (int i = 0; i < 10; i++) { 280 float x = dis(gen); 281 float y = dis(gen); 282 OH_Drawing_CornerPos pos = static_cast<OH_Drawing_CornerPos>(dis2(gen)); 283 OH_Drawing_RoundRectSetCorner(roundRect, pos, {x, y}); 284 OH_Drawing_Corner_Radii radii = OH_Drawing_RoundRectGetCorner(roundRect, pos); 285 EXPECT_EQ(IsScalarAlmostEqual(radii.x, x), true); 286 EXPECT_EQ(IsScalarAlmostEqual(radii.y, y), true); 287 } 288 // 3. Free memory 289 OH_Drawing_RoundRectDestroy(roundRect); 290 OH_Drawing_RectDestroy(rect); 291} 292 293/* 294 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0205 295 * @tc.name: testRoundRectGetCornerWhenNoSet 296 * @tc.desc: test for testRoundRectGetCornerWhenNoSet. 297 * @tc.size : SmallTest 298 * @tc.type : Function 299 * @tc.level : Level 2 300 */ 301HWTEST_F(DrawingNativeRoundRectTest, testRoundRectGetCornerWhenNoSet, TestSize.Level2) { 302 // 1. OH_Drawing_RoundRectCreate 303 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 304 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 305 // 2. Call OH_Drawing_RoundRectGetCorner directly 306 OH_Drawing_Corner_Radii radii = OH_Drawing_RoundRectGetCorner(roundRect, CORNER_POS_TOP_LEFT); 307 EXPECT_EQ(IsScalarAlmostEqual(radii.x, 20), true); 308 EXPECT_EQ(IsScalarAlmostEqual(radii.y, 20), true); 309 // 3. Free memory 310 OH_Drawing_RoundRectDestroy(roundRect); 311 OH_Drawing_RectDestroy(rect); 312} 313 314/* 315 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0300 316 * @tc.name: testRoundRectDestroyNormal 317 * @tc.desc: test for testRoundRectDestroyNormal. 318 * @tc.size : SmallTest 319 * @tc.type : Function 320 * @tc.level : Level 0 321 */ 322HWTEST_F(DrawingNativeRoundRectTest, testRoundRectDestroyNormal, TestSize.Level0) { 323 // 1. OH_Drawing_RoundRectCreate 324 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 325 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 326 // 2. OH_Drawing_RoundRectDestroy 327 OH_Drawing_RoundRectDestroy(roundRect); 328 OH_Drawing_RectDestroy(rect); 329} 330 331/* 332 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0301 333 * @tc.name: testRoundRectDestroyNull 334 * @tc.desc: test for testRoundRectDestroyNull. 335 * @tc.size : SmallTest 336 * @tc.type : Function 337 * @tc.level : Level 3 338 */ 339HWTEST_F(DrawingNativeRoundRectTest, testRoundRectDestroyNull, TestSize.Level3) { 340 // 1. OH_Drawing_RoundRectDestroy with nullptr as the parameter 341 OH_Drawing_RoundRectDestroy(nullptr); 342} 343 344/* 345 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0400 346 * @tc.name: testRoundRectOffsetNormal 347 * @tc.desc: test for testRoundRectOffsetNormal. 348 * @tc.size : SmallTest 349 * @tc.type : Function 350 * @tc.level : Level 0 351 */ 352HWTEST_F(DrawingNativeRoundRectTest, testRoundRectOffsetNormal, TestSize.Level0) { 353 //1. OH_Drawing_RoundRectCreate with the second parameter as integar values 354 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 355 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 356 //2. OH_Drawing_RoundRectCreate with the second parameter as floating-point values 357 OH_Drawing_RoundRect *roundRect1 = OH_Drawing_RoundRectCreate(rect, 20.f, 20); 358 //3. OH_Drawing_RoundRectCreate with the first parameter as integar values 359 OH_Drawing_RoundRect *roundRect2 = OH_Drawing_RoundRectCreate(rect, 20, 20); 360 //4. OH_Drawing_RoundRectCreate with the first parameter as floating-point values 361 OH_Drawing_Rect *rect1 = OH_Drawing_RectCreate(0.f, 0.f, 100.f, 100.f); 362 OH_Drawing_RoundRect *roundRect3 = OH_Drawing_RoundRectCreate(rect1, 20, 20); 363 OH_Drawing_RoundRectDestroy(roundRect); 364 OH_Drawing_RoundRectDestroy(roundRect1); 365 OH_Drawing_RoundRectDestroy(roundRect2); 366 OH_Drawing_RoundRectDestroy(roundRect3); 367} 368 369/* 370 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0401 371 * @tc.name: testRoundRectOffsetNull 372 * @tc.desc: test for testRoundRectOffsetNull. 373 * @tc.size : SmallTest 374 * @tc.type : Function 375 * @tc.level : Level 3 376 */ 377HWTEST_F(DrawingNativeRoundRectTest, testRoundRectOffsetNull, TestSize.Level3) { 378 // 1. Call OH_Drawing_RoundRectOffset with nullptr as the first parameter, check the error code using 379 // OH_Drawing_ErrorCodeGet 380 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 381 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20); 382 OH_Drawing_RoundRectOffset(nullptr, 1.0f, 1.0f); 383 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER); 384 // 2. Call OH_Drawing_RoundRectOffset with 0 as the second parameter, check the error code using 385 // OH_Drawing_ErrorCodeGet 386 OH_Drawing_RoundRectOffset(roundRect, 0, 1.0f); 387 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER); 388 // 3. Call OH_Drawing_RoundRectOffset with 0 as the third parameter, check the error code using 389 // OH_Drawing_ErrorCodeGet 390 OH_Drawing_RoundRectOffset(roundRect, 1.0f, 0); 391 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_Drawing_ErrorCode::OH_DRAWING_ERROR_INVALID_PARAMETER); 392 //4. free memory 393 OH_Drawing_RoundRectDestroy(roundRect); 394 OH_Drawing_RectDestroy(rect); 395} 396 397/* 398 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_ROUND_RECT_0402 399 * @tc.name: testRoundRectOffsetMultipleCalls 400 * @tc.desc: test for testRoundRectOffsetMultipleCalls. 401 * @tc.size : SmallTest 402 * @tc.type : Function 403 * @tc.level : Level 3 404 */ 405HWTEST_F(DrawingNativeRoundRectTest, testRoundRectOffsetMultipleCalls, TestSize.Level3) { 406 //1. Call OH_Drawing_RoundRectCreate with random values 407 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100); 408 std::random_device rd; 409 std::mt19937 gen(rd()); 410 std::uniform_real_distribution<float> dis(0, 100); 411 for (int i = 0; i < 10; i++) { 412 OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(rect, dis(gen), dis(gen)); 413 OH_Drawing_RoundRectDestroy(roundRect); 414 } 415 //2. free memory 416 OH_Drawing_RectDestroy(rect); 417} 418 419} // namespace Drawing 420} // namespace Rosen 421} // namespace OHOS