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 "gtest/gtest.h"
17 
18 #include "drawing_point.h"
19 #include <random>
20 
21 using namespace testing;
22 using namespace testing::ext;
23 
24 namespace OHOS {
25 namespace Rosen {
26 namespace Drawing {
27 class DrawingNativePointTest : public testing::Test {};
28 
29 /*
30  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0100
31  * @tc.name: testPointCreateNormal
32  * @tc.desc: test for testPointCreateNormal.
33  * @tc.size  : SmallTest
34  * @tc.type  : Function
35  * @tc.level : Level 0
36  */
HWTEST_F(DrawingNativePointTest, testPointCreateNormal, TestSize.Level0)37 HWTEST_F(DrawingNativePointTest, testPointCreateNormal, TestSize.Level0) {
38     // 1. Pass integer values for X and Y coordinates to OH_Drawing_PointCreate interface
39     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
40     // 2. Pass floating-point values for X and Y coordinates to OH_Drawing_PointCreate interface
41     OH_Drawing_Point *point2 = OH_Drawing_PointCreate(100.5f, 60.0f);
42     // 3. Free memory
43     OH_Drawing_PointDestroy(point);
44     OH_Drawing_PointDestroy(point2);
45 }
46 
47 /*
48  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0101
49  * @tc.name: testPointCreateNull
50  * @tc.desc: test for testPointCreateNull.
51  * @tc.size  : SmallTest
52  * @tc.type  : Function
53  * @tc.level : Level 3
54  */
HWTEST_F(DrawingNativePointTest, testPointCreateNull, TestSize.Level3)55 HWTEST_F(DrawingNativePointTest, testPointCreateNull, TestSize.Level3) {
56     // 1. The first parameter of OH_Drawing_PointCreate is empty
57     OH_Drawing_Point *point = OH_Drawing_PointCreate(0, 60);
58     // 2. The second parameter of OH_Drawing_PointCreate is empty
59     OH_Drawing_Point *point2 = OH_Drawing_PointCreate(100, 0);
60     // 3. Free memory
61     OH_Drawing_PointDestroy(point);
62     OH_Drawing_PointDestroy(point2);
63 }
64 
65 /*
66  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0102
67  * @tc.name: testPointCreateAbnormal
68  * @tc.desc: test for testPointCreateAbnormal.
69  * @tc.size  : SmallTest
70  * @tc.type  : Function
71  * @tc.level : Level 3
72  */
HWTEST_F(DrawingNativePointTest, testPointCreateAbnormal, TestSize.Level3)73 HWTEST_F(DrawingNativePointTest, testPointCreateAbnormal, TestSize.Level3) {
74     // 1. The first parameter of OH_Drawing_PointCreate is negative
75     OH_Drawing_Point *point = OH_Drawing_PointCreate(-100, 60);
76     // 2. The second parameter of OH_Drawing_PointCreate is negative
77     OH_Drawing_Point *point2 = OH_Drawing_PointCreate(100, -60);
78     // 3. Free memory
79     OH_Drawing_PointDestroy(point);
80     OH_Drawing_PointDestroy(point2);
81 }
82 
83 /*
84  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0103
85  * @tc.name: testPointCreateMaximum
86  * @tc.desc: test for testPointCreateMaximum.
87  * @tc.size  : SmallTest
88  * @tc.type  : Function
89  * @tc.level : Level 3
90  */
HWTEST_F(DrawingNativePointTest, testPointCreateMaximum, TestSize.Level3)91 HWTEST_F(DrawingNativePointTest, testPointCreateMaximum, TestSize.Level3) {
92     // 1. The first parameter of OH_Drawing_PointCreate is FLT_MAX
93     OH_Drawing_Point *point = OH_Drawing_PointCreate(FLT_MAX, 60);
94     // 2. The second parameter of OH_Drawing_PointCreate is FLT_MAX
95     OH_Drawing_Point *point2 = OH_Drawing_PointCreate(100, FLT_MAX);
96     // 3. Free memory
97     OH_Drawing_PointDestroy(point);
98     OH_Drawing_PointDestroy(point2);
99 }
100 
101 /*
102  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0104
103  * @tc.name: testPointCreateMultipleCalls
104  * @tc.desc: test for testPointCreateMultipleCalls.
105  * @tc.size  : SmallTest
106  * @tc.type  : Function
107  * @tc.level : Level 3
108  */
HWTEST_F(DrawingNativePointTest, testPointCreateMultipleCalls, TestSize.Level3)109 HWTEST_F(DrawingNativePointTest, testPointCreateMultipleCalls, TestSize.Level3) {
110     // 1. Call OH_Drawing_PointCreate 10 times with random values for X and Y coordinates
111     std::random_device rd;
112     std::mt19937 gen(rd());
113     std::uniform_real_distribution<float> dis(0, 100);
114     for (int i = 0; i < 10; i++) {
115         OH_Drawing_Point *point = OH_Drawing_PointCreate(dis(gen), dis(gen));
116         OH_Drawing_PointDestroy(point);
117     }
118 }
119 
120 /*
121  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0200
122  * @tc.name: testPointDestroyNormal
123  * @tc.desc: test for testPointDestroyNormal.
124  * @tc.size  : SmallTest
125  * @tc.type  : Function
126  * @tc.level : Level 0
127  */
HWTEST_F(DrawingNativePointTest, testPointDestroyNormal, TestSize.Level0)128 HWTEST_F(DrawingNativePointTest, testPointDestroyNormal, TestSize.Level0) {
129     // 1. Call OH_Drawing_PointCreate
130     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
131     // 2. Call OH_Drawing_PointDestroy
132     OH_Drawing_PointDestroy(point);
133 }
134 
135 /*
136  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0201
137  * @tc.name: testPointDestroyNull
138  * @tc.desc: test for testPointDestroyNull.
139  * @tc.size  : SmallTest
140  * @tc.type  : Function
141  * @tc.level : Level 3
142  */
HWTEST_F(DrawingNativePointTest, testPointDestroyNull, TestSize.Level3)143 HWTEST_F(DrawingNativePointTest, testPointDestroyNull, TestSize.Level3) {
144     // 1. The parameter of OH_Drawing_PointDestroy is nullptr
145     OH_Drawing_PointDestroy(nullptr);
146 }
147 
148 /*
149  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0300
150  * @tc.name: testPointGetXNormal
151  * @tc.desc: test for testPointGetXNormal.
152  * @tc.size  : SmallTest
153  * @tc.type  : Function
154  * @tc.level : Level 0
155  */
HWTEST_F(DrawingNativePointTest, testPointGetXNormal, TestSize.Level0)156 HWTEST_F(DrawingNativePointTest, testPointGetXNormal, TestSize.Level0) {
157     //1. Pass integer values to OH_Drawing_PointGetX interface
158     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
159     float x;
160     OH_Drawing_PointGetX(point, &x);
161     //2. Pass floating-point values to OH_Drawing_PointGetX interface
162     OH_Drawing_Point *point1 = OH_Drawing_PointCreate(100.0f, 60.0f);
163     OH_Drawing_PointGetX(point1, &x);
164     //3. free memory
165     OH_Drawing_PointDestroy(point);
166     OH_Drawing_PointDestroy(point1);
167 }
168 
169 /*
170  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0301
171  * @tc.name: testPointGetXNull
172  * @tc.desc: test for testPointGetXNull.
173  * @tc.size  : SmallTest
174  * @tc.type  : Function
175  * @tc.level : Level 3
176  */
HWTEST_F(DrawingNativePointTest, testPointGetXNull, TestSize.Level3)177 HWTEST_F(DrawingNativePointTest, testPointGetXNull, TestSize.Level3) {
178     //1. OH_Drawing_PointGetX with the first parameter as null
179     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
180     float x;
181     OH_Drawing_PointGetX(nullptr, &x);
182     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
183     //2. OH_Drawing_PointGetX with the second parameter as null
184     OH_Drawing_PointGetX(point, nullptr);
185     //3. free memory
186     OH_Drawing_PointDestroy(point);
187     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
188 }
189 
190 /*
191  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0302
192  * @tc.name: testPointGetXMultipleCalls
193  * @tc.desc: test for testPointGetXMultipleCalls.
194  * @tc.size  : SmallTest
195  * @tc.type  : Function
196  * @tc.level : Level 3
197  */
HWTEST_F(DrawingNativePointTest, testPointGetXMultipleCalls, TestSize.Level3)198 HWTEST_F(DrawingNativePointTest, testPointGetXMultipleCalls, TestSize.Level3) {
199     //1. Call OH_Drawing_PointGetX 10 times with random values
200     std::random_device rd;
201     std::mt19937 gen(rd());
202     std::uniform_real_distribution<float> dis(0, 100);
203     float x;
204     OH_Drawing_Point *point = nullptr;
205     for (int i = 0; i < 10; i++) {
206         point = OH_Drawing_PointCreate(dis(gen), dis(gen));
207         OH_Drawing_PointGetX(point, &x);
208     }
209     //2. free memory
210     OH_Drawing_PointDestroy(point);
211 }
212 
213 /*
214  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0400
215  * @tc.name: testPointGetYNormal
216  * @tc.desc: test for testPointGetYNormal.
217  * @tc.size  : SmallTest
218  * @tc.type  : Function
219  * @tc.level : Level 0
220  */
HWTEST_F(DrawingNativePointTest, testPointGetYNormal, TestSize.Level0)221 HWTEST_F(DrawingNativePointTest, testPointGetYNormal, TestSize.Level0) {
222     //1. Pass integer values to OH_Drawing_PointGetY interface
223     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
224     float y;
225     OH_Drawing_PointGetX(nullptr, &y);
226     //2. Pass floating-point values to OH_Drawing_PointGetX interface
227     OH_Drawing_Point *point1 = OH_Drawing_PointCreate(100.0f, 60.0f);
228     OH_Drawing_PointGetX(point1, &y);
229     //3. free memory
230     OH_Drawing_PointDestroy(point);
231     OH_Drawing_PointDestroy(point1);
232 }
233 
234 /*
235  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0401
236  * @tc.name: testPointGetYNull
237  * @tc.desc: test for testPointGetYNull.
238  * @tc.size  : SmallTest
239  * @tc.type  : Function
240  * @tc.level : Level 3
241  */
HWTEST_F(DrawingNativePointTest, testPointGetYNull, TestSize.Level3)242 HWTEST_F(DrawingNativePointTest, testPointGetYNull, TestSize.Level3) {
243     //1. OH_Drawing_PointGetY with the first parameter as null
244     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
245     float y;
246     OH_Drawing_PointGetX(nullptr, &y);
247     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
248     //2. OH_Drawing_PointGetY with the second parameter as null
249     OH_Drawing_PointGetX(point, nullptr);
250     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
251     //3. free memory
252     OH_Drawing_PointDestroy(point);
253 }
254 
255 /*
256  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0402
257  * @tc.name: testPointGetYMultipleCalls
258  * @tc.desc: test for testPointGetYMultipleCalls.
259  * @tc.size  : SmallTest
260  * @tc.type  : Function
261  * @tc.level : Level 3
262  */
HWTEST_F(DrawingNativePointTest, testPointGetYMultipleCalls, TestSize.Level3)263 HWTEST_F(DrawingNativePointTest, testPointGetYMultipleCalls, TestSize.Level3) {
264     //1. Call OH_Drawing_PointGetX 10 times with random values
265     std::random_device rd;
266     std::mt19937 gen(rd());
267     std::uniform_real_distribution<float> dis(0, 100);
268     float y;
269     OH_Drawing_Point *point = nullptr;
270     for (int i = 0; i < 10; i++) {
271         OH_Drawing_Point *point = OH_Drawing_PointCreate(dis(gen), dis(gen));
272         OH_Drawing_PointGetX(point, &y);
273     }
274     //2. free memory
275     OH_Drawing_PointDestroy(point);
276 }
277 
278 /*
279  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0400
280  * @tc.name: testPointSetNormal
281  * @tc.desc: test for testPointSetNormal.
282  * @tc.size  : SmallTest
283  * @tc.type  : Function
284  * @tc.level : Level 0
285  */
HWTEST_F(DrawingNativePointTest, testPointSetNormal, TestSize.Level0)286 HWTEST_F(DrawingNativePointTest, testPointSetNormal, TestSize.Level0) {
287     //1. Pass integar point values to OH_Drawing_PointSet interface
288     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
289     OH_Drawing_PointSet(point, 10, 10);
290     //2. Pass floating-point values to OH_Drawing_PointSet interface
291     OH_Drawing_PointSet(point, 20.f, 20.f);
292     //3. free memory
293     OH_Drawing_PointDestroy(point);
294 }
295 
296 /*
297  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0401
298  * @tc.name: testPointSetNull
299  * @tc.desc: test for testPointSetNull.
300  * @tc.size  : SmallTest
301  * @tc.type  : Function
302  * @tc.level : Level 3
303  */
HWTEST_F(DrawingNativePointTest, testPointSetNull, TestSize.Level3)304 HWTEST_F(DrawingNativePointTest, testPointSetNull, TestSize.Level3) {
305     //1. OH_Drawing_PointSet with the first parameter as null
306     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
307     OH_Drawing_PointSet(nullptr, 10, 10);
308     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
309     //2. OH_Drawing_PointSet with the second parameter as 0
310     OH_Drawing_PointSet(point, 0, 10);
311     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
312     //3. OH_Drawing_PointSet with the third parameter as 0
313     OH_Drawing_PointSet(point, 10, 0);
314     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
315     //4. free memory
316     OH_Drawing_PointDestroy(point);
317 }
318 
319 /*
320  * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_POINT_0402
321  * @tc.name: testPointSetMultipleCalls
322  * @tc.desc: test for testPointSetMultipleCalls.
323  * @tc.size  : SmallTest
324  * @tc.type  : Function
325  * @tc.level : Level 3
326  */
HWTEST_F(DrawingNativePointTest, testPointSetMultipleCalls, TestSize.Level3)327 HWTEST_F(DrawingNativePointTest, testPointSetMultipleCalls, TestSize.Level3) {
328     //1. Call OH_Drawing_PointSet 10 times with random values
329     OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
330     std::random_device rd;
331     std::mt19937 gen(rd());
332     std::uniform_real_distribution<float> dis(0, 100);
333     for (int i = 0; i < 10; i++) {
334         OH_Drawing_PointSet(point, dis(gen), dis(gen));
335     }
336     //2. free memory
337     OH_Drawing_PointDestroy(point);
338 }
339 
340 } // namespace Drawing
341 } // namespace Rosen
342 } // namespace OHOS