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
18 #include "drawing_brush.h"
19 #include "drawing_color.h"
20 #include "drawing_filter.h"
21 #include "drawing_mask_filter.h"
22 #include "drawing_rect.h"
23 #include "drawing_shadow_layer.h"
24 #include "drawing_color_filter.h"
25 #include "effect/color_filter.h"
26 #include "effect/filter.h"
27
28 using namespace testing;
29 using namespace testing::ext;
30
31 namespace OHOS {
32 namespace Rosen {
33 namespace Drawing {
34 class NativeDrawingBrushTest : public testing::Test {
35 public:
36 static void SetUpTestCase();
37 static void TearDownTestCase();
38 void SetUp() override;
39 void TearDown() override;
40 };
41
SetUpTestCase()42 void NativeDrawingBrushTest::SetUpTestCase() {}
TearDownTestCase()43 void NativeDrawingBrushTest::TearDownTestCase() {}
SetUp()44 void NativeDrawingBrushTest::SetUp() {}
TearDown()45 void NativeDrawingBrushTest::TearDown() {}
CastToFilter(OH_Drawing_Filter * cFilter)46 static Filter* CastToFilter(OH_Drawing_Filter* cFilter)
47 {
48 return reinterpret_cast<Filter*>(cFilter);
49 }
50
51 /*
52 * @tc.name: NativeDrawingBrushTest_brushCreate001
53 * @tc.desc: test for create brush and destroy brush.
54 * @tc.size : MediumTest
55 * @tc.type : Function
56 * @tc.level : Level 1
57 */
58 HWTEST_F(NativeDrawingBrushTest, NativeDrawingBrushTest_brushCreate001, Function | MediumTest | Level1)
59 {
60 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
61 EXPECT_EQ(brush == nullptr, false);
62 OH_Drawing_BrushDestroy(brush);
63 }
64
65 /*
66 * @tc.name: NativeDrawingBrushTest_brushSetColor002
67 * @tc.desc: test for the set methods of brush.
68 * @tc.size : MediumTest
69 * @tc.type : Function
70 * @tc.level : Level 1
71 */
72 HWTEST_F(NativeDrawingBrushTest, NativeDrawingBrushTest_brushSetColor002, Function | MediumTest | Level1)
73 {
74 OH_Drawing_Brush* brush1 = OH_Drawing_BrushCreate();
75 OH_Drawing_BrushSetAntiAlias(brush1, false);
76 EXPECT_EQ(OH_Drawing_BrushIsAntiAlias(brush1), false);
77 OH_Drawing_BrushSetColor(brush1, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
78 EXPECT_EQ(OH_Drawing_BrushGetColor(brush1), 0xFFFF0000);
79 constexpr uint8_t alpha = 128;
80 OH_Drawing_BrushSetAlpha(brush1, alpha);
81 EXPECT_EQ(OH_Drawing_BrushGetAlpha(brush1), alpha);
82 }
83
84 /*
85 * @tc.name: NativeDrawingBrushTest_brushSetBlendMode003
86 * @tc.desc: test for SetBlendMode.
87 * @tc.size : MediumTest
88 * @tc.type : Function
89 * @tc.level : Level 1
90 */
91 HWTEST_F(NativeDrawingBrushTest, NativeDrawingBrushTest_brushSetBlendMode003, Function | MediumTest | Level1)
92 {
93 OH_Drawing_BrushSetBlendMode(nullptr, OH_Drawing_BlendMode::BLEND_MODE_CLEAR);
94 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
95 EXPECT_NE(brush, nullptr);
96 OH_Drawing_BrushSetBlendMode(brush, OH_Drawing_BlendMode::BLEND_MODE_CLEAR);
97 }
98
99 /*
100 * @tc.name: NativeDrawingBrushTest_brushReset004
101 * @tc.desc: test for the reset methods of brush.
102 * @tc.size : MediumTest
103 * @tc.type : Function
104 * @tc.level : Level 1
105 */
106 HWTEST_F(NativeDrawingBrushTest, NativeDrawingBrushTest_brushReset004, Function | MediumTest | Level1)
107 {
108 OH_Drawing_Brush* brush1 = OH_Drawing_BrushCreate();
109 OH_Drawing_BrushSetAntiAlias(brush1, true);
110 OH_Drawing_BrushSetColor(brush1, OH_Drawing_ColorSetArgb(0x00, 0xFF, 0x00, 0xFF));
111 constexpr uint8_t alpha = 128;
112 OH_Drawing_BrushSetAlpha(brush1, alpha);
113
114 OH_Drawing_BrushReset(brush1);
115 EXPECT_EQ(OH_Drawing_BrushIsAntiAlias(brush1), false);
116 EXPECT_EQ(OH_Drawing_BrushGetColor(brush1), 0xFF000000);
117 EXPECT_EQ(OH_Drawing_BrushGetAlpha(brush1), 0xFF);
118
119 OH_Drawing_BrushDestroy(brush1);
120 }
121
122 /*
123 * @tc.name: NativeDrawingBrushTest_brushGetFilter005
124 * @tc.desc: gets the filter from a brush.
125 * @tc.size : MediumTest
126 * @tc.type : Function
127 * @tc.level : Level 1
128 */
129 HWTEST_F(NativeDrawingBrushTest, NativeDrawingBrushTest_brushGetFilter005, Function | MediumTest | Level1)
130 {
131 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
132 EXPECT_NE(brush, nullptr);
133 OH_Drawing_Filter* cFilter_ = OH_Drawing_FilterCreate();
134 EXPECT_NE(cFilter_, nullptr);
135 OH_Drawing_Filter* tmpFilter_ = OH_Drawing_FilterCreate();
136 EXPECT_NE(tmpFilter_, nullptr);
137
138 OH_Drawing_ColorFilter* colorFilterTmp = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
139
140 OH_Drawing_FilterSetColorFilter(cFilter_, nullptr);
141 OH_Drawing_FilterGetColorFilter(cFilter_, colorFilterTmp);
142 EXPECT_EQ((reinterpret_cast<ColorFilter*>(colorFilterTmp))->GetType(),
143 ColorFilter::FilterType::NO_TYPE);
144
145 OH_Drawing_ColorFilter* cColorFilter_ = OH_Drawing_ColorFilterCreateBlendMode(0xFF0000FF, BLEND_MODE_COLOR);
146 OH_Drawing_FilterSetColorFilter(cFilter_, cColorFilter_);
147 OH_Drawing_BrushSetFilter(brush, cFilter_);
148 OH_Drawing_BrushGetFilter(brush, tmpFilter_);
149
150 EXPECT_NE(CastToFilter(tmpFilter_)->GetColorFilter(), nullptr);
151 EXPECT_EQ(CastToFilter(tmpFilter_)->GetColorFilter()->GetType(), ColorFilter::FilterType::BLEND_MODE);
152 OH_Drawing_FilterDestroy(cFilter_);
153 OH_Drawing_FilterDestroy(tmpFilter_);
154 OH_Drawing_ColorFilterDestroy(cColorFilter_);
155 OH_Drawing_ColorFilterDestroy(colorFilterTmp);
156 OH_Drawing_BrushDestroy(brush);
157 }
158 /*
159 * @tc.name: NativeDrawingBrushTest_brushSetShadowLayer006
160 * @tc.desc: gets the filter from a brush.
161 * @tc.size : MediumTest
162 * @tc.type : Function
163 * @tc.level : Level 1
164 */
165 HWTEST_F(NativeDrawingBrushTest, NativeDrawingBrushTest_brushSetShadowLayer006, Function | MediumTest | Level1)
166 {
167 // blurRadius:-3.f, offset:(-3.f, 3.f), shadowColor:green
168 OH_Drawing_ShadowLayer* shadow = OH_Drawing_ShadowLayerCreate(-3.f, -3.f, 3.f, 0xFF00FF00);
169 EXPECT_EQ(shadow, nullptr);
170 OH_Drawing_ShadowLayerDestroy(nullptr);
171 // blurRadius:3.f, offset:(-3.f, 3.f), shadowColor:green
172 OH_Drawing_ShadowLayer* shadowLayer = OH_Drawing_ShadowLayerCreate(3.f, -3.f, 3.f, 0xFF00FF00);
173 EXPECT_NE(shadowLayer, nullptr);
174 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
175 EXPECT_NE(brush, nullptr);
176 OH_Drawing_BrushSetShadowLayer(nullptr, shadowLayer);
177 OH_Drawing_BrushSetShadowLayer(brush, nullptr);
178 OH_Drawing_BrushSetShadowLayer(brush, shadowLayer);
179 OH_Drawing_ShadowLayerDestroy(shadowLayer);
180 OH_Drawing_BrushDestroy(brush);
181 }
182 } // namespace Drawing
183 } // namespace Rosen
184 } // namespace OHOS