• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifdef RS_ENABLE_VK
28 #include "platform/ohos/backend/rs_vulkan_context.h"
29 #endif
30 
31 using namespace testing;
32 using namespace testing::ext;
33 
34 namespace OHOS {
35 namespace Rosen {
36 namespace Drawing {
37 class NativeDrawingRoundRectTest : public testing::Test {
38 public:
39     static void SetUpTestCase();
40     static void TearDownTestCase();
41     void SetUp() override;
42     void TearDown() override;
43 };
44 
SetUpTestCase()45 void NativeDrawingRoundRectTest::SetUpTestCase()
46 {
47 #ifdef RS_ENABLE_VK
48     RsVulkanContext::SetRecyclable(false);
49 #endif
50 }
TearDownTestCase()51 void NativeDrawingRoundRectTest::TearDownTestCase() {}
SetUp()52 void NativeDrawingRoundRectTest::SetUp() {}
TearDown()53 void NativeDrawingRoundRectTest::TearDown() {}
54 
55 constexpr uint32_t FOUR = 4;
56 constexpr int32_t MINUS_ONE = -1;
57 
58 /*
59  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos001
60  * @tc.desc: test CCornerPosCastToCornerPos
61  * @tc.type: FUNC
62  * @tc.require: AR000GTO5R
63  */
64 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos001, TestSize.Level1)
65 {
66     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
67     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
68     ASSERT_NE(nullptr, roundRect);
69 
70     OH_Drawing_Corner_Radii radius = { 10, 10 };
71 
72     OH_Drawing_RoundRectSetCorner(nullptr, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT, radius);
73     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
74     OH_Drawing_RoundRectSetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(FOUR), radius);
75     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
76     OH_Drawing_RoundRectSetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(MINUS_ONE), radius);
77     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
78     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT, radius);
79 
80     OH_Drawing_RoundRectGetCorner(nullptr, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT);
81     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
82     OH_Drawing_RoundRectGetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(FOUR));
83     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
84     OH_Drawing_RoundRectGetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(MINUS_ONE));
85     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
86     OH_Drawing_Corner_Radii retrievedRadius;
87     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT);
88     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
89     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
90 
91     OH_Drawing_RoundRectDestroy(roundRect);
92     OH_Drawing_RectDestroy(rect);
93 }
94 
95 /*
96  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos002
97  * @tc.desc: test CCornerPosCastToCornerPos
98  * @tc.type: FUNC
99  * @tc.require: AR000GTO5R
100  */
101 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos002, TestSize.Level1)
102 {
103     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
104     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
105     ASSERT_NE(nullptr, roundRect);
106 
107     OH_Drawing_Corner_Radii radius = { 10, 10 };
108 
109     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_RIGHT, radius);
110 
111     OH_Drawing_Corner_Radii retrievedRadius;
112 
113     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_RIGHT);
114     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
115     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
116 
117     OH_Drawing_RoundRectDestroy(roundRect);
118     OH_Drawing_RectDestroy(rect);
119 }
120 
121 /*
122  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos003
123  * @tc.desc: test CCornerPosCastToCornerPos
124  * @tc.type: FUNC
125  * @tc.require: AR000GTO5R
126  */
127 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos003, TestSize.Level1)
128 {
129     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
130     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
131     ASSERT_NE(nullptr, roundRect);
132 
133     OH_Drawing_Corner_Radii radius = { 10, 10 };
134 
135     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_RIGHT, radius);
136 
137     OH_Drawing_Corner_Radii retrievedRadius;
138 
139     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_RIGHT);
140     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
141     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
142 
143     OH_Drawing_RoundRectDestroy(roundRect);
144     OH_Drawing_RectDestroy(rect);
145 }
146 
147 /*
148  * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos004
149  * @tc.desc: test CCornerPosCastToCornerPos
150  * @tc.type: FUNC
151  * @tc.require: AR000GTO5R
152  */
153 HWTEST_F(NativeDrawingRoundRectTest, CCornerPosCastToCornerPos004, TestSize.Level1)
154 {
155     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
156     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
157     ASSERT_NE(nullptr, roundRect);
158 
159     OH_Drawing_Corner_Radii radius = { 10, 10 };
160 
161     OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_LEFT, radius);
162 
163     OH_Drawing_Corner_Radii retrievedRadius;
164 
165     retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_LEFT);
166     ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x);
167     ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y);
168 
169     OH_Drawing_RoundRectDestroy(roundRect);
170     OH_Drawing_RectDestroy(rect);
171 }
172 
173 /*
174  * @tc.name: NativeDrawingRectTest_OH_Drawing_RoundRectGetCorner005
175  * @tc.desc: test OH_Drawing_RoundRectGetCorner
176  * @tc.type: FUNC
177  * @tc.require: AR000GTO5R
178  */
179 HWTEST_F(NativeDrawingRoundRectTest, OH_Drawing_RoundRectGetCorner005, TestSize.Level1)
180 {
181     OH_Drawing_RoundRect* nullRoundRect = nullptr;
182 
183     OH_Drawing_Corner_Radii radii =
184         OH_Drawing_RoundRectGetCorner(nullRoundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT);
185 
186     ASSERT_FLOAT_EQ(radii.x, 0);
187     ASSERT_FLOAT_EQ(radii.y, 0);
188 }
189 
190 /*
191  * @tc.name: NativeDrawingRoundRectTest_RoundRectOffset006
192  * @tc.desc: test for test for Translates RoundRect by (dx, dy).
193  * @tc.type: FUNC
194  * @tc.require: AR000GTO5R
195  */
196 HWTEST_F(NativeDrawingRoundRectTest, NativeDrawingRoundRectTest_RoundRectOffset006, TestSize.Level1)
197 {
198     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(10, 100, 200, 300);
199     OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 25, 25); // 25: xRad, 25: yRad
200     float dx = 10.0f, dy = 10.0f; //10.0f: X-axis offset, 10.0f: Y-axis offset
201 
202     EXPECT_EQ(OH_Drawing_RoundRectOffset(nullptr, dx, dy), OH_DRAWING_ERROR_INVALID_PARAMETER);
203     EXPECT_EQ(OH_Drawing_RoundRectOffset(roundRect, dx, dy), OH_DRAWING_SUCCESS);
204 
205     OH_Drawing_RectDestroy(rect);
206     OH_Drawing_RoundRectDestroy(roundRect);
207 }
208 
209 /**
210  * @tc.name: NativeDrawingRoundRectTest_RoundRectCopy007
211  * @tc.desc: test for sets create roundRect by copy.
212  * @tc.type: FUNC
213  * @tc.require: AR20240104201189
214  */
215 HWTEST_F(NativeDrawingRoundRectTest, NativeDrawingMatrixTest_OH_Drawing_RoundRectCopy001, TestSize.Level1)
216 {
217     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 200, 200);
218     const OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200);
219     ASSERT_TRUE(roundRect != nullptr);
220     OH_Drawing_RoundRect* roundRect2 = OH_Drawing_RoundRectCopy(roundRect);
221     ASSERT_TRUE(roundRect2 != nullptr);
222 
223     OH_Drawing_RoundRect* roundRect3 = OH_Drawing_RoundRectCopy(nullptr);
224     ASSERT_TRUE(roundRect3 == nullptr);
225 
226     OH_Drawing_RectDestroy(rect);
227     OH_Drawing_RoundRectDestroy(const_cast<OH_Drawing_RoundRect*>(roundRect));
228     OH_Drawing_RoundRectDestroy(roundRect2);
229     OH_Drawing_RoundRectDestroy(roundRect3);
230 }
231 
232 } // namespace Drawing
233 } // namespace Rosen
234 } // namespace OHOS