1f6603c60Sopenharmony_ci/*
2f6603c60Sopenharmony_ci * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License.
5f6603c60Sopenharmony_ci * You may obtain a copy of the License at
6f6603c60Sopenharmony_ci *
7f6603c60Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8f6603c60Sopenharmony_ci *
9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, Hardware
10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and
13f6603c60Sopenharmony_ci * limitations under the License.
14f6603c60Sopenharmony_ci */
15f6603c60Sopenharmony_ci
16f6603c60Sopenharmony_ci#include "gtest/gtest.h"
17f6603c60Sopenharmony_ci
18f6603c60Sopenharmony_ci#include "drawing_bitmap.h"
19f6603c60Sopenharmony_ci#include "drawing_brush.h"
20f6603c60Sopenharmony_ci#include "drawing_canvas.h"
21f6603c60Sopenharmony_ci#include "drawing_color.h"
22f6603c60Sopenharmony_ci#include "drawing_color_filter.h"
23f6603c60Sopenharmony_ci#include "drawing_filter.h"
24f6603c60Sopenharmony_ci#include "drawing_font.h"
25f6603c60Sopenharmony_ci#include "drawing_image.h"
26f6603c60Sopenharmony_ci#include "drawing_mask_filter.h"
27f6603c60Sopenharmony_ci#include "drawing_matrix.h"
28f6603c60Sopenharmony_ci#include "drawing_path.h"
29f6603c60Sopenharmony_ci#include "drawing_pen.h"
30f6603c60Sopenharmony_ci#include "drawing_point.h"
31f6603c60Sopenharmony_ci#include "drawing_rect.h"
32f6603c60Sopenharmony_ci#include "drawing_region.h"
33f6603c60Sopenharmony_ci#include "drawing_round_rect.h"
34f6603c60Sopenharmony_ci#include "drawing_sampling_options.h"
35f6603c60Sopenharmony_ci#include "drawing_shader_effect.h"
36f6603c60Sopenharmony_ci#include "drawing_text_blob.h"
37f6603c60Sopenharmony_ci#include "drawing_typeface.h"
38f6603c60Sopenharmony_ci#include "drawing_memory_stream.h"
39f6603c60Sopenharmony_ci#include "effect/color_filter.h"
40f6603c60Sopenharmony_ci#include "effect/filter.h"
41f6603c60Sopenharmony_ci
42f6603c60Sopenharmony_ciusing namespace testing;
43f6603c60Sopenharmony_ciusing namespace testing::ext;
44f6603c60Sopenharmony_ci
45f6603c60Sopenharmony_cinamespace OHOS {
46f6603c60Sopenharmony_cinamespace Rosen {
47f6603c60Sopenharmony_cinamespace Drawing {
48f6603c60Sopenharmony_ciclass NativeDrawingCanvasTest : public testing::Test {
49f6603c60Sopenharmony_cipublic:
50f6603c60Sopenharmony_ci    static void SetUpTestCase();
51f6603c60Sopenharmony_ci    static void TearDownTestCase();
52f6603c60Sopenharmony_ci    void SetUp() override;
53f6603c60Sopenharmony_ci    void TearDown() override;
54f6603c60Sopenharmony_ci    protected:
55f6603c60Sopenharmony_ci        OH_Drawing_Canvas *canvas_ = nullptr;
56f6603c60Sopenharmony_ci        OH_Drawing_Brush *brush_ = nullptr;
57f6603c60Sopenharmony_ci};
58f6603c60Sopenharmony_ci
59f6603c60Sopenharmony_ciconstexpr uint32_t POINT_PARAMETER = 3;
60f6603c60Sopenharmony_ciconstexpr uint32_t COLOR_PARAMETER = 3;
61f6603c60Sopenharmony_ci
62f6603c60Sopenharmony_civoid NativeDrawingCanvasTest::SetUpTestCase() {}
63f6603c60Sopenharmony_civoid NativeDrawingCanvasTest::TearDownTestCase() {}
64f6603c60Sopenharmony_civoid NativeDrawingCanvasTest::SetUp()
65f6603c60Sopenharmony_ci{
66f6603c60Sopenharmony_ci    canvas_ = OH_Drawing_CanvasCreate();
67f6603c60Sopenharmony_ci    ASSERT_NE(nullptr, canvas_);
68f6603c60Sopenharmony_ci    OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0xFF, 0xFF));
69f6603c60Sopenharmony_ci    brush_ = OH_Drawing_BrushCreate();
70f6603c60Sopenharmony_ci    EXPECT_NE(brush_, nullptr);
71f6603c60Sopenharmony_ci    OH_Drawing_BrushSetColor(brush_, 0xffff0000);
72f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachBrush(canvas_, brush_);
73f6603c60Sopenharmony_ci}
74f6603c60Sopenharmony_ci
75f6603c60Sopenharmony_civoid NativeDrawingCanvasTest::TearDown()
76f6603c60Sopenharmony_ci{
77f6603c60Sopenharmony_ci    if (canvas_ != nullptr) {
78f6603c60Sopenharmony_ci        OH_Drawing_CanvasDetachBrush(canvas_);
79f6603c60Sopenharmony_ci        OH_Drawing_BrushDestroy(brush_);
80f6603c60Sopenharmony_ci        brush_ = nullptr;
81f6603c60Sopenharmony_ci        OH_Drawing_CanvasDestroy(canvas_);
82f6603c60Sopenharmony_ci        canvas_ = nullptr;
83f6603c60Sopenharmony_ci    }
84f6603c60Sopenharmony_ci}
85f6603c60Sopenharmony_ci
86f6603c60Sopenharmony_ci/*
87f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_CanvasNULLPTR001
88f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasBind.
89f6603c60Sopenharmony_ci * @tc.size  : MediumTest
90f6603c60Sopenharmony_ci * @tc.type  : Function
91f6603c60Sopenharmony_ci * @tc.level : Level 1
92f6603c60Sopenharmony_ci */
93f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_CanvasNULLPTR001, TestSize.Level1)
94f6603c60Sopenharmony_ci{
95f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
96f6603c60Sopenharmony_ci    EXPECT_NE(bitmap, nullptr);
97f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(nullptr, bitmap);
98f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
99f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas_, nullptr);
100f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, INT32_MIN, INT32_MIN);
101f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, INT32_MAX, INT32_MAX);
102f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(nullptr, 0, 0, 20, 20);
103f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas_, 0, 0, INT32_MAX, INT32_MAX);
104f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas_, 0, 0, INT32_MIN, INT32_MIN);
105f6603c60Sopenharmony_ci    OH_Drawing_Path* path = OH_Drawing_PathCreate();
106f6603c60Sopenharmony_ci    OH_Drawing_PathMoveTo(path, INT32_MAX, INT32_MIN);
107f6603c60Sopenharmony_ci    OH_Drawing_PathMoveTo(nullptr, 9999, -1000);
108f6603c60Sopenharmony_ci    OH_Drawing_PathClose(nullptr);
109f6603c60Sopenharmony_ci    OH_Drawing_PathClose(path);
110f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPath(nullptr, path);
111f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPath(canvas_, nullptr);
112f6603c60Sopenharmony_ci    OH_Drawing_PathDestroy(path);
113f6603c60Sopenharmony_ci}
114f6603c60Sopenharmony_ci
115f6603c60Sopenharmony_ci/*
116f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_CanvasBind002
117f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasBind.
118f6603c60Sopenharmony_ci * @tc.size  : MediumTest
119f6603c60Sopenharmony_ci * @tc.type  : Function
120f6603c60Sopenharmony_ci * @tc.level : Level 1
121f6603c60Sopenharmony_ci */
122f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_CanvasBind002, TestSize.Level1)
123f6603c60Sopenharmony_ci{
124f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
125f6603c60Sopenharmony_ci    EXPECT_NE(bitmap, nullptr);
126f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas_, bitmap);
127f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
128f6603c60Sopenharmony_ci}
129f6603c60Sopenharmony_ci
130f6603c60Sopenharmony_ci/*
131f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_canvas003
132f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasAttachPen & OH_Drawing_CanvasDetachPen.
133f6603c60Sopenharmony_ci * @tc.size  : MediumTest
134f6603c60Sopenharmony_ci * @tc.type  : Function
135f6603c60Sopenharmony_ci * @tc.level : Level 1
136f6603c60Sopenharmony_ci */
137f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_canvas003, TestSize.Level1)
138f6603c60Sopenharmony_ci{
139f6603c60Sopenharmony_ci    OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
140f6603c60Sopenharmony_ci    EXPECT_NE(pen, nullptr);
141f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas_, pen);
142f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachPen(canvas_);
143f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
144f6603c60Sopenharmony_ci}
145f6603c60Sopenharmony_ci
146f6603c60Sopenharmony_ci/*
147f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawLine004
148f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasDrawLine.
149f6603c60Sopenharmony_ci * @tc.size  : MediumTest
150f6603c60Sopenharmony_ci * @tc.type  : Function
151f6603c60Sopenharmony_ci * @tc.level : Level 1
152f6603c60Sopenharmony_ci */
153f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawLine004, TestSize.Level1)
154f6603c60Sopenharmony_ci{
155f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas_, 0, 0, 20, 20);
156f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas_, -15.2f, -1, 0, 20);
157f6603c60Sopenharmony_ci}
158f6603c60Sopenharmony_ci
159f6603c60Sopenharmony_ci/*
160f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawPath005
161f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasDrawPath.
162f6603c60Sopenharmony_ci * @tc.size  : MediumTest
163f6603c60Sopenharmony_ci * @tc.type  : Function
164f6603c60Sopenharmony_ci * @tc.level : Level 1
165f6603c60Sopenharmony_ci */
166f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawPath005, TestSize.Level1)
167f6603c60Sopenharmony_ci{
168f6603c60Sopenharmony_ci    OH_Drawing_Path* path = OH_Drawing_PathCreate();
169f6603c60Sopenharmony_ci    EXPECT_NE(path, nullptr);
170f6603c60Sopenharmony_ci    constexpr int height = 300;
171f6603c60Sopenharmony_ci    constexpr int width = 300;
172f6603c60Sopenharmony_ci    constexpr float arc = 18.0f;
173f6603c60Sopenharmony_ci    int len = height / 4;
174f6603c60Sopenharmony_ci    float aX = width / 2;
175f6603c60Sopenharmony_ci    float aY = height / 4;
176f6603c60Sopenharmony_ci    float dX = aX - len * std::sin(arc);
177f6603c60Sopenharmony_ci    float dY = aY + len * std::cos(arc);
178f6603c60Sopenharmony_ci    float cX = aX + len * std::sin(arc);
179f6603c60Sopenharmony_ci    float cY = dY;
180f6603c60Sopenharmony_ci    float bX = aX + (len / 2.0);
181f6603c60Sopenharmony_ci    float bY = aY + std::sqrt((cX - dX) * (cX - dX) + (len / 2.0) * (len / 2.0));
182f6603c60Sopenharmony_ci    float eX = aX - (len / 2.0);
183f6603c60Sopenharmony_ci    float eY = bY;
184f6603c60Sopenharmony_ci    OH_Drawing_PathMoveTo(path, aX, aY);
185f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, bX, bY);
186f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, cX, cY);
187f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, dX, dY);
188f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, eX, eY);
189f6603c60Sopenharmony_ci    OH_Drawing_PathClose(path);
190f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPath(canvas_, path);
191f6603c60Sopenharmony_ci    OH_Drawing_PathDestroy(path);
192f6603c60Sopenharmony_ci}
193f6603c60Sopenharmony_ci
194f6603c60Sopenharmony_ci/*
195f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawPoints006
196f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasDrawPoints.
197f6603c60Sopenharmony_ci * @tc.size  : MediumTest
198f6603c60Sopenharmony_ci * @tc.type  : Function
199f6603c60Sopenharmony_ci * @tc.level : Level 1
200f6603c60Sopenharmony_ci */
201f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawPoints006, TestSize.Level1)
202f6603c60Sopenharmony_ci{
203f6603c60Sopenharmony_ci    OH_Drawing_Point2D pointOne={250, 500};
204f6603c60Sopenharmony_ci    OH_Drawing_Point2D pointTwo={200, 500};
205f6603c60Sopenharmony_ci    OH_Drawing_Point2D pointThree={500, 700};
206f6603c60Sopenharmony_ci    OH_Drawing_Point2D points[POINT_PARAMETER] = {pointOne, pointTwo, pointThree};
207f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPoints(canvas_, POINT_MODE_POINTS, POINT_PARAMETER, nullptr);
208f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPoints(nullptr, POINT_MODE_POINTS, POINT_PARAMETER, nullptr);
209f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPoints(canvas_, POINT_MODE_POINTS, POINT_PARAMETER, points);
210f6603c60Sopenharmony_ci}
211f6603c60Sopenharmony_ci
212f6603c60Sopenharmony_ci/*
213f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawVertices007
214f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasDrawVertices.
215f6603c60Sopenharmony_ci * @tc.size  : MediumTest
216f6603c60Sopenharmony_ci * @tc.type  : Function
217f6603c60Sopenharmony_ci * @tc.level : Level 1
218f6603c60Sopenharmony_ci */
219f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawVertices007, TestSize.Level1)
220f6603c60Sopenharmony_ci{
221f6603c60Sopenharmony_ci    OH_Drawing_Point2D point_one = {0, 0};
222f6603c60Sopenharmony_ci    OH_Drawing_Point2D point_two = {100, 100};
223f6603c60Sopenharmony_ci    OH_Drawing_Point2D point_three = {300, 100};
224f6603c60Sopenharmony_ci    OH_Drawing_Point2D points_vertices[POINT_PARAMETER] = {point_one, point_two, point_three};
225f6603c60Sopenharmony_ci
226f6603c60Sopenharmony_ci    OH_Drawing_Point2D texs_one = {0, 0};
227f6603c60Sopenharmony_ci    OH_Drawing_Point2D texs_two = {1, 1};
228f6603c60Sopenharmony_ci    OH_Drawing_Point2D texs_three = {2, 0};
229f6603c60Sopenharmony_ci    OH_Drawing_Point2D texs_vertices[POINT_PARAMETER] = {texs_one, texs_two, texs_three};
230f6603c60Sopenharmony_ci    uint32_t colors[COLOR_PARAMETER] = {0xFFFF0000, 0xFFFF0000, 0xFFFF0000};
231f6603c60Sopenharmony_ci
232f6603c60Sopenharmony_ci    uint16_t indices[COLOR_PARAMETER] = {0, 1, 2};
233f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawVertices(nullptr, VERTEX_MODE_TRIANGLES, POINT_PARAMETER, points_vertices, texs_vertices,
234f6603c60Sopenharmony_ci                                  colors, POINT_PARAMETER, indices, BLEND_MODE_COLOR);
235f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawVertices(canvas_, VERTEX_MODE_TRIANGLES, POINT_PARAMETER, nullptr, texs_vertices, colors,
236f6603c60Sopenharmony_ci                                  POINT_PARAMETER, indices, BLEND_MODE_COLOR);
237f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawVertices(canvas_, VERTEX_MODE_TRIANGLES, POINT_PARAMETER, points_vertices, nullptr, colors,
238f6603c60Sopenharmony_ci                                  POINT_PARAMETER, indices, BLEND_MODE_COLOR);
239f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawVertices(canvas_, VERTEX_MODE_TRIANGLES, POINT_PARAMETER, points_vertices, texs_vertices,
240f6603c60Sopenharmony_ci                                  nullptr, POINT_PARAMETER, indices, BLEND_MODE_COLOR);
241f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawVertices(canvas_, VERTEX_MODE_TRIANGLES, POINT_PARAMETER, points_vertices, texs_vertices,
242f6603c60Sopenharmony_ci                                  colors, POINT_PARAMETER, nullptr, BLEND_MODE_COLOR);
243f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawVertices(nullptr, VERTEX_MODE_TRIANGLES, POINT_PARAMETER, nullptr, nullptr, nullptr,
244f6603c60Sopenharmony_ci                                  POINT_PARAMETER, nullptr, BLEND_MODE_COLOR);
245f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawVertices(canvas_, VERTEX_MODE_TRIANGLES, POINT_PARAMETER, points_vertices, texs_vertices,
246f6603c60Sopenharmony_ci                                  colors, POINT_PARAMETER, indices, BLEND_MODE_COLOR);
247f6603c60Sopenharmony_ci}
248f6603c60Sopenharmony_ci
249f6603c60Sopenharmony_ci/*
250f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_SaveAndRestore008
251f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasSave & OH_Drawing_CanvasRestore.
252f6603c60Sopenharmony_ci * @tc.size  : MediumTest
253f6603c60Sopenharmony_ci * @tc.type  : Function
254f6603c60Sopenharmony_ci * @tc.level : Level 1
255f6603c60Sopenharmony_ci */
256f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_SaveAndRestore008, TestSize.Level1)
257f6603c60Sopenharmony_ci{
258f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 200, 500, 300);
259f6603c60Sopenharmony_ci    EXPECT_NE(nullptr, rect);
260f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(nullptr);
261f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas_);
262f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(nullptr, 100, 100);
263f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 100, 100);
264f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawArc(nullptr, rect, 10, 200);
265f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawArc(canvas_, nullptr, 10, 200);
266f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawArc(canvas_, rect, 10, 200);
267f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(nullptr);
268f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas_);
269f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 200, 200);
270f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawOval(nullptr, rect);
271f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawOval(canvas_, nullptr);
272f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawOval(canvas_, rect);
273f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(nullptr);
274f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
275f6603c60Sopenharmony_ci}
276f6603c60Sopenharmony_ci
277f6603c60Sopenharmony_ci/*
278f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_Clear009
279f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasClear.
280f6603c60Sopenharmony_ci * @tc.size  : MediumTest
281f6603c60Sopenharmony_ci * @tc.type  : Function
282f6603c60Sopenharmony_ci * @tc.level : Level 1
283f6603c60Sopenharmony_ci */
284f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_Clear009, TestSize.Level1)
285f6603c60Sopenharmony_ci{
286f6603c60Sopenharmony_ci    OH_Drawing_CanvasClear(nullptr, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
287f6603c60Sopenharmony_ci    OH_Drawing_CanvasClear(canvas_, -100);
288f6603c60Sopenharmony_ci    OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(INT32_MAX, INT32_MAX, INT32_MIN, INT32_MIN));
289f6603c60Sopenharmony_ci    OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
290f6603c60Sopenharmony_ci}
291f6603c60Sopenharmony_ci
292f6603c60Sopenharmony_ci/*
293f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_RestoreToCount010
294f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasRestoreToCount.
295f6603c60Sopenharmony_ci * @tc.size  : MediumTest
296f6603c60Sopenharmony_ci * @tc.type  : Function
297f6603c60Sopenharmony_ci * @tc.level : Level 1
298f6603c60Sopenharmony_ci */
299f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_RestoreToCount010, TestSize.Level1)
300f6603c60Sopenharmony_ci{
301f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas_);
302f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 300, 300);
303f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas_);
304f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 100, 100);
305f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas_);
306f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 100, 100);
307f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
308f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
309f6603c60Sopenharmony_ci    int count = OH_Drawing_CanvasGetSaveCount(canvas_);
310f6603c60Sopenharmony_ci    EXPECT_EQ(count, 4);
311f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(nullptr, count - 2);
312f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(canvas_, count - 2);
313f6603c60Sopenharmony_ci    EXPECT_EQ(2, OH_Drawing_CanvasGetSaveCount(canvas_));
314f6603c60Sopenharmony_ci    OH_Drawing_RoundRect *roundRect = OH_Drawing_RoundRectCreate(nullptr, 20, 20);
315f6603c60Sopenharmony_ci    EXPECT_EQ(roundRect, nullptr);
316f6603c60Sopenharmony_ci    roundRect = OH_Drawing_RoundRectCreate(rect, 20, 20);
317f6603c60Sopenharmony_ci    EXPECT_NE(roundRect, nullptr);
318f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRoundRect(nullptr, roundRect);
319f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRoundRect(canvas_, nullptr);
320f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRoundRect(canvas_, roundRect);
321f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(canvas_, 1);
322f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
323f6603c60Sopenharmony_ci    OH_Drawing_RoundRectDestroy(roundRect);
324f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
325f6603c60Sopenharmony_ci    OH_Drawing_RoundRectDestroy(nullptr);
326f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(nullptr);
327f6603c60Sopenharmony_ci}
328f6603c60Sopenharmony_ci
329f6603c60Sopenharmony_ci/*
330f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_Scale011
331f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasScale.
332f6603c60Sopenharmony_ci * @tc.size  : MediumTest
333f6603c60Sopenharmony_ci * @tc.type  : Function
334f6603c60Sopenharmony_ci * @tc.level : Level 1
335f6603c60Sopenharmony_ci */
336f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_Scale011, TestSize.Level1)
337f6603c60Sopenharmony_ci{
338f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 20, 60, 120);
339f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 20, 20);
340f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
341f6603c60Sopenharmony_ci    OH_Drawing_CanvasScale(nullptr, 2, .5f);
342f6603c60Sopenharmony_ci    OH_Drawing_CanvasScale(canvas_, 2, .5f);
343f6603c60Sopenharmony_ci    OH_Drawing_BrushSetColor(nullptr, 0xFF67C23A);
344f6603c60Sopenharmony_ci    OH_Drawing_BrushSetColor(brush_, 0xFF67C23A);
345f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
346f6603c60Sopenharmony_ci}
347f6603c60Sopenharmony_ci/*
348f6603c60Sopenharmony_ci * @tc.name  : NativeDrawingCanvasTest_Skew012
349f6603c60Sopenharmony_ci * @tc.desc  : test for OH_Drawing_CanvasSkew.
350f6603c60Sopenharmony_ci * @tc.size  : MediumTest
351f6603c60Sopenharmony_ci * @tc.type  : Function
352f6603c60Sopenharmony_ci * @tc.level : Level 1
353f6603c60Sopenharmony_ci */
354f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_Skew012, TestSize.Level1)
355f6603c60Sopenharmony_ci{
356f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 100, 300, 300);
357f6603c60Sopenharmony_ci    ASSERT_NE(rect, nullptr);
358f6603c60Sopenharmony_ci    OH_Drawing_CanvasSkew(nullptr, 0, 0.3f);
359f6603c60Sopenharmony_ci    OH_Drawing_BrushSetColor(brush_, 0xFF67C23A);
360f6603c60Sopenharmony_ci    OH_Drawing_CanvasSkew(canvas_, 0, 0.3f);
361f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
362f6603c60Sopenharmony_ci
363f6603c60Sopenharmony_ci    OH_Drawing_Matrix* matrixSkew= OH_Drawing_MatrixCreate();
364f6603c60Sopenharmony_ci    OH_Drawing_MatrixReset(matrixSkew);
365f6603c60Sopenharmony_ci    Matrix* cMatrix = reinterpret_cast<Matrix*>(matrixSkew);
366f6603c60Sopenharmony_ci    EXPECT_NE(cMatrix, nullptr);
367f6603c60Sopenharmony_ci    cMatrix->SetSkew(0, 0.3f);
368f6603c60Sopenharmony_ci
369f6603c60Sopenharmony_ci    OH_Drawing_Matrix* matrixTotal = OH_Drawing_MatrixCreate();
370f6603c60Sopenharmony_ci    OH_Drawing_CanvasGetTotalMatrix(canvas_, nullptr);
371f6603c60Sopenharmony_ci    OH_Drawing_CanvasGetTotalMatrix(nullptr, matrixTotal);
372f6603c60Sopenharmony_ci    float valueMatrixSkew;
373f6603c60Sopenharmony_ci    float valueCanvasSkew;
374f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 0);
375f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 0);
376f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
377f6603c60Sopenharmony_ci
378f6603c60Sopenharmony_ci    OH_Drawing_CanvasGetTotalMatrix(canvas_, matrixTotal);
379f6603c60Sopenharmony_ci    EXPECT_NE(matrixTotal, nullptr);
380f6603c60Sopenharmony_ci
381f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 0);
382f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 0);
383f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
384f6603c60Sopenharmony_ci
385f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 1);
386f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 1);
387f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
388f6603c60Sopenharmony_ci
389f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 2);
390f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 2);
391f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
392f6603c60Sopenharmony_ci
393f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 3);
394f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 3);
395f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
396f6603c60Sopenharmony_ci
397f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 4);
398f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 4);
399f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
400f6603c60Sopenharmony_ci
401f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 5);
402f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 5);
403f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
404f6603c60Sopenharmony_ci
405f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 6);
406f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 6);
407f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
408f6603c60Sopenharmony_ci
409f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 7);
410f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 7);
411f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
412f6603c60Sopenharmony_ci
413f6603c60Sopenharmony_ci    valueMatrixSkew = OH_Drawing_MatrixGetValue(matrixSkew, 8);
414f6603c60Sopenharmony_ci    valueCanvasSkew = OH_Drawing_MatrixGetValue(matrixTotal, 8);
415f6603c60Sopenharmony_ci    EXPECT_TRUE(IsScalarAlmostEqual(valueMatrixSkew, valueCanvasSkew));
416f6603c60Sopenharmony_ci
417f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
418f6603c60Sopenharmony_ci    OH_Drawing_MatrixDestroy(matrixSkew);
419f6603c60Sopenharmony_ci    OH_Drawing_MatrixDestroy(matrixTotal);
420f6603c60Sopenharmony_ci}
421f6603c60Sopenharmony_ci/*
422f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ClipRect013
423f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasClipRect.
424f6603c60Sopenharmony_ci * @tc.size  : MediumTest
425f6603c60Sopenharmony_ci * @tc.type  : Function
426f6603c60Sopenharmony_ci * @tc.level : Level 1
427f6603c60Sopenharmony_ci */
428f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ClipRect013, TestSize.Level1)
429f6603c60Sopenharmony_ci{
430f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 90, 90);
431f6603c60Sopenharmony_ci    OH_Drawing_CanvasRotate(nullptr, 10, 0, 0);
432f6603c60Sopenharmony_ci    OH_Drawing_CanvasRotate(canvas_, 10, 0, 0);
433f6603c60Sopenharmony_ci    OH_Drawing_Point *point = OH_Drawing_PointCreate(100, 60);
434f6603c60Sopenharmony_ci    OH_Drawing_BrushSetAntiAlias(nullptr, true);
435f6603c60Sopenharmony_ci    OH_Drawing_BrushSetAntiAlias(brush_, true);
436f6603c60Sopenharmony_ci    for (auto alias : {false, true}) {
437f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas_);
438f6603c60Sopenharmony_ci        OH_Drawing_CanvasClipRect(nullptr, rect, OH_Drawing_CanvasClipOp::INTERSECT, alias);
439f6603c60Sopenharmony_ci        OH_Drawing_CanvasClipRect(canvas_, nullptr, OH_Drawing_CanvasClipOp::INTERSECT, alias);
440f6603c60Sopenharmony_ci        OH_Drawing_CanvasClipRect(canvas_, rect, OH_Drawing_CanvasClipOp::INTERSECT, alias);
441f6603c60Sopenharmony_ci        OH_Drawing_CanvasDrawCircle(canvas_, nullptr, 60);
442f6603c60Sopenharmony_ci        OH_Drawing_CanvasDrawCircle(nullptr, point, 60);
443f6603c60Sopenharmony_ci        OH_Drawing_CanvasDrawCircle(canvas_, point, 60);
444f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas_);
445f6603c60Sopenharmony_ci        OH_Drawing_CanvasTranslate(canvas_, 80, 0);
446f6603c60Sopenharmony_ci    }
447f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
448f6603c60Sopenharmony_ci    OH_Drawing_PointDestroy(point);
449f6603c60Sopenharmony_ci}
450f6603c60Sopenharmony_ci
451f6603c60Sopenharmony_ci/*
452f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ClipPath014
453f6603c60Sopenharmony_ci * @tc.desc: test for OH_Drawing_CanvasClipPath.
454f6603c60Sopenharmony_ci * @tc.size  : MediumTest
455f6603c60Sopenharmony_ci * @tc.type  : Function
456f6603c60Sopenharmony_ci * @tc.level : Level 1
457f6603c60Sopenharmony_ci */
458f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ClipPath014, TestSize.Level1)
459f6603c60Sopenharmony_ci{
460f6603c60Sopenharmony_ci    OH_Drawing_Path *path = OH_Drawing_PathCreate();
461f6603c60Sopenharmony_ci    OH_Drawing_PathMoveTo(path, 100, 300);
462f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, 200, 300);
463f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, 200, 400);
464f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, 100, 350);
465f6603c60Sopenharmony_ci    OH_Drawing_PathClose(nullptr);
466f6603c60Sopenharmony_ci    OH_Drawing_PathClose(path);
467f6603c60Sopenharmony_ci    OH_Drawing_CanvasClipPath(nullptr, path, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
468f6603c60Sopenharmony_ci    OH_Drawing_CanvasClipPath(canvas_, nullptr, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
469f6603c60Sopenharmony_ci    OH_Drawing_CanvasClipPath(canvas_, path, OH_Drawing_CanvasClipOp::DIFFERENCE, true);
470f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 300, 200, 400);
471f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
472f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
473f6603c60Sopenharmony_ci    OH_Drawing_PathDestroy(path);
474f6603c60Sopenharmony_ci}
475f6603c60Sopenharmony_ci
476f6603c60Sopenharmony_ci/*
477f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_LinearGradient015
478f6603c60Sopenharmony_ci * @tc.desc: test for LinearGradient
479f6603c60Sopenharmony_ci * @tc.size  : MediumTest
480f6603c60Sopenharmony_ci * @tc.type  : Function
481f6603c60Sopenharmony_ci * @tc.level : Level 1
482f6603c60Sopenharmony_ci */
483f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_LinearGradient015, TestSize.Level1)
484f6603c60Sopenharmony_ci{
485f6603c60Sopenharmony_ci    OH_Drawing_Point* startPt = OH_Drawing_PointCreate(100, 400);
486f6603c60Sopenharmony_ci    OH_Drawing_Point* endPt = OH_Drawing_PointCreate(200, 500);
487f6603c60Sopenharmony_ci    uint32_t color[] = {0xffff0000, 0xff00ff00};
488f6603c60Sopenharmony_ci    float pos[] = {0., 1.0};
489f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffect* linearGradient = OH_Drawing_ShaderEffectCreateLinearGradient(startPt, endPt,
490f6603c60Sopenharmony_ci        color, pos, 2, OH_Drawing_TileMode::CLAMP);
491f6603c60Sopenharmony_ci    OH_Drawing_BrushSetShaderEffect(nullptr, linearGradient);
492f6603c60Sopenharmony_ci    OH_Drawing_BrushSetShaderEffect(brush_, nullptr);
493f6603c60Sopenharmony_ci    OH_Drawing_BrushSetShaderEffect(brush_, linearGradient);
494f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
495f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
496f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
497f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffectDestroy(nullptr);
498f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffectDestroy(linearGradient);
499f6603c60Sopenharmony_ci    OH_Drawing_PointDestroy(startPt);
500f6603c60Sopenharmony_ci    OH_Drawing_PointDestroy(endPt);
501f6603c60Sopenharmony_ci}
502f6603c60Sopenharmony_ci
503f6603c60Sopenharmony_ci/*
504f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_SweepGradient016
505f6603c60Sopenharmony_ci * @tc.desc: test for sweep gradient shader effect
506f6603c60Sopenharmony_ci * @tc.size  : MediumTest
507f6603c60Sopenharmony_ci * @tc.type  : Function
508f6603c60Sopenharmony_ci * @tc.level : Level 1
509f6603c60Sopenharmony_ci */
510f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_SweepGradient016, TestSize.Level1)
511f6603c60Sopenharmony_ci{
512f6603c60Sopenharmony_ci    OH_Drawing_Point* centerPt = OH_Drawing_PointCreate(350, 450);
513f6603c60Sopenharmony_ci    uint32_t colors[] = {0xffff00ff, 0xff00ff00};
514f6603c60Sopenharmony_ci    float pos[] = {0., 1.0};
515f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffect* sweepGradient = OH_Drawing_ShaderEffectCreateSweepGradient(nullptr, nullptr,
516f6603c60Sopenharmony_ci        nullptr, -2, OH_Drawing_TileMode::MIRROR);
517f6603c60Sopenharmony_ci    EXPECT_EQ(sweepGradient, nullptr);
518f6603c60Sopenharmony_ci    sweepGradient = OH_Drawing_ShaderEffectCreateSweepGradient(centerPt, colors,
519f6603c60Sopenharmony_ci        pos, 2, OH_Drawing_TileMode::MIRROR);
520f6603c60Sopenharmony_ci    EXPECT_NE(sweepGradient, nullptr);
521f6603c60Sopenharmony_ci    OH_Drawing_BrushSetShaderEffect(brush_, sweepGradient);
522f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(300, 400, 500, 500);
523f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
524f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
525f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffectDestroy(sweepGradient);
526f6603c60Sopenharmony_ci    OH_Drawing_PointDestroy(centerPt);
527f6603c60Sopenharmony_ci}
528f6603c60Sopenharmony_ci/*
529f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ImageShader017
530f6603c60Sopenharmony_ci * @tc.desc: test for image shader effect
531f6603c60Sopenharmony_ci * @tc.size  : MediumTest
532f6603c60Sopenharmony_ci * @tc.type  : Function
533f6603c60Sopenharmony_ci * @tc.level : Level 1
534f6603c60Sopenharmony_ci */
535f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ImageShader017, TestSize.Level1)
536f6603c60Sopenharmony_ci{
537f6603c60Sopenharmony_ci    OH_Drawing_Image *image = OH_Drawing_ImageCreate();
538f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
539f6603c60Sopenharmony_ci    OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0xFF, 0x00));
540f6603c60Sopenharmony_ci    OH_Drawing_SamplingOptions *options = OH_Drawing_SamplingOptionsCreate(FILTER_MODE_LINEAR, MIPMAP_MODE_LINEAR);
541f6603c60Sopenharmony_ci    OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
542f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffect *effect = nullptr;
543f6603c60Sopenharmony_ci    effect = OH_Drawing_ShaderEffectCreateImageShader(nullptr, CLAMP, CLAMP, nullptr, nullptr);
544f6603c60Sopenharmony_ci    EXPECT_EQ(effect, nullptr);
545f6603c60Sopenharmony_ci    effect = OH_Drawing_ShaderEffectCreateImageShader(image, CLAMP, CLAMP, options, matrix);
546f6603c60Sopenharmony_ci    OH_Drawing_BrushSetShaderEffect(brush, effect);
547f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachBrush(canvas_, brush);
548f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(300, 400, 500, 500);
549f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
550f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
551f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffectDestroy(effect);
552f6603c60Sopenharmony_ci    OH_Drawing_MatrixDestroy(matrix);
553f6603c60Sopenharmony_ci    OH_Drawing_SamplingOptionsDestroy(options);
554f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
555f6603c60Sopenharmony_ci    OH_Drawing_ImageDestroy(image);
556f6603c60Sopenharmony_ci}
557f6603c60Sopenharmony_ci
558f6603c60Sopenharmony_ci/*
559f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_RadialGradient
560f6603c60Sopenharmony_ci * @tc.desc: test for Radial gradient shader effect
561f6603c60Sopenharmony_ci * @tc.size  : MediumTest
562f6603c60Sopenharmony_ci * @tc.type  : Function
563f6603c60Sopenharmony_ci * @tc.level : Level 1
564f6603c60Sopenharmony_ci */
565f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_RadialGradient, TestSize.Level1)
566f6603c60Sopenharmony_ci{
567f6603c60Sopenharmony_ci    OH_Drawing_Point* centerPt = OH_Drawing_PointCreate(350, 450);
568f6603c60Sopenharmony_ci    uint32_t colors[] = {0xffff00ff, 0xff00ff00};
569f6603c60Sopenharmony_ci    float pos[] = {0., 1.0};
570f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffect* radialGradient = OH_Drawing_ShaderEffectCreateRadialGradient(nullptr, 20,
571f6603c60Sopenharmony_ci        nullptr, nullptr, -2, OH_Drawing_TileMode::MIRROR);
572f6603c60Sopenharmony_ci    EXPECT_EQ(radialGradient, nullptr);
573f6603c60Sopenharmony_ci    radialGradient = OH_Drawing_ShaderEffectCreateRadialGradient(centerPt, 30, colors,
574f6603c60Sopenharmony_ci        pos, 2, OH_Drawing_TileMode::MIRROR);
575f6603c60Sopenharmony_ci    EXPECT_NE(radialGradient, nullptr);
576f6603c60Sopenharmony_ci    OH_Drawing_BrushSetShaderEffect(brush_, radialGradient);
577f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(300, 400, 500, 500);
578f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
579f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
580f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffectDestroy(radialGradient);
581f6603c60Sopenharmony_ci    OH_Drawing_PointDestroy(centerPt);
582f6603c60Sopenharmony_ci}
583f6603c60Sopenharmony_ci
584f6603c60Sopenharmony_ci/*
585f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_MaskFilter018
586f6603c60Sopenharmony_ci * @tc.desc: test for maskfilter
587f6603c60Sopenharmony_ci * @tc.size  : MediumTest
588f6603c60Sopenharmony_ci * @tc.type  : Function
589f6603c60Sopenharmony_ci * @tc.level : Level 1
590f6603c60Sopenharmony_ci */
591f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_MaskFilter018, TestSize.Level1)
592f6603c60Sopenharmony_ci{
593f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_BrushGetColor(brush_), 0xFFFF0000);
594f6603c60Sopenharmony_ci    OH_Drawing_MaskFilter* maskFilter = OH_Drawing_MaskFilterCreateBlur(OH_Drawing_BlurType::NORMAL, 10, true);
595f6603c60Sopenharmony_ci    OH_Drawing_Filter* filter = OH_Drawing_FilterCreate();
596f6603c60Sopenharmony_ci    OH_Drawing_FilterSetMaskFilter(nullptr, maskFilter);
597f6603c60Sopenharmony_ci    OH_Drawing_FilterSetMaskFilter(filter, nullptr);
598f6603c60Sopenharmony_ci    OH_Drawing_FilterSetMaskFilter(filter, maskFilter);
599f6603c60Sopenharmony_ci    OH_Drawing_BrushSetFilter(brush_, filter);
600f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
601f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
602f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
603f6603c60Sopenharmony_ci    OH_Drawing_MaskFilterDestroy(maskFilter);
604f6603c60Sopenharmony_ci    OH_Drawing_FilterDestroy(filter);
605f6603c60Sopenharmony_ci}
606f6603c60Sopenharmony_ci
607f6603c60Sopenharmony_ci/*
608f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ColorFilter019
609f6603c60Sopenharmony_ci * @tc.desc: test for colorfilter create blend mode, linear to srgb gamma, luma, matrix
610f6603c60Sopenharmony_ci * @tc.size  : MediumTest
611f6603c60Sopenharmony_ci * @tc.type  : Function
612f6603c60Sopenharmony_ci * @tc.level : Level 1
613f6603c60Sopenharmony_ci */
614f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ColorFilterCreateBlendMode019, TestSize.Level1)
615f6603c60Sopenharmony_ci{
616f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_BrushGetColor(brush_), 0xFFFF0000);
617f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* colorFilter = OH_Drawing_ColorFilterCreateBlendMode(0xff0000ff,
618f6603c60Sopenharmony_ci        OH_Drawing_BlendMode::BLEND_MODE_SRC);
619f6603c60Sopenharmony_ci    EXPECT_NE(colorFilter, nullptr);
620f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* colorFilterTmp = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
621f6603c60Sopenharmony_ci    EXPECT_NE(colorFilterTmp, nullptr);
622f6603c60Sopenharmony_ci    OH_Drawing_Filter* filter = OH_Drawing_FilterCreate();
623f6603c60Sopenharmony_ci    EXPECT_NE(filter, nullptr);
624f6603c60Sopenharmony_ci
625f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(nullptr, colorFilter);
626f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(filter, nullptr);
627f6603c60Sopenharmony_ci    OH_Drawing_FilterGetColorFilter(filter, colorFilterTmp);
628f6603c60Sopenharmony_ci    EXPECT_EQ(reinterpret_cast<ColorFilter*>(colorFilterTmp)->GetType(), ColorFilter::FilterType::NO_TYPE);
629f6603c60Sopenharmony_ci
630f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(filter, colorFilter);
631f6603c60Sopenharmony_ci    OH_Drawing_FilterGetColorFilter(filter, colorFilterTmp);
632f6603c60Sopenharmony_ci    EXPECT_EQ(reinterpret_cast<ColorFilter*>(colorFilterTmp)->GetType(), ColorFilter::FilterType::BLEND_MODE);
633f6603c60Sopenharmony_ci
634f6603c60Sopenharmony_ci    OH_Drawing_BrushSetFilter(brush_, nullptr);
635f6603c60Sopenharmony_ci    OH_Drawing_BrushSetFilter(brush_, filter);
636f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 100, 100);
637f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
638f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* linear = OH_Drawing_ColorFilterCreateLinearToSrgbGamma();
639f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(filter, linear);
640f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 100, 100);
641f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
642f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* luma = OH_Drawing_ColorFilterCreateLuma();
643f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(filter, luma);
644f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 200, 200);
645f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
646f6603c60Sopenharmony_ci    const float matrix[20] = {
647f6603c60Sopenharmony_ci        1, 0, 0, 0, 0,
648f6603c60Sopenharmony_ci        0, 1, 0, 0, 0,
649f6603c60Sopenharmony_ci        0, 0, 1, 0, 0,
650f6603c60Sopenharmony_ci        0, 0, 0, 0.5f, 0
651f6603c60Sopenharmony_ci    };
652f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* matrixFilter = OH_Drawing_ColorFilterCreateMatrix(nullptr);
653f6603c60Sopenharmony_ci    EXPECT_EQ(matrixFilter, nullptr);
654f6603c60Sopenharmony_ci    matrixFilter = OH_Drawing_ColorFilterCreateMatrix(matrix);
655f6603c60Sopenharmony_ci    EXPECT_NE(matrixFilter, nullptr);
656f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(filter, matrixFilter);
657f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas_, 300, 300);
658f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
659f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
660f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(colorFilter);
661f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(luma);
662f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(matrixFilter);
663f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(linear);
664f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(colorFilterTmp);
665f6603c60Sopenharmony_ci    OH_Drawing_FilterDestroy(filter);
666f6603c60Sopenharmony_ci    OH_Drawing_FilterDestroy(nullptr);
667f6603c60Sopenharmony_ci}
668f6603c60Sopenharmony_ci
669f6603c60Sopenharmony_ci/*
670f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ColorFilterCreateCompose020
671f6603c60Sopenharmony_ci * @tc.desc: test for create compose color filter
672f6603c60Sopenharmony_ci * @tc.size  : MediumTest
673f6603c60Sopenharmony_ci * @tc.type  : Function
674f6603c60Sopenharmony_ci * @tc.level : Level 1
675f6603c60Sopenharmony_ci */
676f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ColorFilterCreateCompose020, TestSize.Level1)
677f6603c60Sopenharmony_ci{
678f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_BrushGetColor(brush_), 0xFFFF0000);
679f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* outerFilter = OH_Drawing_ColorFilterCreateLuma();
680f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* innerFilter = OH_Drawing_ColorFilterCreateSrgbGammaToLinear();
681f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* compose = OH_Drawing_ColorFilterCreateCompose(nullptr, nullptr);
682f6603c60Sopenharmony_ci    EXPECT_EQ(compose, nullptr);
683f6603c60Sopenharmony_ci    compose = OH_Drawing_ColorFilterCreateCompose(outerFilter, innerFilter);
684f6603c60Sopenharmony_ci    EXPECT_NE(compose, nullptr);
685f6603c60Sopenharmony_ci    OH_Drawing_Filter* filter = OH_Drawing_FilterCreate();
686f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(filter, compose);
687f6603c60Sopenharmony_ci    OH_Drawing_BrushSetFilter(brush_, filter);
688f6603c60Sopenharmony_ci    OH_Drawing_Canvas* canvas_ = OH_Drawing_CanvasCreate();
689f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
690f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
691f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
692f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(outerFilter);
693f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(innerFilter);
694f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(compose);
695f6603c60Sopenharmony_ci    OH_Drawing_FilterDestroy(filter);
696f6603c60Sopenharmony_ci}
697f6603c60Sopenharmony_ci
698f6603c60Sopenharmony_ci/*
699f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawBitmap021
700f6603c60Sopenharmony_ci * @tc.desc: test for DrawBitmap
701f6603c60Sopenharmony_ci * @tc.size  : MediumTest
702f6603c60Sopenharmony_ci * @tc.type  : Function
703f6603c60Sopenharmony_ci * @tc.level : Level 1
704f6603c60Sopenharmony_ci */
705f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawBitmap021, TestSize.Level1)
706f6603c60Sopenharmony_ci{
707f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
708f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
709f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
710f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
711f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
712f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas_, bitmap);
713f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBitmap(canvas_, bitmap, 0, 0);
714f6603c60Sopenharmony_ci    OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0xFF, 0xFF));
715f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
716f6603c60Sopenharmony_ci}
717f6603c60Sopenharmony_ci/*
718f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawBitmapRect022
719f6603c60Sopenharmony_ci * @tc.desc: test for DrawBitmapRect
720f6603c60Sopenharmony_ci * @tc.size  : MediumTest
721f6603c60Sopenharmony_ci * @tc.type  : Function
722f6603c60Sopenharmony_ci * @tc.level : Level 1
723f6603c60Sopenharmony_ci */
724f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawBitmapRect022, TestSize.Level1)
725f6603c60Sopenharmony_ci{
726f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
727f6603c60Sopenharmony_ci    EXPECT_NE(bitmap, nullptr);
728f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
729f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
730f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
731f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
732f6603c60Sopenharmony_ci    OH_Drawing_Rect* src = OH_Drawing_RectCreate(0, 0, 200, 200);
733f6603c60Sopenharmony_ci    EXPECT_NE(src, nullptr);
734f6603c60Sopenharmony_ci    OH_Drawing_Rect* dst = OH_Drawing_RectCreate(0, 0, 200, 200);
735f6603c60Sopenharmony_ci    EXPECT_NE(dst, nullptr);
736f6603c60Sopenharmony_ci    OH_Drawing_SamplingOptions* options = OH_Drawing_SamplingOptionsCreate(
737f6603c60Sopenharmony_ci        OH_Drawing_FilterMode::FILTER_MODE_NEAREST, OH_Drawing_MipmapMode::MIPMAP_MODE_NEAREST);
738f6603c60Sopenharmony_ci    EXPECT_NE(options, nullptr);
739f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, dst, options);
740f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, dst, nullptr);
741f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, src, nullptr, nullptr);
742f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBitmapRect(canvas_, bitmap, nullptr, nullptr, nullptr);
743f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBitmapRect(canvas_, nullptr, nullptr, nullptr, nullptr);
744f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBitmapRect(nullptr, nullptr, nullptr, nullptr, nullptr);
745f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
746f6603c60Sopenharmony_ci}
747f6603c60Sopenharmony_ci
748f6603c60Sopenharmony_ci/*
749f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_SetMatrix023
750f6603c60Sopenharmony_ci * @tc.desc: test for SetMatrix
751f6603c60Sopenharmony_ci * @tc.size  : MediumTest
752f6603c60Sopenharmony_ci * @tc.type  : Function
753f6603c60Sopenharmony_ci * @tc.level : Level 1
754f6603c60Sopenharmony_ci */
755f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_SetMatrix023, TestSize.Level1)
756f6603c60Sopenharmony_ci{
757f6603c60Sopenharmony_ci    OH_Drawing_Matrix* matrix = OH_Drawing_MatrixCreate();
758f6603c60Sopenharmony_ci    EXPECT_NE(matrix, nullptr);
759f6603c60Sopenharmony_ci    OH_Drawing_MatrixSetMatrix(
760f6603c60Sopenharmony_ci        matrix,
761f6603c60Sopenharmony_ci        1, 0, 0,
762f6603c60Sopenharmony_ci        0, -1, 0,
763f6603c60Sopenharmony_ci        0, 0, 1);
764f6603c60Sopenharmony_ci    OH_Drawing_CanvasSetMatrix(canvas_, matrix);
765f6603c60Sopenharmony_ci    OH_Drawing_CanvasSetMatrix(canvas_, nullptr);
766f6603c60Sopenharmony_ci    OH_Drawing_CanvasSetMatrix(nullptr, nullptr);
767f6603c60Sopenharmony_ci    OH_Drawing_MatrixDestroy(matrix);
768f6603c60Sopenharmony_ci}
769f6603c60Sopenharmony_ci
770f6603c60Sopenharmony_ci/*
771f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ResetMatrix024
772f6603c60Sopenharmony_ci * @tc.desc: test for ResetMatrix
773f6603c60Sopenharmony_ci * @tc.size  : MediumTest
774f6603c60Sopenharmony_ci * @tc.type  : Function
775f6603c60Sopenharmony_ci * @tc.level : Level 1
776f6603c60Sopenharmony_ci */
777f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ResetMatrix024, TestSize.Level1)
778f6603c60Sopenharmony_ci{
779f6603c60Sopenharmony_ci    OH_Drawing_CanvasResetMatrix(nullptr);
780f6603c60Sopenharmony_ci    OH_Drawing_CanvasResetMatrix(canvas_);
781f6603c60Sopenharmony_ci}
782f6603c60Sopenharmony_ci
783f6603c60Sopenharmony_ci/*
784f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawImageRect025
785f6603c60Sopenharmony_ci * @tc.desc: test for DrawImageRect
786f6603c60Sopenharmony_ci * @tc.size  : MediumTest
787f6603c60Sopenharmony_ci * @tc.type  : Function
788f6603c60Sopenharmony_ci * @tc.level : Level 1
789f6603c60Sopenharmony_ci */
790f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawImageRect025, TestSize.Level1)
791f6603c60Sopenharmony_ci{
792f6603c60Sopenharmony_ci    OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 200, 200);
793f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
794f6603c60Sopenharmony_ci    OH_Drawing_Image* image = OH_Drawing_ImageCreate();
795f6603c60Sopenharmony_ci    EXPECT_NE(image, nullptr);
796f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
797f6603c60Sopenharmony_ci    EXPECT_NE(bitmap, nullptr);
798f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
799f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
800f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
801f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
802f6603c60Sopenharmony_ci    OH_Drawing_ImageBuildFromBitmap(image, bitmap);
803f6603c60Sopenharmony_ci    OH_Drawing_SamplingOptions* options = OH_Drawing_SamplingOptionsCreate(
804f6603c60Sopenharmony_ci        OH_Drawing_FilterMode::FILTER_MODE_NEAREST, OH_Drawing_MipmapMode::MIPMAP_MODE_NEAREST);
805f6603c60Sopenharmony_ci    EXPECT_NE(options, nullptr);
806f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawImageRect(canvas_, image, rect, options);
807f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawImageRect(canvas_, image, rect, nullptr);
808f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawImageRect(canvas_, image, nullptr, nullptr);
809f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawImageRect(canvas_, nullptr, nullptr, nullptr);
810f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawImageRect(nullptr, nullptr, nullptr, nullptr);
811f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawImageRectWithSrc(canvas_, image, rect, rect, options, STRICT_SRC_RECT_CONSTRAINT);
812f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawImageRectWithSrc(nullptr, nullptr, nullptr, nullptr, nullptr, STRICT_SRC_RECT_CONSTRAINT);
813f6603c60Sopenharmony_ci    OH_Drawing_SamplingOptionsDestroy(options);
814f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
815f6603c60Sopenharmony_ci    OH_Drawing_ImageDestroy(image);
816f6603c60Sopenharmony_ci}
817f6603c60Sopenharmony_ci
818f6603c60Sopenharmony_ci/*
819f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ReadPixelsToBitmap026
820f6603c60Sopenharmony_ci * @tc.desc: test for ReadPixelsToBitmap
821f6603c60Sopenharmony_ci * @tc.size  : MediumTest
822f6603c60Sopenharmony_ci * @tc.type  : Function
823f6603c60Sopenharmony_ci * @tc.level : Level 1
824f6603c60Sopenharmony_ci */
825f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ReadPixelsToBitmap026, TestSize.Level1)
826f6603c60Sopenharmony_ci{
827f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
828f6603c60Sopenharmony_ci    EXPECT_NE(bitmap, nullptr);
829f6603c60Sopenharmony_ci    EXPECT_TRUE(!OH_Drawing_CanvasReadPixelsToBitmap(canvas_, bitmap, 100, 100));
830f6603c60Sopenharmony_ci    EXPECT_TRUE(!OH_Drawing_CanvasReadPixelsToBitmap(canvas_, nullptr, 100, 100));
831f6603c60Sopenharmony_ci    EXPECT_TRUE(!OH_Drawing_CanvasReadPixelsToBitmap(nullptr, nullptr, 100, 100));
832f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
833f6603c60Sopenharmony_ci}
834f6603c60Sopenharmony_ci
835f6603c60Sopenharmony_ci/*
836f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ReadPixels027
837f6603c60Sopenharmony_ci * @tc.desc: test for ReadPixels
838f6603c60Sopenharmony_ci * @tc.size  : MediumTest
839f6603c60Sopenharmony_ci * @tc.type  : Function
840f6603c60Sopenharmony_ci * @tc.level : Level 1
841f6603c60Sopenharmony_ci */
842f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ReadPixels027, TestSize.Level1)
843f6603c60Sopenharmony_ci{
844f6603c60Sopenharmony_ci    OH_Drawing_Image_Info imageInfo;
845f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
846f6603c60Sopenharmony_ci    EXPECT_NE(bitmap, nullptr);
847f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
848f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
849f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
850f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
851f6603c60Sopenharmony_ci    void* pixels = OH_Drawing_BitmapGetPixels(bitmap);
852f6603c60Sopenharmony_ci    EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, &imageInfo, pixels, 0, 0, 0));
853f6603c60Sopenharmony_ci    EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, &imageInfo, nullptr, 0, 0, 0));
854f6603c60Sopenharmony_ci    EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(canvas_, nullptr, nullptr, 0, 0, 0));
855f6603c60Sopenharmony_ci    EXPECT_TRUE(!OH_Drawing_CanvasReadPixels(nullptr, nullptr, nullptr, 0, 0, 0));
856f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
857f6603c60Sopenharmony_ci}
858f6603c60Sopenharmony_ci
859f6603c60Sopenharmony_ci/*
860f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_GetWidth028
861f6603c60Sopenharmony_ci * @tc.desc: test for GetWidth
862f6603c60Sopenharmony_ci * @tc.size  : MediumTest
863f6603c60Sopenharmony_ci * @tc.type  : Function
864f6603c60Sopenharmony_ci * @tc.level : Level 1
865f6603c60Sopenharmony_ci */
866f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_GetWidth028, TestSize.Level1)
867f6603c60Sopenharmony_ci{
868f6603c60Sopenharmony_ci    EXPECT_TRUE(OH_Drawing_CanvasGetWidth(nullptr) == 0);
869f6603c60Sopenharmony_ci    EXPECT_TRUE(OH_Drawing_CanvasGetWidth(canvas_) >= 0);
870f6603c60Sopenharmony_ci}
871f6603c60Sopenharmony_ci
872f6603c60Sopenharmony_ci/*
873f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_GetHeight029
874f6603c60Sopenharmony_ci * @tc.desc: test for GetHeight
875f6603c60Sopenharmony_ci * @tc.size  : MediumTest
876f6603c60Sopenharmony_ci * @tc.type  : Function
877f6603c60Sopenharmony_ci * @tc.level : Level 1
878f6603c60Sopenharmony_ci */
879f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_GetHeight029, TestSize.Level1)
880f6603c60Sopenharmony_ci{
881f6603c60Sopenharmony_ci    EXPECT_TRUE(OH_Drawing_CanvasGetHeight(nullptr) == 0);
882f6603c60Sopenharmony_ci    EXPECT_TRUE(OH_Drawing_CanvasGetHeight(canvas_) >= 0);
883f6603c60Sopenharmony_ci}
884f6603c60Sopenharmony_ci
885f6603c60Sopenharmony_ci/*
886f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_GetLocalClipBounds030
887f6603c60Sopenharmony_ci * @tc.desc: test for GetLocalClipBounds
888f6603c60Sopenharmony_ci * @tc.size  : MediumTest
889f6603c60Sopenharmony_ci * @tc.type  : Function
890f6603c60Sopenharmony_ci * @tc.level : Level 1
891f6603c60Sopenharmony_ci */
892f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_GetLocalClipBounds030, TestSize.Level1)
893f6603c60Sopenharmony_ci{
894f6603c60Sopenharmony_ci    OH_Drawing_CanvasGetLocalClipBounds(nullptr, nullptr);
895f6603c60Sopenharmony_ci    OH_Drawing_Rect* rect = OH_Drawing_RectCreate(0, 0, 1, 1);
896f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
897f6603c60Sopenharmony_ci    OH_Drawing_CanvasGetLocalClipBounds(nullptr, rect);
898f6603c60Sopenharmony_ci    OH_Drawing_CanvasGetLocalClipBounds(canvas_, rect);
899f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
900f6603c60Sopenharmony_ci}
901f6603c60Sopenharmony_ci
902f6603c60Sopenharmony_ci/*
903f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ConcatMatrix031
904f6603c60Sopenharmony_ci * @tc.desc: test for ConcatMatrix
905f6603c60Sopenharmony_ci * @tc.size  : MediumTest
906f6603c60Sopenharmony_ci * @tc.type  : Function
907f6603c60Sopenharmony_ci * @tc.level : Level 1
908f6603c60Sopenharmony_ci */
909f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ConcatMatrix031, TestSize.Level1)
910f6603c60Sopenharmony_ci{
911f6603c60Sopenharmony_ci    OH_Drawing_Matrix* matrix = OH_Drawing_MatrixCreate();
912f6603c60Sopenharmony_ci    EXPECT_NE(matrix, nullptr);
913f6603c60Sopenharmony_ci    OH_Drawing_MatrixSetMatrix(
914f6603c60Sopenharmony_ci        matrix,
915f6603c60Sopenharmony_ci        1, 0, 0,
916f6603c60Sopenharmony_ci        0, -1, 0,
917f6603c60Sopenharmony_ci        0, 0, 1);
918f6603c60Sopenharmony_ci    OH_Drawing_CanvasConcatMatrix(canvas_, matrix);
919f6603c60Sopenharmony_ci    OH_Drawing_CanvasConcatMatrix(canvas_, nullptr);
920f6603c60Sopenharmony_ci    OH_Drawing_CanvasConcatMatrix(nullptr, nullptr);
921f6603c60Sopenharmony_ci    OH_Drawing_MatrixDestroy(matrix);
922f6603c60Sopenharmony_ci}
923f6603c60Sopenharmony_ci
924f6603c60Sopenharmony_ci/*
925f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawShadow032
926f6603c60Sopenharmony_ci * @tc.desc: test for DrawShadow
927f6603c60Sopenharmony_ci * @tc.size  : MediumTest
928f6603c60Sopenharmony_ci * @tc.type  : Function
929f6603c60Sopenharmony_ci * @tc.level : Level 1
930f6603c60Sopenharmony_ci */
931f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawShadow032, TestSize.Level1)
932f6603c60Sopenharmony_ci{
933f6603c60Sopenharmony_ci    OH_Drawing_Point3D p1{0.0, 0.0, 0.0};
934f6603c60Sopenharmony_ci    OH_Drawing_Point3D p2{10.0, 10.0, 10.0};
935f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawShadow(nullptr, nullptr, p1, p2, 0, 0xFF000000,
936f6603c60Sopenharmony_ci        0xFF000000, OH_Drawing_CanvasShadowFlags::SHADOW_FLAGS_ALL);
937f6603c60Sopenharmony_ci
938f6603c60Sopenharmony_ci    OH_Drawing_Path* path = OH_Drawing_PathCreate();
939f6603c60Sopenharmony_ci    EXPECT_NE(path, nullptr);
940f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawShadow(canvas_, path, p1, p2, 10, 0xFF000000, 0xFF000000,
941f6603c60Sopenharmony_ci        OH_Drawing_CanvasShadowFlags::SHADOW_FLAGS_ALL);
942f6603c60Sopenharmony_ci}
943f6603c60Sopenharmony_ci/*
944f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawTextBlob033
945f6603c60Sopenharmony_ci * @tc.desc: test for DrawTextBlob
946f6603c60Sopenharmony_ci * @tc.size  : MediumTest
947f6603c60Sopenharmony_ci * @tc.type  : Function
948f6603c60Sopenharmony_ci * @tc.level : Level 1
949f6603c60Sopenharmony_ci */
950f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawTextBlob033, TestSize.Level1)
951f6603c60Sopenharmony_ci{
952f6603c60Sopenharmony_ci    OH_Drawing_Font *font = OH_Drawing_FontCreate();
953f6603c60Sopenharmony_ci    OH_Drawing_FontSetFakeBoldText(font, true);
954f6603c60Sopenharmony_ci    OH_Drawing_FontSetTextSize(font, 20);
955f6603c60Sopenharmony_ci    OH_Drawing_FontSetTextSkewX(font, 0.25);
956f6603c60Sopenharmony_ci    OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault();
957f6603c60Sopenharmony_ci    OH_Drawing_FontSetTypeface(font, typeSurface);
958f6603c60Sopenharmony_ci    auto *builder = OH_Drawing_TextBlobBuilderCreate();
959f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobBuilderAllocRunPos(nullptr, nullptr, INT32_MAX, nullptr));
960f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobBuilderAllocRunPos(builder, font, INT32_MIN, nullptr));
961f6603c60Sopenharmony_ci    const OH_Drawing_RunBuffer* runBuffer = OH_Drawing_TextBlobBuilderAllocRunPos(builder, font, 9, nullptr);
962f6603c60Sopenharmony_ci    ASSERT_NE(runBuffer, nullptr);
963f6603c60Sopenharmony_ci    runBuffer->glyphs[0] = 65;
964f6603c60Sopenharmony_ci    runBuffer->pos[0] = 0;
965f6603c60Sopenharmony_ci    runBuffer->pos[1] = 0;
966f6603c60Sopenharmony_ci    runBuffer->glyphs[1] = 227;
967f6603c60Sopenharmony_ci    runBuffer->pos[2] = 14.9;
968f6603c60Sopenharmony_ci    runBuffer->pos[3] = 0;
969f6603c60Sopenharmony_ci    runBuffer->glyphs[2] = 283;
970f6603c60Sopenharmony_ci    runBuffer->pos[4] = 25.84;
971f6603c60Sopenharmony_ci    runBuffer->pos[5] = 0;
972f6603c60Sopenharmony_ci    runBuffer->glyphs[3] = 283;
973f6603c60Sopenharmony_ci    runBuffer->pos[6] = 30.62;
974f6603c60Sopenharmony_ci    runBuffer->pos[7] = 0;
975f6603c60Sopenharmony_ci    runBuffer->glyphs[4] = 299;
976f6603c60Sopenharmony_ci    runBuffer->pos[8] = 35.4;
977f6603c60Sopenharmony_ci    runBuffer->pos[9] = 0;
978f6603c60Sopenharmony_ci    runBuffer->glyphs[5] = 2;
979f6603c60Sopenharmony_ci    runBuffer->pos[10] = 47.22;
980f6603c60Sopenharmony_ci    runBuffer->pos[11] = 0;
981f6603c60Sopenharmony_ci    runBuffer->glyphs[6]= 94;
982f6603c60Sopenharmony_ci    runBuffer->pos[12] = 52.62;
983f6603c60Sopenharmony_ci    runBuffer->pos[13] = 0;
984f6603c60Sopenharmony_ci    runBuffer->glyphs[7] = 37;
985f6603c60Sopenharmony_ci    runBuffer->pos[14] = 67.42;
986f6603c60Sopenharmony_ci    runBuffer->pos[15] = 0;
987f6603c60Sopenharmony_ci    runBuffer->glyphs[8] = 84;
988f6603c60Sopenharmony_ci    runBuffer->pos[16] = 81.7;
989f6603c60Sopenharmony_ci    runBuffer->pos[17] = 0;
990f6603c60Sopenharmony_ci    OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobBuilderMake(builder);
991f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawTextBlob(canvas_, textBlob, 100, 700);
992f6603c60Sopenharmony_ci    OH_Drawing_TextBlobDestroy(textBlob);
993f6603c60Sopenharmony_ci    OH_Drawing_TextBlobBuilderDestroy(builder);
994f6603c60Sopenharmony_ci    OH_Drawing_FontDestroy(font);
995f6603c60Sopenharmony_ci    OH_Drawing_TypefaceDestroy(typeSurface);
996f6603c60Sopenharmony_ci    OH_Drawing_TextBlobDestroy(nullptr);
997f6603c60Sopenharmony_ci    OH_Drawing_TextBlobBuilderDestroy(nullptr);
998f6603c60Sopenharmony_ci    OH_Drawing_FontDestroy(nullptr);
999f6603c60Sopenharmony_ci    OH_Drawing_TypefaceDestroy(nullptr);
1000f6603c60Sopenharmony_ci}
1001f6603c60Sopenharmony_ci
1002f6603c60Sopenharmony_ci/*
1003f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawTextBlob034
1004f6603c60Sopenharmony_ci * @tc.desc: test for DrawTextBlob2
1005f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1006f6603c60Sopenharmony_ci * @tc.type  : Function
1007f6603c60Sopenharmony_ci * @tc.level : Level 1
1008f6603c60Sopenharmony_ci */
1009f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawTextBlob034, TestSize.Level1)
1010f6603c60Sopenharmony_ci{
1011f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0);
1012f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
1013f6603c60Sopenharmony_ci    OH_Drawing_Font *font = OH_Drawing_FontCreate();
1014f6603c60Sopenharmony_ci    EXPECT_NE(font, nullptr);
1015f6603c60Sopenharmony_ci    const char* str = "123456";
1016f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobCreateFromString(nullptr,
1017f6603c60Sopenharmony_ci        font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8));
1018f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobCreateFromString(str,
1019f6603c60Sopenharmony_ci        nullptr, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8));
1020f6603c60Sopenharmony_ci    OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromString(str,
1021f6603c60Sopenharmony_ci        font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1022f6603c60Sopenharmony_ci    EXPECT_NE(textBlob, nullptr);
1023f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawTextBlob(canvas_, textBlob, 0, 0);
1024f6603c60Sopenharmony_ci    OH_Drawing_TextBlobGetBounds(textBlob, nullptr);
1025f6603c60Sopenharmony_ci    OH_Drawing_TextBlobGetBounds(textBlob, rect);
1026f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas_, rect);
1027f6603c60Sopenharmony_ci    OH_Drawing_TextBlobDestroy(textBlob);
1028f6603c60Sopenharmony_ci    OH_Drawing_FontDestroy(font);
1029f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
1030f6603c60Sopenharmony_ci}
1031f6603c60Sopenharmony_ci
1032f6603c60Sopenharmony_ci/*
1033f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawTextBlob035
1034f6603c60Sopenharmony_ci * @tc.desc: test for DrawTextBlob3
1035f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1036f6603c60Sopenharmony_ci * @tc.type  : Function
1037f6603c60Sopenharmony_ci * @tc.level : Level 1
1038f6603c60Sopenharmony_ci */
1039f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawTextBlob035, TestSize.Level1)
1040f6603c60Sopenharmony_ci{
1041f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, 0, 0);
1042f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
1043f6603c60Sopenharmony_ci    OH_Drawing_Font *font = OH_Drawing_FontCreate();
1044f6603c60Sopenharmony_ci    EXPECT_NE(font, nullptr);
1045f6603c60Sopenharmony_ci    OH_Drawing_Typeface* typeface = OH_Drawing_TypefaceCreateFromFile(nullptr, 0);
1046f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, typeface);
1047f6603c60Sopenharmony_ci    // sub test 1, OH_Drawing_FontGetTypeface
1048f6603c60Sopenharmony_ci    OH_Drawing_FontGetTypeface(nullptr);
1049f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, typeface);
1050f6603c60Sopenharmony_ci    OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault();
1051f6603c60Sopenharmony_ci    OH_Drawing_FontSetTypeface(font, typeSurface);
1052f6603c60Sopenharmony_ci    EXPECT_NE(nullptr, OH_Drawing_FontGetTypeface(font));
1053f6603c60Sopenharmony_ci    // sub test 2, OH_Drawing_FontCountText
1054f6603c60Sopenharmony_ci    const char* str = "123456";
1055f6603c60Sopenharmony_ci    int count = 0;
1056f6603c60Sopenharmony_ci    count = OH_Drawing_FontCountText(nullptr, str, strlen(str),
1057f6603c60Sopenharmony_ci        OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1058f6603c60Sopenharmony_ci    EXPECT_EQ(0, count);
1059f6603c60Sopenharmony_ci    count = OH_Drawing_FontCountText(font, nullptr, strlen(str),
1060f6603c60Sopenharmony_ci        OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1061f6603c60Sopenharmony_ci    EXPECT_EQ(0, count);
1062f6603c60Sopenharmony_ci    count = OH_Drawing_FontCountText(font, str, strlen(str),
1063f6603c60Sopenharmony_ci        OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1064f6603c60Sopenharmony_ci    EXPECT_EQ(strlen(str), count);
1065f6603c60Sopenharmony_ci    // sub test 3, OH_Drawing_TextBlobCreateFromText
1066f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobCreateFromText(nullptr, strlen(str),
1067f6603c60Sopenharmony_ci        font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8));
1068f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobCreateFromText(str, strlen(str),
1069f6603c60Sopenharmony_ci        nullptr, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8));
1070f6603c60Sopenharmony_ci    OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromText(str, strlen(str),
1071f6603c60Sopenharmony_ci        font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1072f6603c60Sopenharmony_ci    EXPECT_NE(textBlob, nullptr);
1073f6603c60Sopenharmony_ci    EXPECT_TRUE(OH_Drawing_TextBlobUniqueID(nullptr) == 0);
1074f6603c60Sopenharmony_ci    EXPECT_TRUE(OH_Drawing_TextBlobUniqueID(textBlob) > 0);
1075f6603c60Sopenharmony_ci    // draw textblob
1076f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawTextBlob(canvas_, textBlob, 0, 0);
1077f6603c60Sopenharmony_ci
1078f6603c60Sopenharmony_ci    OH_Drawing_TextBlobDestroy(textBlob);
1079f6603c60Sopenharmony_ci    OH_Drawing_FontDestroy(font);
1080f6603c60Sopenharmony_ci    OH_Drawing_TypefaceDestroy(typeSurface);
1081f6603c60Sopenharmony_ci}
1082f6603c60Sopenharmony_ci
1083f6603c60Sopenharmony_ci/*
1084f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawTextBlob036
1085f6603c60Sopenharmony_ci * @tc.desc: test for DrawTextBlob4
1086f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1087f6603c60Sopenharmony_ci * @tc.type  : Function
1088f6603c60Sopenharmony_ci * @tc.level : Level 1
1089f6603c60Sopenharmony_ci */
1090f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawTextBlob036, TestSize.Level1)
1091f6603c60Sopenharmony_ci{
1092f6603c60Sopenharmony_ci    size_t length = 1;
1093f6603c60Sopenharmony_ci    OH_Drawing_Font *font = OH_Drawing_FontCreate();
1094f6603c60Sopenharmony_ci    EXPECT_NE(font, nullptr);
1095f6603c60Sopenharmony_ci    OH_Drawing_MemoryStream* memoryStream = OH_Drawing_MemoryStreamCreate(nullptr,
1096f6603c60Sopenharmony_ci        length, false);
1097f6603c60Sopenharmony_ci    OH_Drawing_MemoryStreamDestroy(memoryStream);
1098f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, memoryStream);
1099f6603c60Sopenharmony_ci    OH_Drawing_Typeface* typeface = OH_Drawing_TypefaceCreateFromStream(
1100f6603c60Sopenharmony_ci        memoryStream, 0);
1101f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, typeface);
1102f6603c60Sopenharmony_ci    OH_Drawing_Typeface *typeSurface = OH_Drawing_TypefaceCreateDefault();
1103f6603c60Sopenharmony_ci    OH_Drawing_FontSetTypeface(font, typeSurface);
1104f6603c60Sopenharmony_ci    EXPECT_NE(nullptr, OH_Drawing_FontGetTypeface(font));
1105f6603c60Sopenharmony_ci    const char* str = "123456";
1106f6603c60Sopenharmony_ci    int count = strlen(str);
1107f6603c60Sopenharmony_ci    OH_Drawing_Point2D pts[count];
1108f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobCreateFromPosText(nullptr, count, &pts[0],
1109f6603c60Sopenharmony_ci        font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8));
1110f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobCreateFromPosText(str, count, nullptr,
1111f6603c60Sopenharmony_ci        font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8));
1112f6603c60Sopenharmony_ci    EXPECT_EQ(nullptr, OH_Drawing_TextBlobCreateFromPosText(str, count, &pts[0],
1113f6603c60Sopenharmony_ci        nullptr, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8));
1114f6603c60Sopenharmony_ci    OH_Drawing_TextBlob *textBlob = OH_Drawing_TextBlobCreateFromPosText(str, count, &pts[0],
1115f6603c60Sopenharmony_ci        font, OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1116f6603c60Sopenharmony_ci    EXPECT_NE(textBlob, nullptr);
1117f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawTextBlob(canvas_, textBlob, 0, 0);
1118f6603c60Sopenharmony_ci
1119f6603c60Sopenharmony_ci    OH_Drawing_TextBlobDestroy(textBlob);
1120f6603c60Sopenharmony_ci    OH_Drawing_FontDestroy(font);
1121f6603c60Sopenharmony_ci    OH_Drawing_TypefaceDestroy(typeSurface);
1122f6603c60Sopenharmony_ci}
1123f6603c60Sopenharmony_ci
1124f6603c60Sopenharmony_ci/*
1125f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_SaveLayer037
1126f6603c60Sopenharmony_ci * @tc.desc: test for SaveLayer
1127f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1128f6603c60Sopenharmony_ci * @tc.type  : Function
1129f6603c60Sopenharmony_ci * @tc.level : Level 1
1130f6603c60Sopenharmony_ci */
1131f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_SaveLayer037, TestSize.Level1)
1132f6603c60Sopenharmony_ci{
1133f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
1134f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
1135f6603c60Sopenharmony_ci    OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
1136f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
1137f6603c60Sopenharmony_ci    // test exception
1138f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(nullptr, rect, brush);
1139f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas_, rect, brush);
1140f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas_);
1141f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
1142f6603c60Sopenharmony_ci}
1143f6603c60Sopenharmony_ci/*
1144f6603c60Sopenharmony_ci * @tc.name: NativeDrawingTest001
1145f6603c60Sopenharmony_ci * @tc.desc: test for fontSetLinearText
1146f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1147f6603c60Sopenharmony_ci * @tc.type  : Function
1148f6603c60Sopenharmony_ci * @tc.level : Level 1
1149f6603c60Sopenharmony_ci */
1150f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, OH_Drawing_FontSetLinearText_001, TestSize.Level1)
1151f6603c60Sopenharmony_ci{
1152f6603c60Sopenharmony_ci    OH_Drawing_Font *font = OH_Drawing_FontCreate();
1153f6603c60Sopenharmony_ci    OH_Drawing_FontSetTextSize(font, 20);
1154f6603c60Sopenharmony_ci    OH_Drawing_FontSetTextSkewX(font, 0.25);
1155f6603c60Sopenharmony_ci    OH_Drawing_FontSetLinearText(font, true);
1156f6603c60Sopenharmony_ci    OH_Drawing_FontDestroy(font);
1157f6603c60Sopenharmony_ci}
1158f6603c60Sopenharmony_ci
1159f6603c60Sopenharmony_ci/*
1160f6603c60Sopenharmony_ci * @tc.name: NativeDrawingTest002
1161f6603c60Sopenharmony_ci * @tc.desc: test for penSetFilter
1162f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1163f6603c60Sopenharmony_ci * @tc.type  : Function
1164f6603c60Sopenharmony_ci * @tc.level : Level 1
1165f6603c60Sopenharmony_ci */
1166f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, OH_Drawing_PenSetFilter_001, TestSize.Level1)
1167f6603c60Sopenharmony_ci{
1168f6603c60Sopenharmony_ci    OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate();
1169f6603c60Sopenharmony_ci    EXPECT_EQ(canvas == nullptr, false);
1170f6603c60Sopenharmony_ci    OH_Drawing_ColorFilter* colorFilter = OH_Drawing_ColorFilterCreateBlendMode(0xff0000ff,
1171f6603c60Sopenharmony_ci        OH_Drawing_BlendMode::BLEND_MODE_SRC);
1172f6603c60Sopenharmony_ci    OH_Drawing_Filter* filter = OH_Drawing_FilterCreate();
1173f6603c60Sopenharmony_ci    OH_Drawing_FilterSetColorFilter(filter, colorFilter);
1174f6603c60Sopenharmony_ci    OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
1175f6603c60Sopenharmony_ci    OH_Drawing_PenSetColor(pen, 0xff00ff00);
1176f6603c60Sopenharmony_ci    OH_Drawing_PenSetFilter(pen, filter);
1177f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas, pen);
1178f6603c60Sopenharmony_ci    OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 400, 200, 500);
1179f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas, rect);
1180f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
1181f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
1182f6603c60Sopenharmony_ci    OH_Drawing_ColorFilterDestroy(colorFilter);
1183f6603c60Sopenharmony_ci    OH_Drawing_FilterDestroy(filter);
1184f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1185f6603c60Sopenharmony_ci}
1186f6603c60Sopenharmony_ci
1187f6603c60Sopenharmony_ci/*
1188f6603c60Sopenharmony_ci * @tc.name: NativeDrawingTest003
1189f6603c60Sopenharmony_ci * @tc.desc: test for penSetFilter
1190f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1191f6603c60Sopenharmony_ci * @tc.type  : Function
1192f6603c60Sopenharmony_ci * @tc.level : Level 1
1193f6603c60Sopenharmony_ci */
1194f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, OH_Drawing_PenSetshaderEffect, TestSize.Level1)
1195f6603c60Sopenharmony_ci{
1196f6603c60Sopenharmony_ci    OH_Drawing_Canvas* canvas = OH_Drawing_CanvasCreate();
1197f6603c60Sopenharmony_ci    EXPECT_EQ(canvas == nullptr, false);
1198f6603c60Sopenharmony_ci    OH_Drawing_Point* startPt = OH_Drawing_PointCreate(100, 400);
1199f6603c60Sopenharmony_ci    OH_Drawing_Point* endPt = OH_Drawing_PointCreate(200, 500);
1200f6603c60Sopenharmony_ci    uint32_t color[] = {0xffff0000, 0xff00ff00};
1201f6603c60Sopenharmony_ci    float pos[] = {0., 1.0};
1202f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffect* linearGradient = OH_Drawing_ShaderEffectCreateLinearGradient(startPt, endPt,
1203f6603c60Sopenharmony_ci        color, pos, 2, OH_Drawing_TileMode::CLAMP);
1204f6603c60Sopenharmony_ci    OH_Drawing_Pen* pen = OH_Drawing_PenCreate();
1205f6603c60Sopenharmony_ci    OH_Drawing_PenSetShaderEffect(pen, linearGradient);
1206f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas, pen);
1207f6603c60Sopenharmony_ci    OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 400, 200, 500);
1208f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas, rect);
1209f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
1210f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
1211f6603c60Sopenharmony_ci    OH_Drawing_ShaderEffectDestroy(linearGradient);
1212f6603c60Sopenharmony_ci    OH_Drawing_PointDestroy(startPt);
1213f6603c60Sopenharmony_ci    OH_Drawing_PointDestroy(endPt);
1214f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1215f6603c60Sopenharmony_ci}
1216f6603c60Sopenharmony_ci/*
1217f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawRegion038
1218f6603c60Sopenharmony_ci * @tc.desc: test for DrawRegion
1219f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1220f6603c60Sopenharmony_ci * @tc.type  : Function
1221f6603c60Sopenharmony_ci * @tc.level : Level 1
1222f6603c60Sopenharmony_ci */
1223f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawRegion038, TestSize.Level1)
1224f6603c60Sopenharmony_ci{
1225f6603c60Sopenharmony_ci    OH_Drawing_Region* region=OH_Drawing_RegionCreate();
1226f6603c60Sopenharmony_ci    OH_Drawing_Rect* rect=OH_Drawing_RectCreate(0.0f, 0.0f, 256.0f, 256.0f);
1227f6603c60Sopenharmony_ci    OH_Drawing_RegionSetRect(region, rect);
1228f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRegion(canvas_, region);
1229f6603c60Sopenharmony_ci}
1230f6603c60Sopenharmony_ci
1231f6603c60Sopenharmony_ci/*
1232f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawBackground039
1233f6603c60Sopenharmony_ci * @tc.desc: test for DrawBackground
1234f6603c60Sopenharmony_ci * @tc.size  : MediumTest
1235f6603c60Sopenharmony_ci * @tc.type  : Function
1236f6603c60Sopenharmony_ci * @tc.level : Level 1
1237f6603c60Sopenharmony_ci */
1238f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawBackground039, TestSize.Level1)
1239f6603c60Sopenharmony_ci{
1240f6603c60Sopenharmony_ci    OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
1241f6603c60Sopenharmony_ci    OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
1242f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawBackground(canvas_, brush);
1243f6603c60Sopenharmony_ci}
1244f6603c60Sopenharmony_ci
1245f6603c60Sopenharmony_ci/*
1246f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_DrawColor046
1247f6603c60Sopenharmony_ci * @tc.desc: test for DrawColor
1248f6603c60Sopenharmony_ci * @tc.type: FUNC
1249f6603c60Sopenharmony_ci * @tc.require: SR000S9F0C
1250f6603c60Sopenharmony_ci */
1251f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_DrawColor046, TestSize.Level1)
1252f6603c60Sopenharmony_ci{
1253f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasDrawColor(nullptr, 0xFFFF0000, OH_Drawing_BlendMode::BLEND_MODE_SRC),
1254f6603c60Sopenharmony_ci        OH_DRAWING_ERROR_INVALID_PARAMETER);
1255f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasDrawColor(canvas_, 0xFFFF0000, OH_Drawing_BlendMode::BLEND_MODE_COLOR),
1256f6603c60Sopenharmony_ci        OH_DRAWING_SUCCESS);
1257f6603c60Sopenharmony_ci}
1258f6603c60Sopenharmony_ci
1259f6603c60Sopenharmony_ci/*
1260f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_IsClipEmpty042
1261f6603c60Sopenharmony_ci * @tc.desc: test for if clip is empty
1262f6603c60Sopenharmony_ci * @tc.type: FUNC
1263f6603c60Sopenharmony_ci * @tc.require: AR000GTO5R
1264f6603c60Sopenharmony_ci */
1265f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_IsClipEmpty042, TestSize.Level1)
1266f6603c60Sopenharmony_ci{
1267f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
1268f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
1269f6603c60Sopenharmony_ci    // 720: bitmap's width, 720: bitmap's height
1270f6603c60Sopenharmony_ci    constexpr uint32_t width = 720;
1271f6603c60Sopenharmony_ci    constexpr uint32_t height = 720;
1272f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
1273f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas_, bitmap);
1274f6603c60Sopenharmony_ci
1275f6603c60Sopenharmony_ci    // 150.0f: rect's left, 100.0f: rect's top, 500.0f: rect's right, 500.0f: rect's bottom
1276f6603c60Sopenharmony_ci    OH_Drawing_Rect* rect = OH_Drawing_RectCreate(150.0f, 100.0f, 500.f, 500.f);
1277f6603c60Sopenharmony_ci
1278f6603c60Sopenharmony_ci    OH_Drawing_CanvasClipRect(canvas_, rect, OH_Drawing_CanvasClipOp::INTERSECT, false);
1279f6603c60Sopenharmony_ci
1280f6603c60Sopenharmony_ci    bool isClipEmpty = false;
1281f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasIsClipEmpty(canvas_, &isClipEmpty), OH_DRAWING_SUCCESS);
1282f6603c60Sopenharmony_ci    EXPECT_EQ(isClipEmpty, false);
1283f6603c60Sopenharmony_ci
1284f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
1285f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
1286f6603c60Sopenharmony_ci}
1287f6603c60Sopenharmony_ci
1288f6603c60Sopenharmony_ci/*
1289f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_GetImageInfo043
1290f6603c60Sopenharmony_ci * @tc.desc: test for Gets ImageInfo of Canvas.
1291f6603c60Sopenharmony_ci * @tc.type: FUNC
1292f6603c60Sopenharmony_ci * @tc.require: AR000GTO5R
1293f6603c60Sopenharmony_ci */
1294f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_GetImageInfo043, TestSize.Level1)
1295f6603c60Sopenharmony_ci{
1296f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
1297f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
1298f6603c60Sopenharmony_ci    // 720: bitmap's width, 720: bitmap's height
1299f6603c60Sopenharmony_ci    constexpr uint32_t width = 720;
1300f6603c60Sopenharmony_ci    constexpr uint32_t height = 720;
1301f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
1302f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas_, bitmap);
1303f6603c60Sopenharmony_ci    OH_Drawing_Image_Info* imageInfo = new OH_Drawing_Image_Info();
1304f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetImageInfo(canvas_, imageInfo), OH_DRAWING_SUCCESS);
1305f6603c60Sopenharmony_ci    EXPECT_EQ(720, imageInfo->width);
1306f6603c60Sopenharmony_ci    EXPECT_EQ(720, imageInfo->height);
1307f6603c60Sopenharmony_ci    EXPECT_EQ(1, imageInfo->alphaType);
1308f6603c60Sopenharmony_ci    EXPECT_EQ(4, imageInfo->colorType);
1309f6603c60Sopenharmony_ci    delete imageInfo;
1310f6603c60Sopenharmony_ci}
1311f6603c60Sopenharmony_ci
1312f6603c60Sopenharmony_ci
1313f6603c60Sopenharmony_ci/*
1314f6603c60Sopenharmony_ci * @tc.name: NativeDrawingCanvasTest_ClipRegion044
1315f6603c60Sopenharmony_ci * @tc.desc: test for Drawing Canvas Clip Region.
1316f6603c60Sopenharmony_ci * @tc.type: FUNC
1317f6603c60Sopenharmony_ci * @tc.require: AR000GTO5R
1318f6603c60Sopenharmony_ci */
1319f6603c60Sopenharmony_ciHWTEST_F(NativeDrawingCanvasTest, NativeDrawingCanvasTest_ClipRegion044, TestSize.Level1)
1320f6603c60Sopenharmony_ci{
1321f6603c60Sopenharmony_ci    OH_Drawing_Bitmap* bitmap = OH_Drawing_BitmapCreate();
1322f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
1323f6603c60Sopenharmony_ci    constexpr uint32_t width = 720; // 720: width of canvas
1324f6603c60Sopenharmony_ci    constexpr uint32_t height = 720; // 720: height of canvas
1325f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
1326f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas_, bitmap);
1327f6603c60Sopenharmony_ci
1328f6603c60Sopenharmony_ci    OH_Drawing_Region *region = OH_Drawing_RegionCreate();
1329f6603c60Sopenharmony_ci    // 0.0f: rect's left, 0.0f: rect's top, 720.0f: rect's right, 720.0f: rect's bottom
1330f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0.0f, 0.0f, 720.f, 720.f);
1331f6603c60Sopenharmony_ci    OH_Drawing_RegionSetRect(region, rect);
1332f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasClipRegion(canvas_, region, OH_Drawing_CanvasClipOp::INTERSECT), OH_DRAWING_SUCCESS);
1333f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasClipRegion(nullptr, region, OH_Drawing_CanvasClipOp::INTERSECT),
1334f6603c60Sopenharmony_ci        OH_DRAWING_ERROR_INVALID_PARAMETER);
1335f6603c60Sopenharmony_ci
1336f6603c60Sopenharmony_ci    EXPECT_EQ(720, OH_Drawing_CanvasGetWidth(canvas_));
1337f6603c60Sopenharmony_ci    EXPECT_EQ(720, OH_Drawing_CanvasGetHeight(canvas_));
1338f6603c60Sopenharmony_ci
1339f6603c60Sopenharmony_ci    OH_Drawing_RegionDestroy(region);
1340f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
1341f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
1342f6603c60Sopenharmony_ci}
1343f6603c60Sopenharmony_ci} // namespace Drawing
1344f6603c60Sopenharmony_ci} // namespace Rosen
1345f6603c60Sopenharmony_ci} // namespace OHOS