1 /*
2  * Copyright (c) 2024 Huawei Device 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, Hardware
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 "gtest/gtest.h"
23 
24 #include "utils/round_rect.h"
25 #include "utils/scalar.h"
26 
27 using namespace testing;
28 using namespace testing::ext;
29 
30 namespace OHOS {
31 namespace Rosen {
32 namespace Drawing {
33 class NativeDrawingRoundRectTest : public testing::Test {
34 public:
35     static void SetUpTestCase();
36     static void TearDownTestCase();
37     void SetUp() override;
38     void TearDown() override;
39 };
40 
SetUpTestCase()41 void NativeDrawingRoundRectTest::SetUpTestCase() {}
TearDownTestCase()42 void NativeDrawingRoundRectTest::TearDownTestCase() {}
SetUp()43 void NativeDrawingRoundRectTest::SetUp() {}
TearDown()44 void NativeDrawingRoundRectTest::TearDown() {}
45 
46 constexpr uint32_t FOUR = 4;
47 constexpr int32_t MINUS_ONE = -1;
48 
49 /*
50  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos001
51  * @tc.desc: test CCornerPosCastToCornerPos
52  * @tc.type: FUNC
53  * @tc.require: AR000GTO5R
54  */
55 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos001, TestSize.Level1)
56 {
57     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
58     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
59     ASSERT_NE(nullptr, roundRect);
60 
61     OH_Drawing_Corner_Radii radius = { 10, 10 };
62 
63     OH_Drawing_RoundRectSetCorner(nullptr, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT, radius);
64     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
65     OH_Drawing_RoundRectSetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(FOUR), radius);
66     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
67     OH_Drawing_RoundRectSetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(MINUS_ONE), radius);
68     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
69     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT, radius);
70 
71     OH_Drawing_RoundRectGetCorner(nullptr, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT);
72     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
73     OH_Drawing_RoundRectGetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(FOUR));
74     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
75     OH_Drawing_RoundRectGetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(MINUS_ONE));
76     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
77     OH_Drawing_Corner_Radii retrievedRadius;
78     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT);
79     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
80     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
81 
82     OH_Drawing_RoundRectDestroy(roundRect);
83     OH_Drawing_RectDestroy(rect);
84 }
85 
86 /*
87  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos002
88  * @tc.desc: test CCornerPosCastToCornerPos
89  * @tc.type: FUNC
90  * @tc.require: AR000GTO5R
91  */
92 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos002, TestSize.Level1)
93 {
94     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
95     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
96     ASSERT_NE(nullptr, roundRect);
97 
98     OH_Drawing_Corner_Radii radius = { 10, 10 };
99 
100     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_RIGHT, radius);
101 
102     OH_Drawing_Corner_Radii retrievedRadius;
103 
104     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_RIGHT);
105     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
106     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
107 
108     OH_Drawing_RoundRectDestroy(roundRect);
109     OH_Drawing_RectDestroy(rect);
110 }
111 
112 /*
113  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos003
114  * @tc.desc: test CCornerPosCastToCornerPos
115  * @tc.type: FUNC
116  * @tc.require: AR000GTO5R
117  */
118 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos003, TestSize.Level1)
119 {
120     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
121     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
122     ASSERT_NE(nullptr, roundRect);
123 
124     OH_Drawing_Corner_Radii radius = { 10, 10 };
125 
126     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_RIGHT, radius);
127 
128     OH_Drawing_Corner_Radii retrievedRadius;
129 
130     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_RIGHT);
131     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
132     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
133 
134     OH_Drawing_RoundRectDestroy(roundRect);
135     OH_Drawing_RectDestroy(rect);
136 }
137 
138 /*
139  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos004
140  * @tc.desc: test CCornerPosCastToCornerPos
141  * @tc.type: FUNC
142  * @tc.require: AR000GTO5R
143  */
144 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos004, TestSize.Level1)
145 {
146     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
147     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
148     ASSERT_NE(nullptr, roundRect);
149 
150     OH_Drawing_Corner_Radii radius = { 10, 10 };
151 
152     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_LEFT, radius);
153 
154     OH_Drawing_Corner_Radii retrievedRadius;
155 
156     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_LEFT);
157     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
158     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
159 
160     OH_Drawing_RoundRectDestroy(roundRect);
161     OH_Drawing_RectDestroy(rect);
162 }
163 
164 /*
165  * @tc.name: NativeDrawingRectTest_OH_Drawing_RoundRectGetCorner005
166  * @tc.desc: test OH_Drawing_RoundRectGetCorner
167  * @tc.type: FUNC
168  * @tc.require: AR000GTO5R
169  */
170 HWTEST_F(NativeDrawingRoundRectTest, OH_Drawing_RoundRectGetCorner005, TestSize.Level1)
171 {
172     OH_Drawing_RoundRect* nullRoundRect = nullptr;
173 
174     OH_Drawing_Corner_Radii radii =
175         OH_Drawing_RoundRectGetCorner(nullRoundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT);
176 
177     ASSERT_FLOAT_EQ(radii.x, 0);
178     ASSERT_FLOAT_EQ(radii.y, 0);
179 }
180 
181 /*
182  * @tc.name: NativeDrawingRoundRectTest_RoundRectOffset006
183  * @tc.desc: test for test for Translates RoundRect by (dx, dy).
184  * @tc.type: FUNC
185  * @tc.require: AR000GTO5R
186  */
187 HWTEST_F(NativeDrawingRoundRectTest, NativeDrawingRoundRectTest_RoundRectOffset006, TestSize.Level1)
188 {
189     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(10, 100, 200, 300);
190     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 25, 25); // 25: xRad, 25: yRad
191     float dx = 10.0f, dy = 10.0f; //10.0f: X-axis offset, 10.0f: Y-axis offset
192 
193     EXPECT_EQ(OH_Drawing_RoundRectOffset(nullptr, dx, dy), OH_DRAWING_ERROR_INVALID_PARAMETER);
194     EXPECT_EQ(OH_Drawing_RoundRectOffset(roundRect, dx, dy), OH_DRAWING_SUCCESS);
195 
196     OH_Drawing_RectDestroy(rect);
197     OH_Drawing_RoundRectDestroy(roundRect);
198 }
199 } // namespace Drawing
200 } // namespace Rosen
201 } // namespace OHOS