• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 "gtest/gtest.h"
17 #include "drawing_error_code.h"
18 #include "drawing_path.h"
19 #include "drawing_path_effect.h"
20 #include "drawing_pen.h"
21 
22 #ifdef RS_ENABLE_VK
23 #include "platform/ohos/backend/rs_vulkan_context.h"
24 #endif
25 
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS {
30 namespace Rosen {
31 namespace Drawing {
32 class NativeDrawingPathEffectTest : public testing::Test {
33 public:
34     static void SetUpTestCase();
35     static void TearDownTestCase();
36     void SetUp() override;
37     void TearDown() override;
38 };
39 
SetUpTestCase()40 void NativeDrawingPathEffectTest::SetUpTestCase()
41 {
42 #ifdef RS_ENABLE_VK
43     RsVulkanContext::SetRecyclable(false);
44 #endif
45 }
TearDownTestCase()46 void NativeDrawingPathEffectTest::TearDownTestCase() {}
SetUp()47 void NativeDrawingPathEffectTest::SetUp() {}
TearDown()48 void NativeDrawingPathEffectTest::TearDown() {}
49 
50 /*
51  * @tc.name: NativeDrawingPathEffectTest_PathEffect001
52  * @tc.desc: test for PathEffect.
53  * @tc.type: FUNC
54  * @tc.require: AR000GTO5R
55  */
56 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_PathEffect001, TestSize.Level1)
57 {
58     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
59     EXPECT_NE(pen, nullptr);
60     float intervals[] = {1, 1, 1};
61     OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
62     OH_Drawing_PenSetPathEffect(nullptr, pathEffect);
63     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
64     OH_Drawing_PenSetPathEffect(pen, pathEffect);
65     OH_Drawing_PathEffectDestroy(pathEffect);
66     // 3 is the number of elements of the intervals array
67     pathEffect = OH_Drawing_CreateDashPathEffect(nullptr, 3, 0.0);
68     EXPECT_EQ(pathEffect, nullptr);
69     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
70     pathEffect = OH_Drawing_CreateDashPathEffect(intervals, 0, 0.0);
71     EXPECT_EQ(pathEffect, nullptr);
72     EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
73     pathEffect = OH_Drawing_CreateDashPathEffect(intervals, -1, 0.0);
74     EXPECT_EQ(pathEffect, nullptr);
75 }
76 
77 /*
78  * @tc.name: NativeDrawingPathEffectTest_CreatePathDashEffect002
79  * @tc.desc: test for CreatePathDashEffect.
80  * @tc.type: FUNC
81  * @tc.require: IBHEL5
82  */
83 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreatePathDashEffect002, TestSize.Level1)
84 {
85     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
86     EXPECT_NE(pen, nullptr);
87     OH_Drawing_Path* path = OH_Drawing_PathCreate();
88     EXPECT_NE(path, nullptr);
89     // 10 is the distance between the dashed segments.
90     OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreatePathDashEffect(path, 10.0, 10.0,
91         OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_TRANSLATE);
92     EXPECT_NE(pathEffect, nullptr);
93     OH_Drawing_PenSetPathEffect(nullptr, pathEffect);
94     OH_Drawing_PenSetPathEffect(pen, pathEffect);
95 
96     OH_Drawing_PathEffect* pathEffect2 = OH_Drawing_CreatePathDashEffect(nullptr,
97         10.0, 10.0, OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_TRANSLATE);
98     EXPECT_EQ(pathEffect2, nullptr);
99 
100     pathEffect2 = OH_Drawing_CreatePathDashEffect(path,
101         -10.0, 10.0, OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_ROTATE);
102     EXPECT_EQ(pathEffect2, nullptr);
103 
104     pathEffect2 = OH_Drawing_CreatePathDashEffect(path,
105         10.0, -10.0, OH_Drawing_PathDashStyle::DRAWING_PATH_DASH_STYLE_MORPH);
106     EXPECT_NE(pathEffect2, nullptr);
107     OH_Drawing_PenDestroy(pen);
108     OH_Drawing_PathDestroy(path);
109     OH_Drawing_PathEffectDestroy(pathEffect);
110     OH_Drawing_PathEffectDestroy(pathEffect2);
111 }
112 
113 /*
114  * @tc.name: NativeDrawingPathEffectTest_CreateSumPathEffect003
115  * @tc.desc: test for CreatePathDashEffect.
116  * @tc.type: FUNC
117  * @tc.require: IBHEL5
118  */
119 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateSumPathEffect003, TestSize.Level1)
120 {
121     float intervals[] = {1, 1, 1};
122     // 3 is the number of elements of the intervals array
123     OH_Drawing_PathEffect* pathEffectOne = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
124     EXPECT_NE(pathEffectOne, nullptr);
125     OH_Drawing_PathEffect* pathEffectTwo = OH_Drawing_CreateDashPathEffect(intervals, 3, 0.0);
126     EXPECT_NE(pathEffectTwo, nullptr);
127     OH_Drawing_PathEffect* pathEffectSum = OH_Drawing_CreateSumPathEffect(nullptr, pathEffectTwo);
128     EXPECT_EQ(pathEffectSum, nullptr);
129     pathEffectSum = OH_Drawing_CreateSumPathEffect(pathEffectOne, nullptr);
130     EXPECT_EQ(pathEffectSum, nullptr);
131     pathEffectSum = OH_Drawing_CreateSumPathEffect(pathEffectOne, pathEffectTwo);
132     EXPECT_NE(pathEffectSum, nullptr);
133     OH_Drawing_PathEffectDestroy(pathEffectOne);
134     OH_Drawing_PathEffectDestroy(pathEffectTwo);
135     OH_Drawing_PathEffectDestroy(pathEffectSum);
136 }
137 
138 /*
139  * @tc.name: NativeDrawingPathEffectTest_PathEffect004
140  * @tc.desc: test for PathEffect.
141  * @tc.type: FUNC
142  * @tc.require: IBHEL5
143  */
144 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateDiscretePathEffect004, TestSize.Level1)
145 {
146     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
147     EXPECT_NE(pen, nullptr);
148     float segLength = 1.0;
149     float dev = 1.0;
150     OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateDiscretePathEffect(segLength, dev);
151     EXPECT_NE(pathEffect, nullptr);
152     OH_Drawing_PenSetPathEffect(pen, pathEffect);
153     OH_Drawing_PathEffect* pathEffect1 = OH_Drawing_CreateDiscretePathEffect(0.0, dev);
154     EXPECT_NE(pathEffect1, nullptr);
155     OH_Drawing_PathEffect* pathEffect2 = OH_Drawing_CreateDiscretePathEffect(segLength, 0.0);
156     EXPECT_NE(pathEffect2, nullptr);
157     OH_Drawing_PathEffect* pathEffect3 = OH_Drawing_CreateDiscretePathEffect(-2.0, dev); // -2.0 means segLength
158     EXPECT_NE(pathEffect3, nullptr);
159     OH_Drawing_PathEffect* pathEffect4 = OH_Drawing_CreateDiscretePathEffect(-2.0, -2.0); // -2.0 means segLength
160     EXPECT_NE(pathEffect4, nullptr);
161 
162     OH_Drawing_PathEffectDestroy(pathEffect);
163     OH_Drawing_PathEffectDestroy(pathEffect1);
164     OH_Drawing_PathEffectDestroy(pathEffect2);
165     OH_Drawing_PathEffectDestroy(pathEffect3);
166     OH_Drawing_PathEffectDestroy(pathEffect4);
167     OH_Drawing_PenDestroy(pen);
168 }
169 
170 /*
171  * @tc.name: NativeDrawingPathEffectTest_PathEffect005
172  * @tc.desc: test for PathEffect.
173  * @tc.type: FUNC
174  * @tc.require: IBHEL5
175  */
176 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateCornerPathEffect005, TestSize.Level1)
177 {
178     OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateCornerPathEffect(0);
179     EXPECT_EQ(pathEffect, nullptr);
180     pathEffect = OH_Drawing_CreateCornerPathEffect(-2.0); // -2.0 means radius
181     EXPECT_EQ(pathEffect, nullptr);
182     uint32_t radius = 1;
183     pathEffect = OH_Drawing_CreateCornerPathEffect(radius);
184     EXPECT_NE(pathEffect, nullptr);
185     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
186     EXPECT_NE(pen, nullptr);
187     OH_Drawing_PenSetPathEffect(pen, pathEffect);
188     OH_Drawing_PathEffectDestroy(pathEffect);
189     OH_Drawing_PenDestroy(pen);
190 }
191 
192 /*
193  * @tc.name: NativeDrawingPathEffectTest_PathEffect006
194  * @tc.desc: test for PathEffect.
195  * @tc.type: FUNC
196  * @tc.require: IBHEL5
197  */
198 HWTEST_F(NativeDrawingPathEffectTest, NativeDrawingPathEffectTest_CreateComposePathEffect006, TestSize.Level1)
199 {
200     OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
201     EXPECT_NE(pen, nullptr);
202     uint32_t radius = 1;
203     OH_Drawing_PathEffect* pathEffect1 = OH_Drawing_CreateCornerPathEffect(radius);
204     EXPECT_NE(pathEffect1, nullptr);
205     radius = 2; // 2 means radius
206     OH_Drawing_PathEffect* pathEffect2 = OH_Drawing_CreateCornerPathEffect(radius);
207     EXPECT_NE(pathEffect2, nullptr);
208     OH_Drawing_PathEffect* pathEffect = OH_Drawing_CreateComposePathEffect(nullptr, pathEffect2);
209     EXPECT_EQ(pathEffect, nullptr);
210     pathEffect = OH_Drawing_CreateComposePathEffect(pathEffect1, nullptr);
211     EXPECT_EQ(pathEffect, nullptr);
212     pathEffect = OH_Drawing_CreateComposePathEffect(pathEffect1, pathEffect2);
213     EXPECT_NE(pathEffect, nullptr);
214     OH_Drawing_PenSetPathEffect(pen, pathEffect);
215 
216     OH_Drawing_PathEffectDestroy(pathEffect1);
217     OH_Drawing_PathEffectDestroy(pathEffect2);
218     OH_Drawing_PathEffectDestroy(pathEffect);
219     OH_Drawing_PenDestroy(pen);
220 }
221 } // namespace Drawing
222 } // namespace Rosen
223 } // namespace OHOS