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 DrawingNativeFontTest : public testing::Test {};
55 
56 /*
57  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2000
58  * @tc.name: testFontArgumentsCreateNormal
59  * @tc.desc: Test for testFontArgumentsCreateNormal.
60  * @tc.size  : SmallTest
61  * @tc.type  : Function
62  * @tc.level : Level 0
63  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsCreateNormal, TestSize.Level0)64 HWTEST_F(DrawingNativeFontTest, testFontArgumentsCreateNormal, TestSize.Level0) {
65     // 1. OH_Drawing_FontArgumentsCreate
66     OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate();
67     OH_Drawing_FontArgumentsDestroy(fontArguments);
68 }
69 
70 /*
71  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2100
72  * @tc.name: testFontArgumentsAddVariationNormal
73  * @tc.desc: test for testFontArgumentsAddVariationNormal.
74  * @tc.size  : SmallTest
75  * @tc.type  : Function
76  * @tc.level : Level 3
77  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationNormal, TestSize.Level0)78 HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationNormal, TestSize.Level0) {
79     // 1. OH_Drawing_FontArgumentsCreate
80     OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate();
81     // 2. OH_Drawing_FontArgumentsAddVariation, should return OH_DRAWING_SUCCESS
82     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
83     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", 0);
84     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
85     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", -1);
86     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
87     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100);
88     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
89     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_400_1);
90     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
91     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_900);
92     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
93     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_1000000);
94     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
95 }
96 
97 /*
98  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2101
99  * @tc.name: testFontArgumentsAddVariationNull
100  * @tc.desc: test for testFontArgumentsAddVariationNull.
101  * @tc.size  : SmallTest
102  * @tc.type  : Function
103  * @tc.level : Level 3
104  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationNull, TestSize.Level3)105 HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationNull, TestSize.Level3) {
106     // 1. OH_Drawing_FontArgumentsCreate
107     OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate();
108     // 2. OH_Drawing_FontArgumentsAddVariation, the first parameter is nullptr
109     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
110     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(nullptr, "wght", NUMBER_100);
111     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
112     // 3. OH_Drawing_FontArgumentsAddVariation, the second parameter is nullptr
113     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, nullptr, NUMBER_100);
114     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
115 }
116 
117 /*
118  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2102
119  * @tc.name: testFontArgumentsAddVariationAbnormal
120  * @tc.desc: test for testFontArgumentsAddVariationAbnormal.
121  * @tc.size  : SmallTest
122  * @tc.type  : Function
123  * @tc.level : Level 3
124  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationAbnormal, TestSize.Level3)125 HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationAbnormal, TestSize.Level3) {
126     // 1. OH_Drawing_FontArgumentsCreate
127     OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate();
128     // 2. OH_Drawing_FontArgumentsAddVariation, the second parameter is error
129     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
130     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "WGHT", NUMBER_100);
131     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
132     // 3. OH_Drawing_FontArgumentsAddVariation, the second parameter is error
133     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "w", NUMBER_100);
134     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
135 }
136 
137 /*
138  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2103
139  * @tc.name: testFontArgumentsAddVariationMultipleCalls
140  * @tc.desc: test for testFontArgumentsAddVariationMultipleCalls.
141  * @tc.size  : SmallTest
142  * @tc.type  : Function
143  * @tc.level : Level 3
144  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationMultipleCalls, TestSize.Level3)145 HWTEST_F(DrawingNativeFontTest, testFontArgumentsAddVariationMultipleCalls, TestSize.Level3) {
146     // 1. OH_Drawing_FontArgumentsCreate
147     OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate();
148     // 2. OH_Drawing_FontArgumentsAddVariation, should return OH_DRAWING_SUCCESS
149     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
150     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100);
151     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_900);
152     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
153     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100);
154     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", 0.0f);
155     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
156     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", NUMBER_100);
157     drawingErrorCode = OH_Drawing_FontArgumentsAddVariation(fontArguments, "wght", -1);
158     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
159 }
160 
161 /*
162  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2200
163  * @tc.name: testFontArgumentsDestoryNormal
164  * @tc.desc: test for testFontArgumentsDestoryNormal.
165  * @tc.size  : SmallTest
166  * @tc.type  : Function
167  * @tc.level : Level 3
168  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsDestoryNormal, TestSize.Level0)169 HWTEST_F(DrawingNativeFontTest, testFontArgumentsDestoryNormal, TestSize.Level0) {
170     // 1. OH_Drawing_FontArgumentsCreate
171     OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate();
172     // 2. OH_Drawing_FontArgumentsDestroy
173     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
174     drawingErrorCode = OH_Drawing_FontArgumentsDestroy(fontArguments);
175     EXPECT_EQ(drawingErrorCode, OH_DRAWING_SUCCESS);
176 }
177 
178 /*
179  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2201
180  * @tc.name: testFontArgumentsDestoryNull
181  * @tc.desc: test for testFontArgumentsDestoryNull.
182  * @tc.size  : SmallTest
183  * @tc.type  : Function
184  * @tc.level : Level 3
185  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsDestoryNull, TestSize.Level0)186 HWTEST_F(DrawingNativeFontTest, testFontArgumentsDestoryNull, TestSize.Level0) {
187     // 1. OH_Drawing_FontArgumentsCreate
188     OH_Drawing_FontArguments *fontArguments = OH_Drawing_FontArgumentsCreate();
189     // 2. OH_Drawing_FontArgumentsDestroy, parameter is null
190     OH_Drawing_ErrorCode drawingErrorCode = OH_DRAWING_SUCCESS;
191     drawingErrorCode = OH_Drawing_FontArgumentsDestroy(nullptr);
192     EXPECT_EQ(drawingErrorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
193     OH_Drawing_FontArgumentsDestroy(fontArguments);
194 }
195 
196 /*
197  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_FONT_2202
198  * @tc.name: testFontArgumentsDestoryMultiplieCalls
199  * @tc.desc: test for testFontArgumentsDestoryMultiplieCalls.
200  * @tc.size  : SmallTest
201  * @tc.type  : Function
202  * @tc.level : Level 3
203  */
HWTEST_F(DrawingNativeFontTest, testFontArgumentsDestoryMultiplieCalls, TestSize.Level0)204 HWTEST_F(DrawingNativeFontTest, testFontArgumentsDestoryMultiplieCalls, TestSize.Level0) {
205     // 1. OH_Drawing_FontCreate
206     OH_Drawing_FontArguments *fontArguments = nullptr;
207     for (int i = 0; i < NUMBER_10; i++)
208     {
209         fontArguments = OH_Drawing_FontArgumentsCreate();
210     }
211     // 2. OH_Drawing_FontCreate, OH_Drawing_FontArgumentsAddVariation
212     OH_Drawing_ErrorCode drawingErrorCode1 = OH_DRAWING_ERROR_INVALID_PARAMETER;
213     for (size_t i = 0; i < NUMBER_10; i++)
214     {
215         OH_Drawing_FontArguments *fontArguments1 = OH_Drawing_FontArgumentsCreate();
216         drawingErrorCode1 = OH_Drawing_FontArgumentsDestroy(fontArguments1);
217         EXPECT_EQ(drawingErrorCode1, OH_DRAWING_SUCCESS);
218     }
219 }
220 } // namespace Drawing
221 } // namespace Rosen
222 } // namespace OHOS