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_bitmap.h"
19 #include "drawing_brush.h"
20 #include "drawing_canvas.h"
21 #include "drawing_color.h"
22 #include "drawing_color_filter.h"
23 #include "drawing_filter.h"
24 #include "drawing_font.h"
25 #include "drawing_image.h"
26 #include "drawing_mask_filter.h"
27 #include "drawing_matrix.h"
28 #include "drawing_path.h"
29 #include "drawing_pen.h"
30 #include "drawing_point.h"
31 #include "drawing_rect.h"
32 #include "drawing_region.h"
33 #include "drawing_round_rect.h"
34 #include "drawing_sampling_options.h"
35 #include "drawing_shader_effect.h"
36 #include "drawing_text_blob.h"
37 #include "drawing_typeface.h"
38 #include "drawing_memory_stream.h"
39 #include "effect/color_filter.h"
40 #include "effect/filter.h"
41
42 using namespace testing;
43 using namespace testing::ext;
44
45 namespace OHOS {
46 namespace Rosen {
47 namespace Drawing {
48 class NativeDrawingCanvasLargeValueTest : public testing::Test {
49 public:
50 static void SetUpTestCase();
51 static void TearDownTestCase();
52 void SetUp() override;
53 void TearDown() override;
54 protected:
55 OH_Drawing_Canvas *canvas_ = nullptr;
56 OH_Drawing_Brush *brush_ = nullptr;
57 };
58
SetUpTestCase()59 void NativeDrawingCanvasLargeValueTest::SetUpTestCase() {}
TearDownTestCase()60 void NativeDrawingCanvasLargeValueTest::TearDownTestCase() {}
SetUp()61 void NativeDrawingCanvasLargeValueTest::SetUp()
62 {
63 canvas_ = OH_Drawing_CanvasCreate();
64 ASSERT_NE(nullptr, canvas_);
65 OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0xFF, 0xFF));
66 brush_ = OH_Drawing_BrushCreate();
67 EXPECT_NE(brush_, nullptr);
68 OH_Drawing_BrushSetColor(brush_, 0xffff0000);
69 OH_Drawing_CanvasAttachBrush(canvas_, brush_);
70 }
71
TearDown()72 void NativeDrawingCanvasLargeValueTest::TearDown()
73 {
74 if (canvas_ != nullptr) {
75 OH_Drawing_CanvasDetachBrush(canvas_);
76 OH_Drawing_BrushDestroy(brush_);
77 brush_ = nullptr;
78 OH_Drawing_CanvasDestroy(canvas_);
79 canvas_ = nullptr;
80 }
81 }
82
83 /*
84 * @tc.name: NativeDrawingCanvasLargeValueTest_DrawPath005
85 * @tc.desc: test for OH_Drawing_CanvasDrawPath.
86 * @tc.size : MediumTest
87 * @tc.type : Function
88 * @tc.level : Level 1
89 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawPath005, TestSize.Level1)90 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawPath005, TestSize.Level1)
91 {
92 OH_Drawing_Path* path = OH_Drawing_PathCreate();
93 EXPECT_NE(path, nullptr);
94 constexpr int height = 4096;
95 constexpr int width = 2160;
96 constexpr float arc = 18.0f;
97 int len = height / 4;
98 float aX = width / 2;
99 float aY = height / 4;
100 float dX = aX - len * std::sin(arc);
101 float dY = aY + len * std::cos(arc);
102 float cX = aX + len * std::sin(arc);
103 float cY = dY;
104 float bX = aX + (len / 2.0);
105 float bY = aY + std::sqrt((cX - dX) * (cX - dX) + (len / 2.0) * (len / 2.0));
106 float eX = aX - (len / 2.0);
107 float eY = bY;
108 OH_Drawing_PathMoveTo(path, aX, aY);
109 OH_Drawing_PathLineTo(path, bX, bY);
110 OH_Drawing_PathLineTo(path, cX, cY);
111 OH_Drawing_PathLineTo(path, dX, dY);
112 OH_Drawing_PathLineTo(path, eX, eY);
113 OH_Drawing_PathClose(path);
114 OH_Drawing_CanvasDrawPath(canvas_, path);
115 OH_Drawing_PathDestroy(path);
116 }
117
118 /*
119 * @tc.name: NativeDrawingCanvasLargeValueTest_DrawBitmap021
120 * @tc.desc: test for DrawBitmap
121 * @tc.size : MediumTest
122 * @tc.type : Function
123 * @tc.level : Level 1
124 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawBitmap021, TestSize.Level1)125 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawBitmap021, TestSize.Level1)
126 {
127 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
128 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
129 constexpr uint32_t width = 2160;
130 constexpr uint32_t height = 4096;
131 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
132 OH_Drawing_CanvasBind(canvas_, bitmap);
133 OH_Drawing_CanvasDrawBitmap(canvas_, bitmap, 0, 0);
134 OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0xFF, 0xFF));
135 OH_Drawing_BitmapDestroy(bitmap);
136 }
137 /*
138 * @tc.name: NativeDrawingCanvasLargeValueTest_DrawBitmapRect022
139 * @tc.desc: test for DrawBitmapRect
140 * @tc.size : MediumTest
141 * @tc.type : Function
142 * @tc.level : Level 1
143 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawBitmapRect022, TestSize.Level1)144 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawBitmapRect022, TestSize.Level1)
145 {
146 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
147 EXPECT_NE(bitmap, nullptr);
148 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
149 constexpr uint32_t width = 2160;
150 constexpr uint32_t height = 4096;
151 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
152 OH_Drawing_Rect* src = OH_Drawing_RectCreate(0, 0, 200, 200);
153 EXPECT_NE(src, nullptr);
154 OH_Drawing_Rect* dst = OH_Drawing_RectCreate(0, 0, 200, 200);
155 EXPECT_NE(dst, nullptr);
156 OH_Drawing_SamplingOptions* options = OH_Drawing_SamplingOptionsCreate(
157 OH_Drawing_FilterMode::FILTER_MODE_NEAREST, OH_Drawing_MipmapMode::MIPMAP_MODE_NEAREST);
158 EXPECT_NE(options, nullptr);
159 OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, dst, options);
160 OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, dst, nullptr);
161 OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, nullptr, nullptr);
162 OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, nullptr, nullptr, nullptr);
163 OH_Drawing_CanvasDrawBitmapRect(canvas_, nullptr, nullptr, nullptr, nullptr);
164 OH_Drawing_CanvasDrawBitmapRect(nullptr, nullptr, nullptr, nullptr, nullptr);
165 OH_Drawing_BitmapDestroy(bitmap);
166 }
167
168 /*
169 * @tc.name: NativeDrawingCanvasLargeValueTest_DrawImageRect025
170 * @tc.desc: test for DrawImageRect
171 * @tc.size : MediumTest
172 * @tc.type : Function
173 * @tc.level : Level 1
174 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawImageRect025, TestSize.Level1)175 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawImageRect025, TestSize.Level1)
176 {
177 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 200, 200);
178 EXPECT_NE(rect, nullptr);
179 OH_Drawing_Image* image = OH_Drawing_ImageCreate();
180 EXPECT_NE(image, nullptr);
181 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
182 EXPECT_NE(bitmap, nullptr);
183 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
184 constexpr uint32_t width = 2160;
185 constexpr uint32_t height = 4096;
186 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
187 OH_Drawing_ImageBuildFromBitmap(image, bitmap);
188 OH_Drawing_SamplingOptions* options = OH_Drawing_SamplingOptionsCreate(
189 OH_Drawing_FilterMode::FILTER_MODE_NEAREST, OH_Drawing_MipmapMode::MIPMAP_MODE_NEAREST);
190 EXPECT_NE(options, nullptr);
191 OH_Drawing_CanvasDrawImageRect(canvas_, image, rect, options);
192 OH_Drawing_CanvasDrawImageRect(canvas_, image, rect, nullptr);
193 OH_Drawing_CanvasDrawImageRect(canvas_, image, nullptr, nullptr);
194 OH_Drawing_CanvasDrawImageRect(canvas_, nullptr, nullptr, nullptr);
195 OH_Drawing_CanvasDrawImageRect(nullptr, nullptr, nullptr, nullptr);
196 OH_Drawing_CanvasDrawImageRectWithSrc(canvas_, image, rect, rect, options, STRICT_SRC_RECT_CONSTRAINT);
197 OH_Drawing_CanvasDrawImageRectWithSrc(nullptr, nullptr, nullptr, nullptr, nullptr, STRICT_SRC_RECT_CONSTRAINT);
198 OH_Drawing_SamplingOptionsDestroy(options);
199 OH_Drawing_BitmapDestroy(bitmap);
200 OH_Drawing_ImageDestroy(image);
201 }
202
203 /*
204 * @tc.name: NativeDrawingCanvasLargeValueTest_ReadPixels027
205 * @tc.desc: test for ReadPixels
206 * @tc.size : MediumTest
207 * @tc.type : Function
208 * @tc.level : Level 1
209 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_ReadPixels027, TestSize.Level1)210 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_ReadPixels027, TestSize.Level1)
211 {
212 OH_Drawing_Image_Info imageInfo;
213 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
214 EXPECT_NE(bitmap, nullptr);
215 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
216 constexpr uint32_t width = 2160;
217 constexpr uint32_t height = 4096;
218 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
219 void* pixels = OH_Drawing_BitmapGetPixels(bitmap);
220 EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, &imageInfo, pixels, 0, 0, 0));
221 EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, &imageInfo, nullptr, 0, 0, 0));
222 EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, nullptr, nullptr, 0, 0, 0));
223 EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(nullptr, nullptr, nullptr, 0, 0, 0));
224 OH_Drawing_BitmapDestroy(bitmap);
225 }
226
227 /*
228 * @tc.name: NativeDrawingCanvasLargeValueTest_IsClipEmpty042
229 * @tc.desc: test for if clip is empty
230 * @tc.type: FUNC
231 * @tc.require: AR000GTO5R
232 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_IsClipEmpty042, TestSize.Level1)233 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_IsClipEmpty042, TestSize.Level1)
234 {
235 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
236 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
237 // 2160: bitmap's width, 2160: bitmap's height
238 constexpr uint32_t width = 2160;
239 constexpr uint32_t height = 4096;
240 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
241 OH_Drawing_CanvasBind(canvas_, bitmap);
242
243 // 150.0f: rect's left, 100.0f: rect's top, 500.0f: rect's right, 500.0f: rect's bottom
244 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(150.0f, 100.0f, 500.f, 500.f);
245
246 OH_Drawing_CanvasClipRect(canvas_, rect, OH_Drawing_CanvasClipOp::INTERSECT, false);
247
248 bool isClipEmpty = false;
249 EXPECT_EQ(OH_Drawing_CanvasIsClipEmpty(canvas_, &isClipEmpty), OH_DRAWING_SUCCESS);
250 EXPECT_EQ(isClipEmpty, false);
251
252 OH_Drawing_RectDestroy(rect);
253 OH_Drawing_BitmapDestroy(bitmap);
254 }
255
256 /*
257 * @tc.name: NativeDrawingCanvasLargeValueTest_GetImageInfo043
258 * @tc.desc: test for Gets ImageInfo of Canvas.
259 * @tc.type: FUNC
260 * @tc.require: AR000GTO5R
261 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_GetImageInfo043, TestSize.Level1)262 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_GetImageInfo043, TestSize.Level1)
263 {
264 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
265 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
266 // 2160: bitmap's width, 2160: bitmap's height
267 constexpr uint32_t width = 2160;
268 constexpr uint32_t height = 4096;
269 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
270 OH_Drawing_CanvasBind(canvas_, bitmap);
271 OH_Drawing_Image_Info* imageInfo = new OH_Drawing_Image_Info();
272 EXPECT_EQ(OH_Drawing_CanvasGetImageInfo(canvas_, imageInfo), OH_DRAWING_SUCCESS);
273 EXPECT_EQ(2160, imageInfo->width);
274 EXPECT_EQ(4096, imageInfo->height);
275 EXPECT_EQ(1, imageInfo->alphaType);
276 EXPECT_EQ(4, imageInfo->colorType);
277 delete imageInfo;
278 }
279
280
281 /*
282 * @tc.name: NativeDrawingCanvasLargeValueTest_ClipRegion044
283 * @tc.desc: test for Drawing Canvas Clip Region.
284 * @tc.type: FUNC
285 * @tc.require: AR000GTO5R
286 */
HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_ClipRegion044, TestSize.Level1)287 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_ClipRegion044, TestSize.Level1)
288 {
289 OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
290 OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
291 constexpr uint32_t width = 2160; // 2160: width of canvas
292 constexpr uint32_t height = 4096; // 4096: height of canvas
293 OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
294 OH_Drawing_CanvasBind(canvas_, bitmap);
295
296 OH_Drawing_Region *region = OH_Drawing_RegionCreate();
297 // 0.0f: rect's left, 0.0f: rect's top, 4096.0f: rect's right, 2160.0f: rect's bottom
298 OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0.0f, 0.0f, 2160.f, 4096.f);
299 OH_Drawing_RegionSetRect(region, rect);
300 EXPECT_EQ(OH_Drawing_CanvasClipRegion(canvas_, region, OH_Drawing_CanvasClipOp::INTERSECT), OH_DRAWING_SUCCESS);
301 EXPECT_EQ(OH_Drawing_CanvasClipRegion(nullptr, region, OH_Drawing_CanvasClipOp::INTERSECT),
302 OH_DRAWING_ERROR_INVALID_PARAMETER);
303
304 EXPECT_EQ(2160, OH_Drawing_CanvasGetWidth(canvas_));
305 EXPECT_EQ(4096, OH_Drawing_CanvasGetHeight(canvas_));
306
307 OH_Drawing_RegionDestroy(region);
308 OH_Drawing_RectDestroy(rect);
309 OH_Drawing_BitmapDestroy(bitmap);
310 }
311 } // namespace Drawing
312 } // namespace Rosen
313 } // namespace OHOS