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