• 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 
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  */
90 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawPath005,
91     Function | MediumTest | Level1)
92 {
93     OH_Drawing_Path* path = OH_Drawing_PathCreate();
94     EXPECT_NE(path, nullptr);
95     constexpr int height = 4096;
96     constexpr int width = 2160;
97     constexpr float arc = 18.0f;
98     int len = height / 4;
99     float aX = width / 2;
100     float aY = height / 4;
101     float dX = aX - len * std::sin(arc);
102     float dY = aY + len * std::cos(arc);
103     float cX = aX + len * std::sin(arc);
104     float cY = dY;
105     float bX = aX + (len / 2.0);
106     float bY = aY + std::sqrt((cX - dX) * (cX - dX) + (len / 2.0) * (len / 2.0));
107     float eX = aX - (len / 2.0);
108     float eY = bY;
109     OH_Drawing_PathMoveTo(path, aX, aY);
110     OH_Drawing_PathLineTo(path, bX, bY);
111     OH_Drawing_PathLineTo(path, cX, cY);
112     OH_Drawing_PathLineTo(path, dX, dY);
113     OH_Drawing_PathLineTo(path, eX, eY);
114     OH_Drawing_PathClose(path);
115     OH_Drawing_CanvasDrawPath(canvas_, path);
116     OH_Drawing_PathDestroy(path);
117 }
118 
119 /*
120  * @tc.name: NativeDrawingCanvasLargeValueTest_DrawBitmap021
121  * @tc.desc: test for DrawBitmap
122  * @tc.size  : MediumTest
123  * @tc.type  : Function
124  * @tc.level : Level 1
125  */
126 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawBitmap021,
127     Function | MediumTest | Level1)
128 {
129     OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
130     OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
131     constexpr uint32_t width = 2160;
132     constexpr uint32_t height = 4096;
133     OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
134     OH_Drawing_CanvasBind(canvas_, bitmap);
135     OH_Drawing_CanvasDrawBitmap(canvas_, bitmap, 0, 0);
136     OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0xFF, 0xFF));
137     OH_Drawing_BitmapDestroy(bitmap);
138 }
139 /*
140  * @tc.name: NativeDrawingCanvasLargeValueTest_DrawBitmapRect022
141  * @tc.desc: test for DrawBitmapRect
142  * @tc.size  : MediumTest
143  * @tc.type  : Function
144  * @tc.level : Level 1
145  */
146 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawBitmapRect022,
147     Function | MediumTest | Level1)
148 {
149     OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
150     EXPECT_NE(bitmap, nullptr);
151     OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
152     constexpr uint32_t width = 2160;
153     constexpr uint32_t height = 4096;
154     OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
155     OH_Drawing_Rect* src = OH_Drawing_RectCreate(0, 0, 200, 200);
156     EXPECT_NE(src, nullptr);
157     OH_Drawing_Rect* dst = OH_Drawing_RectCreate(0, 0, 200, 200);
158     EXPECT_NE(dst, nullptr);
159     OH_Drawing_SamplingOptions* options = OH_Drawing_SamplingOptionsCreate(
160         OH_Drawing_FilterMode::FILTER_MODE_NEAREST, OH_Drawing_MipmapMode::MIPMAP_MODE_NEAREST);
161     EXPECT_NE(options, nullptr);
162     OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, dst, options);
163     OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, dst, nullptr);
164     OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, nullptr, nullptr);
165     OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, nullptr, nullptr, nullptr);
166     OH_Drawing_CanvasDrawBitmapRect(canvas_, nullptr, nullptr, nullptr, nullptr);
167     OH_Drawing_CanvasDrawBitmapRect(nullptr, nullptr, nullptr, nullptr, nullptr);
168     OH_Drawing_BitmapDestroy(bitmap);
169 }
170 
171 /*
172  * @tc.name: NativeDrawingCanvasLargeValueTest_DrawImageRect025
173  * @tc.desc: test for DrawImageRect
174  * @tc.size  : MediumTest
175  * @tc.type  : Function
176  * @tc.level : Level 1
177  */
178 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_DrawImageRect025,
179     Function | MediumTest | Level1)
180 {
181     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 200, 200);
182     EXPECT_NE(rect, nullptr);
183     OH_Drawing_Image* image = OH_Drawing_ImageCreate();
184     EXPECT_NE(image, nullptr);
185     OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
186     EXPECT_NE(bitmap, nullptr);
187     OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
188     constexpr uint32_t width = 2160;
189     constexpr uint32_t height = 4096;
190     OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
191     OH_Drawing_ImageBuildFromBitmap(image, bitmap);
192     OH_Drawing_SamplingOptions* options = OH_Drawing_SamplingOptionsCreate(
193         OH_Drawing_FilterMode::FILTER_MODE_NEAREST, OH_Drawing_MipmapMode::MIPMAP_MODE_NEAREST);
194     EXPECT_NE(options, nullptr);
195     OH_Drawing_CanvasDrawImageRect(canvas_, image, rect, options);
196     OH_Drawing_CanvasDrawImageRect(canvas_, image, rect, nullptr);
197     OH_Drawing_CanvasDrawImageRect(canvas_, image, nullptr, nullptr);
198     OH_Drawing_CanvasDrawImageRect(canvas_, nullptr, nullptr, nullptr);
199     OH_Drawing_CanvasDrawImageRect(nullptr, nullptr, nullptr, nullptr);
200     OH_Drawing_CanvasDrawImageRectWithSrc(canvas_, image, rect, rect, options, STRICT_SRC_RECT_CONSTRAINT);
201     OH_Drawing_CanvasDrawImageRectWithSrc(nullptr, nullptr, nullptr, nullptr, nullptr, STRICT_SRC_RECT_CONSTRAINT);
202     OH_Drawing_SamplingOptionsDestroy(options);
203     OH_Drawing_BitmapDestroy(bitmap);
204     OH_Drawing_ImageDestroy(image);
205 }
206 
207 /*
208  * @tc.name: NativeDrawingCanvasLargeValueTest_ReadPixels027
209  * @tc.desc: test for ReadPixels
210  * @tc.size  : MediumTest
211  * @tc.type  : Function
212  * @tc.level : Level 1
213  */
214 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_ReadPixels027,
215     Function | MediumTest | Level1)
216 {
217     OH_Drawing_Image_Info imageInfo;
218     OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
219     EXPECT_NE(bitmap, nullptr);
220     OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
221     constexpr uint32_t width = 2160;
222     constexpr uint32_t height = 4096;
223     OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
224     void* pixels = OH_Drawing_BitmapGetPixels(bitmap);
225     EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, &imageInfo, pixels, 0, 0, 0));
226     EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, &imageInfo, nullptr, 0, 0, 0));
227     EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, nullptr, nullptr, 0, 0, 0));
228     EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(nullptr, nullptr, nullptr, 0, 0, 0));
229     OH_Drawing_BitmapDestroy(bitmap);
230 }
231 
232 /*
233  * @tc.name: NativeDrawingCanvasLargeValueTest_IsClipEmpty042
234  * @tc.desc: test for if clip is empty
235  * @tc.type: FUNC
236  * @tc.require: AR000GTO5R
237  */
238 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_IsClipEmpty042,
239     Function | MediumTest | Level1)
240 {
241     OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
242     OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
243     // 2160: bitmap's width, 2160: bitmap's height
244     constexpr uint32_t width = 2160;
245     constexpr uint32_t height = 4096;
246     OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
247     OH_Drawing_CanvasBind(canvas_, bitmap);
248 
249     // 150.0f: rect's left, 100.0f: rect's top, 500.0f: rect's right, 500.0f: rect's bottom
250     OH_Drawing_Rect* rect = OH_Drawing_RectCreate(150.0f, 100.0f, 500.f, 500.f);
251 
252     OH_Drawing_CanvasClipRect(canvas_, rect, OH_Drawing_CanvasClipOp::INTERSECT, false);
253 
254     bool isClipEmpty = false;
255     EXPECT_EQ(OH_Drawing_CanvasIsClipEmpty(canvas_, &isClipEmpty), OH_DRAWING_SUCCESS);
256     EXPECT_EQ(isClipEmpty, false);
257 
258     OH_Drawing_RectDestroy(rect);
259     OH_Drawing_BitmapDestroy(bitmap);
260 }
261 
262 /*
263  * @tc.name: NativeDrawingCanvasLargeValueTest_GetImageInfo043
264  * @tc.desc: test for Gets ImageInfo of Canvas.
265  * @tc.type: FUNC
266  * @tc.require: AR000GTO5R
267  */
268 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_GetImageInfo043,
269     Function | MediumTest | Level1)
270 {
271     OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
272     OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
273     // 2160: bitmap's width, 2160: bitmap's height
274     constexpr uint32_t width = 2160;
275     constexpr uint32_t height = 4096;
276     OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
277     OH_Drawing_CanvasBind(canvas_, bitmap);
278     OH_Drawing_Image_Info* imageInfo = new OH_Drawing_Image_Info();
279     EXPECT_EQ(OH_Drawing_CanvasGetImageInfo(canvas_, imageInfo), OH_DRAWING_SUCCESS);
280     EXPECT_EQ(2160, imageInfo->width);
281     EXPECT_EQ(4096, imageInfo->height);
282     EXPECT_EQ(1, imageInfo->alphaType);
283     EXPECT_EQ(4, imageInfo->colorType);
284     delete imageInfo;
285 }
286 
287 
288 /*
289  * @tc.name: NativeDrawingCanvasLargeValueTest_ClipRegion044
290  * @tc.desc: test for Drawing Canvas Clip Region.
291  * @tc.type: FUNC
292  * @tc.require: AR000GTO5R
293  */
294 HWTEST_F(NativeDrawingCanvasLargeValueTest, NativeDrawingCanvasLargeValueTest_ClipRegion044,
295     Function | MediumTest | Level1)
296 {
297     OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
298     OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
299     constexpr uint32_t width = 2160; // 2160: width of canvas
300     constexpr uint32_t height = 4096; // 4096: height of canvas
301     OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
302     OH_Drawing_CanvasBind(canvas_, bitmap);
303 
304     OH_Drawing_Region *region = OH_Drawing_RegionCreate();
305     // 0.0f: rect's left, 0.0f: rect's top, 4096.0f: rect's right, 2160.0f: rect's bottom
306     OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0.0f, 0.0f, 2160.f, 4096.f);
307     OH_Drawing_RegionSetRect(region, rect);
308     EXPECT_EQ(OH_Drawing_CanvasClipRegion(canvas_, region, OH_Drawing_CanvasClipOp::INTERSECT), OH_DRAWING_SUCCESS);
309     EXPECT_EQ(OH_Drawing_CanvasClipRegion(nullptr, region, OH_Drawing_CanvasClipOp::INTERSECT),
310         OH_DRAWING_ERROR_INVALID_PARAMETER);
311 
312     EXPECT_EQ(2160, OH_Drawing_CanvasGetWidth(canvas_));
313     EXPECT_EQ(4096, OH_Drawing_CanvasGetHeight(canvas_));
314 
315     OH_Drawing_RegionDestroy(region);
316     OH_Drawing_RectDestroy(rect);
317     OH_Drawing_BitmapDestroy(bitmap);
318 }
319 } // namespace Drawing
320 } // namespace Rosen
321 } // namespace OHOS