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_bitmap.h" 17 #include "drawing_brush.h" 18 #include "drawing_canvas.h" 19 #include "drawing_color.h" 20 #include "drawing_color_filter.h" 21 #include "drawing_filter.h" 22 #include "drawing_font.h" 23 #include "drawing_image.h" 24 #include "drawing_mask_filter.h" 25 #include "drawing_matrix.h" 26 #include "drawing_memory_stream.h" 27 #include "drawing_path.h" 28 #include "drawing_pen.h" 29 #include "drawing_point.h" 30 #include "drawing_rect.h" 31 #include "drawing_region.h" 32 #include "drawing_round_rect.h" 33 #include "drawing_sampling_options.h" 34 #include "drawing_shader_effect.h" 35 #include "drawing_text_blob.h" 36 #include "drawing_typeface.h" 37 #include "utils/scalar.h" 38 #include "gtest/gtest.h" 39 #include <random> 40 41 #define NUMBER_10 10 42 #define NUMBER_100 100 43 #define NUMBER_400_1 400.1 44 #define NUMBER_900 900 45 #define NUMBER_1000000 1000000 46 47 48 using namespace testing; 49 using namespace testing::ext; 50 51 namespace OHOS { 52 namespace Rosen { 53 namespace Drawing { 54 class DrawingNativeFontPart2Test : public testing::Test { 55 protected: 56 // 在每个测试用例执行前调用 SetUp()57 void SetUp() override 58 { 59 // 设置代码 60 std::cout << "DrawingNativeFontPart2Test Setup code called before each test case." << std::endl; 61 OH_Drawing_ErrorCodeReset(); 62 std::cout << "DrawingNativeFontPart2Test errorCodeReset before each test case." << std::endl; 63 } TearDown()64 void TearDown() override 65 { 66 std::cout << "DrawingNativeFontPart2Test Setup code called after each test case." << std::endl; 67 OH_Drawing_ErrorCodeReset(); 68 std::cout << "DrawingNativeFontPart2Test errorCodeReset after each test case." << std::endl; 69 } 70 }; 71 72 /* 73 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2000 74 * @tc.name: testFontArgumentsCreateNormal 75 * @tc.desc: Test for testFontArgumentsCreateNormal. 76 * @tc.size : SmallTest 77 * @tc.type : Function 78 * @tc.level : Level 0 79 */ 80 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsCreateNormal, TestSize.Level0) { 81 // 1. OH_Drawing_FontArgumentsCreate 82 OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate(); 83 // add assert 84 EXPECT_NE(fontArguments, nullptr); 85 OH_Drawing_FontArgumentsDestroy(fontArguments); 86 } 87 88 /* 89 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2100 90 * @tc.name: testFontArgumentsAddVariationNormal 91 * @tc.desc: test for testFontArgumentsAddVariationNormal. 92 * @tc.size : SmallTest 93 * @tc.type : Function 94 * @tc.level : Level 3 95 */ 96 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsAddVariationNormal, TestSize.Level0) { 97 // 1. OH_Drawing_FontArgumentsCreate 98 OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate(); 99 // add assert 100 EXPECT_NE(fontArguments, nullptr); 101 // 2. OH_Drawing_FontArgumentsAddVariation, should return OH_DRAWING_SUCCESS 102 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER; 103 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", 0); 104 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 105 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", -1); 106 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 107 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100); 108 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 109 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_400_1); 110 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 111 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_900); 112 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 113 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_1000000); 114 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 115 } 116 117 /* 118 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2101 119 * @tc.name: testFontArgumentsAddVariationNull 120 * @tc.desc: test for testFontArgumentsAddVariationNull. 121 * @tc.size : SmallTest 122 * @tc.type : Function 123 * @tc.level : Level 3 124 */ 125 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsAddVariationNull, TestSize.Level3) { 126 // 1. OH_Drawing_FontArgumentsCreate 127 OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate(); 128 // add assert 129 EXPECT_NE(fontArguments, nullptr); 130 // 2. OH_Drawing_FontArgumentsAddVariation, the first parameter is nullptr 131 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS; 132 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(nullptr, "wght", NUMBER_100); 133 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER); 134 // 3. OH_Drawing_FontArgumentsAddVariation, the second parameter is nullptr 135 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, nullptr, NUMBER_100); 136 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER); 137 } 138 139 /* 140 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2102 141 * @tc.name: testFontArgumentsAddVariationAbnormal 142 * @tc.desc: test for testFontArgumentsAddVariationAbnormal. 143 * @tc.size : SmallTest 144 * @tc.type : Function 145 * @tc.level : Level 3 146 */ 147 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsAddVariationAbnormal, TestSize.Level3) { 148 // 1. OH_Drawing_FontArgumentsCreate 149 OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate(); 150 // add assert 151 EXPECT_NE(fontArguments, nullptr); 152 // 2. OH_Drawing_FontArgumentsAddVariation, the second parameter is error 153 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS; 154 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "WGHT", NUMBER_100); 155 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 156 // 3. OH_Drawing_FontArgumentsAddVariation, the second parameter is error 157 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "w", NUMBER_100); 158 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER); 159 } 160 161 /* 162 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2103 163 * @tc.name: testFontArgumentsAddVariationMultipleCalls 164 * @tc.desc: test for testFontArgumentsAddVariationMultipleCalls. 165 * @tc.size : SmallTest 166 * @tc.type : Function 167 * @tc.level : Level 3 168 */ 169 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsAddVariationMultipleCalls, TestSize.Level3) { 170 // 1. OH_Drawing_FontArgumentsCreate 171 OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate(); 172 // add assert 173 EXPECT_NE(fontArguments, nullptr); 174 // 2. OH_Drawing_FontArgumentsAddVariation, should return OH_DRAWING_SUCCESS 175 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER; 176 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100); 177 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_900); 178 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 179 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100); 180 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", 0.0f); 181 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 182 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100); 183 drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", -1); 184 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 185 } 186 187 /* 188 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2200 189 * @tc.name: testFontArgumentsDestoryNormal 190 * @tc.desc: test for testFontArgumentsDestoryNormal. 191 * @tc.size : SmallTest 192 * @tc.type : Function 193 * @tc.level : Level 3 194 */ 195 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsDestoryNormal, TestSize.Level0) { 196 // 1. OH_Drawing_FontArgumentsCreate 197 OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate(); 198 // add assert 199 EXPECT_NE(fontArguments, nullptr); 200 // 2. OH_Drawing_FontArgumentsDestroy 201 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER; 202 drawingErrorCode = OH_Drawing_FontArgumentsDestroy(fontArguments); 203 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 204 } 205 206 /* 207 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2201 208 * @tc.name: testFontArgumentsDestoryNull 209 * @tc.desc: test for testFontArgumentsDestoryNull. 210 * @tc.size : SmallTest 211 * @tc.type : Function 212 * @tc.level : Level 3 213 */ 214 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsDestoryNull, TestSize.Level0) { 215 // 1. OH_Drawing_FontArgumentsCreate 216 OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate(); 217 // add assert 218 EXPECT_NE(fontArguments, nullptr); 219 // 2. OH_Drawing_FontArgumentsDestroy, parameter is null 220 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS; 221 drawingErrorCode = OH_Drawing_FontArgumentsDestroy(nullptr); 222 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER); 223 OH_Drawing_FontArgumentsDestroy(fontArguments); 224 } 225 226 /* 227 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2202 228 * @tc.name: testFontArgumentsDestoryMultiplieCalls 229 * @tc.desc: test for testFontArgumentsDestoryMultiplieCalls. 230 * @tc.size : SmallTest 231 * @tc.type : Function 232 * @tc.level : Level 3 233 */ 234 HWTEST_F(DrawingNativeFontPart2Test, testFontArgumentsDestoryMultiplieCalls, TestSize.Level0) { 235 // 1. OH_Drawing_FontCreate 236 OH_Drawing_FontArguments *fontArguments = nullptr; 237 for (int i = 0; i < NUMBER_10; i++) 238 { 239 fontArguments = OH_Drawing_FontArgumentsCreate(); 240 } 241 // 2. OH_Drawing_FontCreate, OH_Drawing_FontArgumentsAddVariation 242 OH_Drawing_ErrorCode drawingErrorCode1 = OH_DRAWING_ERROR_INVALID_PARAMETER; 243 for (size_t i = 0; i < NUMBER_10; i++) 244 { 245 OH_Drawing_FontArguments *fontArguments1 = OH_Drawing_FontArgumentsCreate(); 246 drawingErrorCode1 = OH_Drawing_FontArgumentsDestroy(fontArguments1); 247 EXPECT_EQ(drawingErrorCode1, OH_DRAWING_SUCCESS); 248 } 249 } 250 /* 251 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2300 252 * @tc.name: testFontSetThemeFontFollowedNormal 253 * @tc.desc: test for testFontSetThemeFontFollowedNormal. 254 * @tc.size : SmallTest 255 * @tc.type : Function 256 * @tc.level : Level 0 257 */ 258 HWTEST_F(DrawingNativeFontPart2Test, testFontSetThemeFontFollowedNormal, TestSize.Level0) { 259 // 1. OH_Drawing_FontCreate 260 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 261 // add assert 262 EXPECT_NE(font, nullptr); 263 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER; 264 drawingErrorCode = OH_Drawing_FontSetThemeFontFollowed(font, true); 265 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 266 drawingErrorCode = OH_Drawing_FontSetThemeFontFollowed(font, false); 267 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 268 // 2. OH_Drawing_FontDestroy 269 OH_Drawing_FontDestroy(font); 270 } 271 /* 272 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2301 273 * @tc.name: testFontSetThemeFontFollowedMuitipleCalls 274 * @tc.desc: test for testFontSetThemeFontFollowedMuitipleCalls. 275 * @tc.size : SmallTest 276 * @tc.type : Function 277 * @tc.level : Level 0 278 */ 279 HWTEST_F(DrawingNativeFontPart2Test, testFontSetThemeFontFollowedMuitipleCalls, TestSize.Level0) { 280 // 1. OH_Drawing_FontCreate 281 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 282 // add assert 283 EXPECT_NE(font, nullptr); 284 for (int i = 0; i < 10; i++) { 285 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER; 286 drawingErrorCode = OH_Drawing_FontSetThemeFontFollowed(font, true); 287 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 288 } 289 // 2. OH_Drawing_FontDestroy 290 OH_Drawing_FontDestroy(font); 291 } 292 /* 293 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2302 294 * @tc.name: testFontSetThemeFontFollowedNull 295 * @tc.desc: test for testFontSetThemeFontFollowedNull. 296 * @tc.size : SmallTest 297 * @tc.type : Function 298 * @tc.level : Level 0 299 */ 300 HWTEST_F(DrawingNativeFontPart2Test, testFontSetThemeFontFollowedNull, TestSize.Level0) { 301 // 1. OH_Drawing_FontCreate 302 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 303 // add assert 304 EXPECT_NE(font, nullptr); 305 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS; 306 drawingErrorCode = OH_Drawing_FontSetThemeFontFollowed(nullptr, true); 307 EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER); 308 // 2. OH_Drawing_FontDestroy 309 OH_Drawing_FontDestroy(font); 310 } 311 /* 312 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2100 313 * @tc.name: testFontIsThemeFontFollowedNormal 314 * @tc.desc: test for testFontIsThemeFontFollowedNormal. 315 * @tc.size : SmallTest 316 * @tc.type : Function 317 * @tc.level : Level 0 318 */ 319 HWTEST_F(DrawingNativeFontPart2Test, testFontIsThemeFontFollowedNormal, TestSize.Level0) { 320 // 1. OH_Drawing_FontCreate 321 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 322 // add assert 323 EXPECT_NE(font, nullptr); 324 bool followed = true; 325 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER; 326 OH_Drawing_ErrorCode drawingErrorCode2 = OH_DRAWING_ERROR_INVALID_PARAMETER; 327 drawingErrorCode2 = OH_Drawing_FontIsThemeFontFollowed(font, &followed); 328 EXPECT_EQ(drawingErrorCode2, OH_DRAWING_SUCCESS); 329 EXPECT_EQ(followed, false); 330 drawingErrorCode = OH_Drawing_FontSetThemeFontFollowed(font, true); 331 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 332 drawingErrorCode2 = OH_Drawing_FontIsThemeFontFollowed(font, &followed); 333 EXPECT_EQ(drawingErrorCode2, OH_DRAWING_SUCCESS); 334 EXPECT_EQ(followed, true); 335 drawingErrorCode = OH_Drawing_FontSetThemeFontFollowed(font, false); 336 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 337 drawingErrorCode2 = OH_Drawing_FontIsThemeFontFollowed(font, &followed); 338 EXPECT_EQ(drawingErrorCode2, OH_DRAWING_SUCCESS); 339 EXPECT_EQ(followed, false); 340 // 2. OH_Drawing_FontDestroy 341 OH_Drawing_FontDestroy(font); 342 } 343 /* 344 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2101 345 * @tc.name: testFontIsThemeFontFollowedMultipleCalls 346 * @tc.desc: test for testFontIsThemeFontFollowedMultipleCalls. 347 * @tc.size : SmallTest 348 * @tc.type : Function 349 * @tc.level : Level 0 350 */ 351 HWTEST_F(DrawingNativeFontPart2Test, testFontIsThemeFontFollowedMultipleCalls, TestSize.Level0) { 352 // 1. OH_Drawing_FontCreate 353 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 354 // add assert 355 EXPECT_NE(font, nullptr); 356 bool followed = true; 357 bool isFollowed[] = {true, false, false, true, true, true, false, false, true, false}; 358 for (int i = 0; i < 10; i++) { 359 OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER; 360 OH_Drawing_ErrorCode drawingErrorCode2 = OH_DRAWING_ERROR_INVALID_PARAMETER; 361 drawingErrorCode = OH_Drawing_FontSetThemeFontFollowed(font, isFollowed[i]); 362 EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS); 363 drawingErrorCode2 = OH_Drawing_FontIsThemeFontFollowed(font, &followed); 364 EXPECT_EQ(drawingErrorCode2, OH_DRAWING_SUCCESS); 365 EXPECT_EQ(followed, isFollowed[i]); 366 } 367 // 2. OH_Drawing_FontDestroy 368 OH_Drawing_FontDestroy(font); 369 } 370 /* 371 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2400 372 * @tc.name: testFontIsThemeFontFollowedNull 373 * @tc.desc: test for testFontIsThemeFontFollowedNull. 374 * @tc.size : SmallTest 375 * @tc.type : Function 376 * @tc.level : Level 0 377 */ 378 HWTEST_F(DrawingNativeFontPart2Test, testFontIsThemeFontFollowedNull, TestSize.Level0) { 379 // 1. OH_Drawing_FontCreate 380 OH_Drawing_Font *font = OH_Drawing_FontCreate(); 381 // add assert 382 EXPECT_NE(font, nullptr); 383 bool followed = true; 384 OH_Drawing_ErrorCode drawingErrorCode1 = OH_DRAWING_SUCCESS; 385 OH_Drawing_ErrorCode drawingErrorCode2 = OH_DRAWING_SUCCESS; 386 drawingErrorCode1 = OH_Drawing_FontIsThemeFontFollowed(nullptr, &followed); 387 EXPECT_EQ(drawingErrorCode1, OH_DRAWING_ERROR_INVALID_PARAMETER); 388 drawingErrorCode2 = OH_Drawing_FontIsThemeFontFollowed(font, nullptr); 389 EXPECT_EQ(drawingErrorCode2, OH_DRAWING_ERROR_INVALID_PARAMETER); 390 // 2. OH_Drawing_FontDestroy 391 OH_Drawing_FontDestroy(font); 392 } 393 } // namespace Drawing 394 } // namespace Rosen 395 } // namespace OHOS