1f6603c60Sopenharmony_ci/*
2f6603c60Sopenharmony_ci * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development 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, software
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 "DrawingNativeCanvasCommon.h"
19f6603c60Sopenharmony_ci#include "drawing_bitmap.h"
20f6603c60Sopenharmony_ci#include "drawing_brush.h"
21f6603c60Sopenharmony_ci#include "drawing_canvas.h"
22f6603c60Sopenharmony_ci#include "drawing_color.h"
23f6603c60Sopenharmony_ci#include "drawing_color_filter.h"
24f6603c60Sopenharmony_ci#include "drawing_filter.h"
25f6603c60Sopenharmony_ci#include "drawing_font.h"
26f6603c60Sopenharmony_ci#include "drawing_image.h"
27f6603c60Sopenharmony_ci#include "drawing_mask_filter.h"
28f6603c60Sopenharmony_ci#include "drawing_matrix.h"
29f6603c60Sopenharmony_ci#include "drawing_memory_stream.h"
30f6603c60Sopenharmony_ci#include "drawing_path.h"
31f6603c60Sopenharmony_ci#include "drawing_pen.h"
32f6603c60Sopenharmony_ci#include "drawing_point.h"
33f6603c60Sopenharmony_ci#include "drawing_rect.h"
34f6603c60Sopenharmony_ci#include "drawing_region.h"
35f6603c60Sopenharmony_ci#include "drawing_round_rect.h"
36f6603c60Sopenharmony_ci#include "drawing_sampling_options.h"
37f6603c60Sopenharmony_ci#include "drawing_shader_effect.h"
38f6603c60Sopenharmony_ci#include "drawing_text_blob.h"
39f6603c60Sopenharmony_ci#include "drawing_typeface.h"
40f6603c60Sopenharmony_ci
41f6603c60Sopenharmony_ciusing namespace testing;
42f6603c60Sopenharmony_ciusing namespace testing::ext;
43f6603c60Sopenharmony_ci
44f6603c60Sopenharmony_cinamespace OHOS {
45f6603c60Sopenharmony_cinamespace Rosen {
46f6603c60Sopenharmony_cinamespace Drawing {
47f6603c60Sopenharmony_ci
48f6603c60Sopenharmony_ci/*
49f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0100
50f6603c60Sopenharmony_ci * @tc.name: testCanvasDestroyNormal
51f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDestroyNormal.
52f6603c60Sopenharmony_ci * @tc.size  : SmallTest
53f6603c60Sopenharmony_ci * @tc.type  : Function
54f6603c60Sopenharmony_ci * @tc.level : Level 0
55f6603c60Sopenharmony_ci */
56f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDestroyNormal, TestSize.Level0) {
57f6603c60Sopenharmony_ci    // step 1
58f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
59f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
60f6603c60Sopenharmony_ci    // step 2
61f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
62f6603c60Sopenharmony_ci}
63f6603c60Sopenharmony_ci
64f6603c60Sopenharmony_ci/*
65f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0101
66f6603c60Sopenharmony_ci * @tc.name: testCanvasDestroyNull
67f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDestroyNull.
68f6603c60Sopenharmony_ci * @tc.size  : SmallTest
69f6603c60Sopenharmony_ci * @tc.type  : Function
70f6603c60Sopenharmony_ci * @tc.level : Level 3
71f6603c60Sopenharmony_ci */
72f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDestroyNull, TestSize.Level3) {
73f6603c60Sopenharmony_ci    // step 1
74f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(nullptr);
75f6603c60Sopenharmony_ci}
76f6603c60Sopenharmony_ci
77f6603c60Sopenharmony_ci/*
78f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0200
79f6603c60Sopenharmony_ci * @tc.name: testCanvasBindNormal
80f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasBindNormal.
81f6603c60Sopenharmony_ci * @tc.size  : SmallTest
82f6603c60Sopenharmony_ci * @tc.type  : Function
83f6603c60Sopenharmony_ci * @tc.level : Level 0
84f6603c60Sopenharmony_ci */
85f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasBindNormal, TestSize.Level0) {
86f6603c60Sopenharmony_ci    // step 1
87f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
88f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
89f6603c60Sopenharmony_ci
90f6603c60Sopenharmony_ci    // step 2
91f6603c60Sopenharmony_ci    OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
92f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
93f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
94f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
95f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
96f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas, bitmap);
97f6603c60Sopenharmony_ci
98f6603c60Sopenharmony_ci    // step 3
99f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
100f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
101f6603c60Sopenharmony_ci}
102f6603c60Sopenharmony_ci
103f6603c60Sopenharmony_ci/*
104f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0201
105f6603c60Sopenharmony_ci * @tc.name: testCanvasBindNull
106f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasBindNull.
107f6603c60Sopenharmony_ci * @tc.size  : SmallTest
108f6603c60Sopenharmony_ci * @tc.type  : Function
109f6603c60Sopenharmony_ci * @tc.level : Level 3
110f6603c60Sopenharmony_ci */
111f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasBindNull, TestSize.Level3) {
112f6603c60Sopenharmony_ci    // step 1
113f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
114f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
115f6603c60Sopenharmony_ci
116f6603c60Sopenharmony_ci    // step 2
117f6603c60Sopenharmony_ci    OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
118f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
119f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
120f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
121f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
122f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(nullptr, bitmap);
123f6603c60Sopenharmony_ci
124f6603c60Sopenharmony_ci    // step 3
125f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas, nullptr);
126f6603c60Sopenharmony_ci
127f6603c60Sopenharmony_ci    // step 4
128f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
129f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
130f6603c60Sopenharmony_ci}
131f6603c60Sopenharmony_ci
132f6603c60Sopenharmony_ci/*
133f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0202
134f6603c60Sopenharmony_ci * @tc.name: testCanvasBindDestroyBitmap
135f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasBindNull.
136f6603c60Sopenharmony_ci * @tc.size  : SmallTest
137f6603c60Sopenharmony_ci * @tc.type  : Function
138f6603c60Sopenharmony_ci * @tc.level : Level 3
139f6603c60Sopenharmony_ci */
140f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasBindDestroyBitmap, TestSize.Level3) {
141f6603c60Sopenharmony_ci    // step 1
142f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
143f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
144f6603c60Sopenharmony_ci
145f6603c60Sopenharmony_ci    // step 2
146f6603c60Sopenharmony_ci    OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
147f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
148f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
149f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
150f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
151f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas, bitmap);
152f6603c60Sopenharmony_ci
153f6603c60Sopenharmony_ci    // step 3
154f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
155f6603c60Sopenharmony_ci
156f6603c60Sopenharmony_ci    // step 4
157f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(10, 100, 200, 300);
158f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawRect(canvas, rect);
159f6603c60Sopenharmony_ci
160f6603c60Sopenharmony_ci    // step 5
161f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
162f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
163f6603c60Sopenharmony_ci}
164f6603c60Sopenharmony_ci
165f6603c60Sopenharmony_ci/*
166f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0203
167f6603c60Sopenharmony_ci * @tc.name: testCanvasBindMultipleCalls
168f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasBindNormal.
169f6603c60Sopenharmony_ci * @tc.size  : SmallTest
170f6603c60Sopenharmony_ci * @tc.type  : Function
171f6603c60Sopenharmony_ci * @tc.level : Level 0
172f6603c60Sopenharmony_ci */
173f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasBindMultipleCalls, TestSize.Level0) {
174f6603c60Sopenharmony_ci    // step 1
175f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
176f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
177f6603c60Sopenharmony_ci
178f6603c60Sopenharmony_ci    // step 2
179f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
180f6603c60Sopenharmony_ci        OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
181f6603c60Sopenharmony_ci        OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
182f6603c60Sopenharmony_ci        uint32_t width = 200 + i;
183f6603c60Sopenharmony_ci        uint32_t height = 200 + i;
184f6603c60Sopenharmony_ci        OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
185f6603c60Sopenharmony_ci        OH_Drawing_CanvasBind(canvas, bitmap);
186f6603c60Sopenharmony_ci        OH_Drawing_BitmapDestroy(bitmap);
187f6603c60Sopenharmony_ci    }
188f6603c60Sopenharmony_ci
189f6603c60Sopenharmony_ci    // step 3
190f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
191f6603c60Sopenharmony_ci}
192f6603c60Sopenharmony_ci
193f6603c60Sopenharmony_ci/*
194f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0204
195f6603c60Sopenharmony_ci * @tc.name: testCanvasBindBoundaryMultipleCallsBoundary
196f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasBindBoundaryl.
197f6603c60Sopenharmony_ci * @tc.size  : SmallTest
198f6603c60Sopenharmony_ci * @tc.type  : Function
199f6603c60Sopenharmony_ci * @tc.level : Level 0
200f6603c60Sopenharmony_ci */
201f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasBindBoundaryMultipleCallsBoundary, TestSize.Level0) {
202f6603c60Sopenharmony_ci    // step 1
203f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
204f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
205f6603c60Sopenharmony_ci
206f6603c60Sopenharmony_ci    // step 2
207f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
208f6603c60Sopenharmony_ci        OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
209f6603c60Sopenharmony_ci        OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
210f6603c60Sopenharmony_ci        uint32_t width = 4096;
211f6603c60Sopenharmony_ci        uint32_t height = 2160;
212f6603c60Sopenharmony_ci        OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
213f6603c60Sopenharmony_ci        OH_Drawing_CanvasBind(canvas, bitmap);
214f6603c60Sopenharmony_ci        OH_Drawing_BitmapDestroy(bitmap);
215f6603c60Sopenharmony_ci    }
216f6603c60Sopenharmony_ci
217f6603c60Sopenharmony_ci    // step 3
218f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
219f6603c60Sopenharmony_ci}
220f6603c60Sopenharmony_ci
221f6603c60Sopenharmony_ci/*
222f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0300
223f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachPenDetachPenNormal
224f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachPenDetachPenNormal.
225f6603c60Sopenharmony_ci * @tc.size  : SmallTest
226f6603c60Sopenharmony_ci * @tc.type  : Function
227f6603c60Sopenharmony_ci * @tc.level : Level 0
228f6603c60Sopenharmony_ci */
229f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachPenDetachPenNormal, TestSize.Level0) {
230f6603c60Sopenharmony_ci    // step 1
231f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
232f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
233f6603c60Sopenharmony_ci
234f6603c60Sopenharmony_ci    // step 2
235f6603c60Sopenharmony_ci    OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
236f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
237f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
238f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
239f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
240f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas, bitmap);
241f6603c60Sopenharmony_ci
242f6603c60Sopenharmony_ci    // step 3
243f6603c60Sopenharmony_ci    OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
244f6603c60Sopenharmony_ci    EXPECT_NE(pen, nullptr);
245f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas, pen);
246f6603c60Sopenharmony_ci
247f6603c60Sopenharmony_ci    // step 4
248f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachPen(canvas);
249f6603c60Sopenharmony_ci
250f6603c60Sopenharmony_ci    // step 5
251f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
252f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
253f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
254f6603c60Sopenharmony_ci}
255f6603c60Sopenharmony_ci
256f6603c60Sopenharmony_ci/*
257f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0301
258f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachPenDetachPenNull
259f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachPenDetachPenNull.
260f6603c60Sopenharmony_ci * @tc.size  : SmallTest
261f6603c60Sopenharmony_ci * @tc.type  : Function
262f6603c60Sopenharmony_ci * @tc.level : Level 3
263f6603c60Sopenharmony_ci */
264f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachPenDetachPenNull, TestSize.Level3) {
265f6603c60Sopenharmony_ci    // step 1
266f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
267f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
268f6603c60Sopenharmony_ci
269f6603c60Sopenharmony_ci    OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
270f6603c60Sopenharmony_ci    EXPECT_NE(pen, nullptr);
271f6603c60Sopenharmony_ci
272f6603c60Sopenharmony_ci    // step 2
273f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(nullptr, pen);
274f6603c60Sopenharmony_ci
275f6603c60Sopenharmony_ci    // step 3
276f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas, nullptr);
277f6603c60Sopenharmony_ci
278f6603c60Sopenharmony_ci    // step 4
279f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachPen(nullptr);
280f6603c60Sopenharmony_ci
281f6603c60Sopenharmony_ci    // step 5
282f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas2 = OH_Drawing_CanvasCreate();
283f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachPen(canvas2);
284f6603c60Sopenharmony_ci
285f6603c60Sopenharmony_ci    // step 6
286f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
287f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
288f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas2);
289f6603c60Sopenharmony_ci}
290f6603c60Sopenharmony_ci
291f6603c60Sopenharmony_ci/*
292f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0302
293f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachPenDetachPenMultipleCalls
294f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachPenDetachPenMultipleCalls.
295f6603c60Sopenharmony_ci * @tc.size  : SmallTest
296f6603c60Sopenharmony_ci * @tc.type  : Function
297f6603c60Sopenharmony_ci * @tc.level : Level 3
298f6603c60Sopenharmony_ci */
299f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachPenDetachPenMultipleCalls, TestSize.Level3) {
300f6603c60Sopenharmony_ci    // step 1
301f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
302f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
303f6603c60Sopenharmony_ci
304f6603c60Sopenharmony_ci    OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
305f6603c60Sopenharmony_ci    EXPECT_NE(pen, nullptr);
306f6603c60Sopenharmony_ci
307f6603c60Sopenharmony_ci    // step 2
308f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
309f6603c60Sopenharmony_ci        OH_Drawing_CanvasAttachPen(canvas, pen);
310f6603c60Sopenharmony_ci    }
311f6603c60Sopenharmony_ci
312f6603c60Sopenharmony_ci    // step 3
313f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
314f6603c60Sopenharmony_ci        OH_Drawing_CanvasDetachPen(canvas);
315f6603c60Sopenharmony_ci    }
316f6603c60Sopenharmony_ci
317f6603c60Sopenharmony_ci    // step 4
318f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
319f6603c60Sopenharmony_ci        OH_Drawing_CanvasAttachPen(canvas, pen);
320f6603c60Sopenharmony_ci        OH_Drawing_CanvasDetachPen(canvas);
321f6603c60Sopenharmony_ci    }
322f6603c60Sopenharmony_ci
323f6603c60Sopenharmony_ci    // step 5
324f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
325f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
326f6603c60Sopenharmony_ci}
327f6603c60Sopenharmony_ci
328f6603c60Sopenharmony_ci/*
329f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0303
330f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachPenOnly
331f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachPenOnly.
332f6603c60Sopenharmony_ci * @tc.size  : SmallTest
333f6603c60Sopenharmony_ci * @tc.type  : Function
334f6603c60Sopenharmony_ci * @tc.level : Level 3
335f6603c60Sopenharmony_ci */
336f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachPenOnly, TestSize.Level3) {
337f6603c60Sopenharmony_ci    // step 1
338f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
339f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
340f6603c60Sopenharmony_ci
341f6603c60Sopenharmony_ci    OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
342f6603c60Sopenharmony_ci    EXPECT_NE(pen, nullptr);
343f6603c60Sopenharmony_ci
344f6603c60Sopenharmony_ci    // step 2
345f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas, pen);
346f6603c60Sopenharmony_ci
347f6603c60Sopenharmony_ci    // step 3
348f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
349f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
350f6603c60Sopenharmony_ci}
351f6603c60Sopenharmony_ci
352f6603c60Sopenharmony_ci/*
353f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0304
354f6603c60Sopenharmony_ci * @tc.name: testCanvasDetachPenOnly
355f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDetachPenOnly.
356f6603c60Sopenharmony_ci * @tc.size  : SmallTest
357f6603c60Sopenharmony_ci * @tc.type  : Function
358f6603c60Sopenharmony_ci * @tc.level : Level 3
359f6603c60Sopenharmony_ci */
360f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDetachPenOnly, TestSize.Level3) {
361f6603c60Sopenharmony_ci    // step 1
362f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
363f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
364f6603c60Sopenharmony_ci
365f6603c60Sopenharmony_ci    // step 2
366f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachPen(canvas);
367f6603c60Sopenharmony_ci
368f6603c60Sopenharmony_ci    // step 3
369f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
370f6603c60Sopenharmony_ci}
371f6603c60Sopenharmony_ci
372f6603c60Sopenharmony_ci/*
373f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0305
374f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachPenDetachPenBoundary
375f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachPenDetachPenBounday.
376f6603c60Sopenharmony_ci * @tc.size  : SmallTest
377f6603c60Sopenharmony_ci * @tc.type  : Function
378f6603c60Sopenharmony_ci * @tc.level : Level 0
379f6603c60Sopenharmony_ci */
380f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachPenDetachPenBoundary, TestSize.Level0) {
381f6603c60Sopenharmony_ci    // step 1
382f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
383f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
384f6603c60Sopenharmony_ci
385f6603c60Sopenharmony_ci    // step 2
386f6603c60Sopenharmony_ci    OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
387f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
388f6603c60Sopenharmony_ci    constexpr uint32_t width = 4096;
389f6603c60Sopenharmony_ci    constexpr uint32_t height = 2160;
390f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
391f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas, bitmap);
392f6603c60Sopenharmony_ci
393f6603c60Sopenharmony_ci    // step 3
394f6603c60Sopenharmony_ci    OH_Drawing_Pen *pen = OH_Drawing_PenCreate();
395f6603c60Sopenharmony_ci    EXPECT_NE(pen, nullptr);
396f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachPen(canvas, pen);
397f6603c60Sopenharmony_ci
398f6603c60Sopenharmony_ci    // step 4
399f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachPen(canvas);
400f6603c60Sopenharmony_ci
401f6603c60Sopenharmony_ci    // step 5
402f6603c60Sopenharmony_ci    OH_Drawing_PenDestroy(pen);
403f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
404f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
405f6603c60Sopenharmony_ci}
406f6603c60Sopenharmony_ci
407f6603c60Sopenharmony_ci/*
408f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0400
409f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachBrushDetachBrushNormal
410f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachBrushDetachBrushNormal.
411f6603c60Sopenharmony_ci * @tc.size  : SmallTest
412f6603c60Sopenharmony_ci * @tc.type  : Function
413f6603c60Sopenharmony_ci * @tc.level : Level 3
414f6603c60Sopenharmony_ci */
415f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachBrushDetachBrushNormal, TestSize.Level3) {
416f6603c60Sopenharmony_ci    // step 1
417f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
418f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
419f6603c60Sopenharmony_ci
420f6603c60Sopenharmony_ci    // step 2
421f6603c60Sopenharmony_ci    OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
422f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
423f6603c60Sopenharmony_ci    constexpr uint32_t width = 200;
424f6603c60Sopenharmony_ci    constexpr uint32_t height = 200;
425f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
426f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas, bitmap);
427f6603c60Sopenharmony_ci
428f6603c60Sopenharmony_ci    // step 3
429f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
430f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
431f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachBrush(canvas, brush);
432f6603c60Sopenharmony_ci
433f6603c60Sopenharmony_ci    // step 4
434f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachBrush(canvas);
435f6603c60Sopenharmony_ci
436f6603c60Sopenharmony_ci    // step 5
437f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
438f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
439f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
440f6603c60Sopenharmony_ci}
441f6603c60Sopenharmony_ci
442f6603c60Sopenharmony_ci/*
443f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0401
444f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachBrushDetachBrushNull
445f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachBrushDetachBrushNull.
446f6603c60Sopenharmony_ci * @tc.size  : SmallTest
447f6603c60Sopenharmony_ci * @tc.type  : Function
448f6603c60Sopenharmony_ci * @tc.level : Level 3
449f6603c60Sopenharmony_ci */
450f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachBrushDetachBrushNull, TestSize.Level3) {
451f6603c60Sopenharmony_ci    // step 1
452f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
453f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
454f6603c60Sopenharmony_ci
455f6603c60Sopenharmony_ci    // step 2
456f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
457f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
458f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachBrush(nullptr, brush);
459f6603c60Sopenharmony_ci
460f6603c60Sopenharmony_ci    // step 3
461f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachBrush(canvas, nullptr);
462f6603c60Sopenharmony_ci
463f6603c60Sopenharmony_ci    // step 4
464f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachBrush(nullptr);
465f6603c60Sopenharmony_ci
466f6603c60Sopenharmony_ci    // step 5
467f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas2 = OH_Drawing_CanvasCreate();
468f6603c60Sopenharmony_ci    EXPECT_NE(canvas2, nullptr);
469f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachBrush(canvas2);
470f6603c60Sopenharmony_ci
471f6603c60Sopenharmony_ci    // step 6
472f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
473f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
474f6603c60Sopenharmony_ci}
475f6603c60Sopenharmony_ci
476f6603c60Sopenharmony_ci/*
477f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0402
478f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachBrushDetachBrushMultipleCalls
479f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachBrushDetachBrushMultipleCalls
480f6603c60Sopenharmony_ci * @tc.size  : SmallTest
481f6603c60Sopenharmony_ci * @tc.type  : Function
482f6603c60Sopenharmony_ci * @tc.level : Level 3
483f6603c60Sopenharmony_ci */
484f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachBrushDetachBrushMultipleCalls, TestSize.Level3) {
485f6603c60Sopenharmony_ci    // step 1
486f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
487f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
488f6603c60Sopenharmony_ci
489f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
490f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
491f6603c60Sopenharmony_ci
492f6603c60Sopenharmony_ci    // step 2
493f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
494f6603c60Sopenharmony_ci        OH_Drawing_CanvasAttachBrush(canvas, brush);
495f6603c60Sopenharmony_ci    }
496f6603c60Sopenharmony_ci
497f6603c60Sopenharmony_ci    // step 3
498f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
499f6603c60Sopenharmony_ci        OH_Drawing_CanvasDetachBrush(canvas);
500f6603c60Sopenharmony_ci    }
501f6603c60Sopenharmony_ci
502f6603c60Sopenharmony_ci    // step 4
503f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
504f6603c60Sopenharmony_ci        OH_Drawing_CanvasAttachBrush(canvas, brush);
505f6603c60Sopenharmony_ci        OH_Drawing_CanvasDetachBrush(canvas);
506f6603c60Sopenharmony_ci    }
507f6603c60Sopenharmony_ci
508f6603c60Sopenharmony_ci    // step 5
509f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
510f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
511f6603c60Sopenharmony_ci}
512f6603c60Sopenharmony_ci
513f6603c60Sopenharmony_ci/*
514f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0403
515f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachBrushOnly
516f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachPenOnly.
517f6603c60Sopenharmony_ci * @tc.size  : SmallTest
518f6603c60Sopenharmony_ci * @tc.type  : Function
519f6603c60Sopenharmony_ci * @tc.level : Level 3
520f6603c60Sopenharmony_ci */
521f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachBrushOnly, TestSize.Level3) {
522f6603c60Sopenharmony_ci    // step 1
523f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
524f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
525f6603c60Sopenharmony_ci
526f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
527f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
528f6603c60Sopenharmony_ci
529f6603c60Sopenharmony_ci    // step 2
530f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachBrush(canvas, brush);
531f6603c60Sopenharmony_ci
532f6603c60Sopenharmony_ci    // step 3
533f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
534f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
535f6603c60Sopenharmony_ci}
536f6603c60Sopenharmony_ci
537f6603c60Sopenharmony_ci/*
538f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0404
539f6603c60Sopenharmony_ci * @tc.name: testCanvasDetachBrushOnly
540f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDetachBrushOnly.
541f6603c60Sopenharmony_ci * @tc.size  : SmallTest
542f6603c60Sopenharmony_ci * @tc.type  : Function
543f6603c60Sopenharmony_ci * @tc.level : Level 3
544f6603c60Sopenharmony_ci */
545f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDetachBrushOnly, TestSize.Level3) {
546f6603c60Sopenharmony_ci    // step 1
547f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
548f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
549f6603c60Sopenharmony_ci
550f6603c60Sopenharmony_ci    // step 2
551f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachBrush(canvas);
552f6603c60Sopenharmony_ci
553f6603c60Sopenharmony_ci    // step 3
554f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
555f6603c60Sopenharmony_ci}
556f6603c60Sopenharmony_ci
557f6603c60Sopenharmony_ci/*
558f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0405
559f6603c60Sopenharmony_ci * @tc.name: testCanvasAttachBrushDetachBrushBoudary
560f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasAttachBrushDetachBrushBoudary.
561f6603c60Sopenharmony_ci * @tc.size  : SmallTest
562f6603c60Sopenharmony_ci * @tc.type  : Function
563f6603c60Sopenharmony_ci * @tc.level : Level 3
564f6603c60Sopenharmony_ci */
565f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasAttachBrushDetachBrushBoudary, TestSize.Level3) {
566f6603c60Sopenharmony_ci    // step 1
567f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
568f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
569f6603c60Sopenharmony_ci
570f6603c60Sopenharmony_ci    // step 2
571f6603c60Sopenharmony_ci    OH_Drawing_Bitmap *bitmap = OH_Drawing_BitmapCreate();
572f6603c60Sopenharmony_ci    OH_Drawing_BitmapFormat cFormat{COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
573f6603c60Sopenharmony_ci    constexpr uint32_t width = 4096;
574f6603c60Sopenharmony_ci    constexpr uint32_t height = 2160;
575f6603c60Sopenharmony_ci    OH_Drawing_BitmapBuild(bitmap, width, height, &cFormat);
576f6603c60Sopenharmony_ci    OH_Drawing_CanvasBind(canvas, bitmap);
577f6603c60Sopenharmony_ci
578f6603c60Sopenharmony_ci    // step 3
579f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
580f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
581f6603c60Sopenharmony_ci    OH_Drawing_CanvasAttachBrush(canvas, brush);
582f6603c60Sopenharmony_ci
583f6603c60Sopenharmony_ci    // step 4
584f6603c60Sopenharmony_ci    OH_Drawing_CanvasDetachBrush(canvas);
585f6603c60Sopenharmony_ci
586f6603c60Sopenharmony_ci    // step 5
587f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
588f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
589f6603c60Sopenharmony_ci    OH_Drawing_BitmapDestroy(bitmap);
590f6603c60Sopenharmony_ci}
591f6603c60Sopenharmony_ci
592f6603c60Sopenharmony_ci/*
593f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0500
594f6603c60Sopenharmony_ci * @tc.name: testCanvasSaveNormal
595f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSaveNormal
596f6603c60Sopenharmony_ci * @tc.size  : SmallTest
597f6603c60Sopenharmony_ci * @tc.type  : Function
598f6603c60Sopenharmony_ci * @tc.level : Level 0
599f6603c60Sopenharmony_ci */
600f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSaveNormal, TestSize.Level0) {
601f6603c60Sopenharmony_ci    // step 1
602f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
603f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
604f6603c60Sopenharmony_ci
605f6603c60Sopenharmony_ci    // step 2
606f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
607f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
608f6603c60Sopenharmony_ci
609f6603c60Sopenharmony_ci    // step 3
610f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas, 300, 300);
611f6603c60Sopenharmony_ci
612f6603c60Sopenharmony_ci    // step 4
613f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
614f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 3);
615f6603c60Sopenharmony_ci
616f6603c60Sopenharmony_ci    // step 5
617f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 200, 500, 300);
618f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawArc(canvas, rect, 10, 200);
619f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
620f6603c60Sopenharmony_ci
621f6603c60Sopenharmony_ci    // step 6
622f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
623f6603c60Sopenharmony_ci}
624f6603c60Sopenharmony_ci
625f6603c60Sopenharmony_ci/*
626f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0501
627f6603c60Sopenharmony_ci * @tc.name: testCanvasSavetestCanvasGetSaveCountNull
628f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSavetestCanvasGetSaveCountNull
629f6603c60Sopenharmony_ci * @tc.size  : SmallTest
630f6603c60Sopenharmony_ci * @tc.type  : Function
631f6603c60Sopenharmony_ci * @tc.level : Level 3
632f6603c60Sopenharmony_ci */
633f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSavetestCanvasGetSaveCountNull, TestSize.Level3) {
634f6603c60Sopenharmony_ci    // step 1
635f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(nullptr);
636f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(nullptr), 0);
637f6603c60Sopenharmony_ci}
638f6603c60Sopenharmony_ci
639f6603c60Sopenharmony_ci/*
640f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0502
641f6603c60Sopenharmony_ci * @tc.name: testCanvasSavetestCanvasGetSaveCountMultipleCalls
642f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSavetestCanvasGetSaveCountMultipleCalls
643f6603c60Sopenharmony_ci * @tc.size  : SmallTest
644f6603c60Sopenharmony_ci * @tc.type  : Function
645f6603c60Sopenharmony_ci * @tc.level : Level 3
646f6603c60Sopenharmony_ci */
647f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSavetestCanvasGetSaveCountMultipleCalls, TestSize.Level3) {
648f6603c60Sopenharmony_ci    // step 1
649f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
650f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
651f6603c60Sopenharmony_ci
652f6603c60Sopenharmony_ci    // step 2
653f6603c60Sopenharmony_ci    OH_Drawing_CanvasSkew(canvas, 10, 20);
654f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
655f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
656f6603c60Sopenharmony_ci
657f6603c60Sopenharmony_ci    // step 3
658f6603c60Sopenharmony_ci    OH_Drawing_CanvasScale(canvas, 0.5, 0.5);
659f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
660f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 3);
661f6603c60Sopenharmony_ci
662f6603c60Sopenharmony_ci    // step 4
663f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas, 10, 20);
664f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
665f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 4);
666f6603c60Sopenharmony_ci
667f6603c60Sopenharmony_ci    // step 5
668f6603c60Sopenharmony_ci    OH_Drawing_CanvasRotate(canvas, 10, 0, 0);
669f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
670f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 5);
671f6603c60Sopenharmony_ci
672f6603c60Sopenharmony_ci    // step 6
673f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
674f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas);
675f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 6 + i);
676f6603c60Sopenharmony_ci    }
677f6603c60Sopenharmony_ci
678f6603c60Sopenharmony_ci    // step 7
679f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 200, 500, 300);
680f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawArc(canvas, rect, 10, 200);
681f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
682f6603c60Sopenharmony_ci
683f6603c60Sopenharmony_ci    // step 8
684f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
685f6603c60Sopenharmony_ci}
686f6603c60Sopenharmony_ci
687f6603c60Sopenharmony_ci/*
688f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0503
689f6603c60Sopenharmony_ci * @tc.name: testCanvasSavetestCanvasGetSaveCountInputDestroyed
690f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSavetestCanvasGetSaveCountInputDestroyed
691f6603c60Sopenharmony_ci * @tc.size  : SmallTest
692f6603c60Sopenharmony_ci * @tc.type  : Function
693f6603c60Sopenharmony_ci * @tc.level : Level 3
694f6603c60Sopenharmony_ci */
695f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSavetestCanvasGetSaveCountInputDestroyed, TestSize.Level3) {
696f6603c60Sopenharmony_ci    // Deprecated
697f6603c60Sopenharmony_ci}
698f6603c60Sopenharmony_ci
699f6603c60Sopenharmony_ci/*
700f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0504
701f6603c60Sopenharmony_ci * @tc.name: testCanvasGetSaveCountWhenNoSave
702f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasGetSaveCountWhenNoSave
703f6603c60Sopenharmony_ci * @tc.size  : SmallTest
704f6603c60Sopenharmony_ci * @tc.type  : Function
705f6603c60Sopenharmony_ci * @tc.level : Level 3
706f6603c60Sopenharmony_ci */
707f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasGetSaveCountWhenNoSave, TestSize.Level3) {
708f6603c60Sopenharmony_ci    // step 1
709f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
710f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
711f6603c60Sopenharmony_ci
712f6603c60Sopenharmony_ci    // step 2
713f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
714f6603c60Sopenharmony_ci
715f6603c60Sopenharmony_ci    // step 3
716f6603c60Sopenharmony_ci    OH_Drawing_CanvasScale(canvas, 0.5, 0.5);
717f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas, 10, 20);
718f6603c60Sopenharmony_ci    OH_Drawing_CanvasRotate(canvas, 10, 0, 0);
719f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
720f6603c60Sopenharmony_ci
721f6603c60Sopenharmony_ci    // step 4
722f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
723f6603c60Sopenharmony_ci
724f6603c60Sopenharmony_ci    // step 5
725f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(100, 200, 500, 300);
726f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawArc(canvas, rect, 10, 200);
727f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
728f6603c60Sopenharmony_ci
729f6603c60Sopenharmony_ci    // step 6
730f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
731f6603c60Sopenharmony_ci}
732f6603c60Sopenharmony_ci
733f6603c60Sopenharmony_ci/*
734f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0600
735f6603c60Sopenharmony_ci * @tc.name: testCanvasSaveLayerNormal
736f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSaveLayerNormal.
737f6603c60Sopenharmony_ci * @tc.size  : SmallTest
738f6603c60Sopenharmony_ci * @tc.type  : Function
739f6603c60Sopenharmony_ci * @tc.level : Level 0
740f6603c60Sopenharmony_ci */
741f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSaveLayerNormal, TestSize.Level0) {
742f6603c60Sopenharmony_ci    // step 1
743f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
744f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
745f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
746f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
747f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
748f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
749f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect, brush);
750f6603c60Sopenharmony_ci
751f6603c60Sopenharmony_ci    // step 2
752f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
753f6603c60Sopenharmony_ci
754f6603c60Sopenharmony_ci    // step 3
755f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
756f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
757f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
758f6603c60Sopenharmony_ci}
759f6603c60Sopenharmony_ci
760f6603c60Sopenharmony_ci/*
761f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0601
762f6603c60Sopenharmony_ci * @tc.name: testCanvasSaveLayerNull
763f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSaveLayerNull.
764f6603c60Sopenharmony_ci * @tc.size  : SmallTest
765f6603c60Sopenharmony_ci * @tc.type  : Function
766f6603c60Sopenharmony_ci * @tc.level : Level 3
767f6603c60Sopenharmony_ci */
768f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSaveLayerNull, TestSize.Level3) {
769f6603c60Sopenharmony_ci    // step 1
770f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
771f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
772f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
773f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
774f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
775f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
776f6603c60Sopenharmony_ci
777f6603c60Sopenharmony_ci    // step 2
778f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(nullptr, rect, brush);
779f6603c60Sopenharmony_ci
780f6603c60Sopenharmony_ci    // step 3
781f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(0, 500, 300, 600);
782f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect2, brush);
783f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect2);
784f6603c60Sopenharmony_ci
785f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(200, 0, 300, 600);
786f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect3, brush);
787f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect3);
788f6603c60Sopenharmony_ci
789f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect4 = OH_Drawing_RectCreate(200, 500, 0, 600);
790f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect4, brush);
791f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect4);
792f6603c60Sopenharmony_ci
793f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect5 = OH_Drawing_RectCreate(200, 500, 300, 0);
794f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect5, brush);
795f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect5);
796f6603c60Sopenharmony_ci
797f6603c60Sopenharmony_ci    // step 4
798f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect6 = OH_Drawing_RectCreate(0, 0, 0, 0);
799f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect6, brush);
800f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect6);
801f6603c60Sopenharmony_ci
802f6603c60Sopenharmony_ci    // step 5
803f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect, nullptr);
804f6603c60Sopenharmony_ci
805f6603c60Sopenharmony_ci    // step 6
806f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
807f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
808f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
809f6603c60Sopenharmony_ci}
810f6603c60Sopenharmony_ci
811f6603c60Sopenharmony_ci/*
812f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0602
813f6603c60Sopenharmony_ci * @tc.name: testCanvasSaveLayerAbnormal
814f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSaveLayerAbnormal.
815f6603c60Sopenharmony_ci * @tc.size  : SmallTest
816f6603c60Sopenharmony_ci * @tc.type  : Function
817f6603c60Sopenharmony_ci * @tc.level : Level 3
818f6603c60Sopenharmony_ci */
819f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSaveLayerAbnormal, TestSize.Level3) {
820f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate, OH_Drawing_BrushCreate
821f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
822f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
823f6603c60Sopenharmony_ci
824f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
825f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
826f6603c60Sopenharmony_ci
827f6603c60Sopenharmony_ci    // 2. When creating OH_Drawing_Rect in OH_Drawing_CanvasSaveLayer, negative numbers are passed for left, top, right,
828f6603c60Sopenharmony_ci    // and bottom.
829f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect1 = OH_Drawing_RectCreate(-200, 500, 300, 600);
830f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect1, brush);
831f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect1);
832f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect2 = OH_Drawing_RectCreate(200, -500, 300, 600);
833f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect2, brush);
834f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect2);
835f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect3 = OH_Drawing_RectCreate(200, 500, -300, 600);
836f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect3, brush);
837f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect3);
838f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect4 = OH_Drawing_RectCreate(200, 500, 300, -600);
839f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect4, brush);
840f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect4);
841f6603c60Sopenharmony_ci
842f6603c60Sopenharmony_ci    // 3. When creating OH_Drawing_Rect in OH_Drawing_CanvasSaveLayer, the horizontal coordinate of the top-left corner
843f6603c60Sopenharmony_ci    // of the rectangle is equal to the horizontal coordinate of the bottom-right corner, or the vertical coordinate of
844f6603c60Sopenharmony_ci    // the top-left corner of the rectangle is equal to the vertical coordinate of the bottom-right corner.
845f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect5 = OH_Drawing_RectCreate(200, 500, 200, 600);
846f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect5, brush);
847f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect5);
848f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect6 = OH_Drawing_RectCreate(200, 500, 300, 500);
849f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect6, brush);
850f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect6);
851f6603c60Sopenharmony_ci
852f6603c60Sopenharmony_ci    // 4. When creating OH_Drawing_Rect in OH_Drawing_CanvasSaveLayer, the coordinates of the top-left corner are equal
853f6603c60Sopenharmony_ci    // to the coordinates of the bottom-right corner.
854f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect7 = OH_Drawing_RectCreate(200, 500, 200, 500);
855f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect7, brush);
856f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect7);
857f6603c60Sopenharmony_ci
858f6603c60Sopenharmony_ci    // 5. When creating OH_Drawing_Rect in OH_Drawing_CanvasSaveLayer, the coordinates of the top-left corner are
859f6603c60Sopenharmony_ci    // greater than the coordinates of the bottom-right corner.
860f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect8 = OH_Drawing_RectCreate(300, 600, 200, 500);
861f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect8, brush);
862f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect8);
863f6603c60Sopenharmony_ci
864f6603c60Sopenharmony_ci    // 6. Release memory.
865f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
866f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
867f6603c60Sopenharmony_ci}
868f6603c60Sopenharmony_ci
869f6603c60Sopenharmony_ci/*
870f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0603
871f6603c60Sopenharmony_ci * @tc.name: testCanvasSaveLayerRestore
872f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSaveLayerRestore.
873f6603c60Sopenharmony_ci * @tc.size  : SmallTest
874f6603c60Sopenharmony_ci * @tc.type  : Function
875f6603c60Sopenharmony_ci * @tc.level : Level 2
876f6603c60Sopenharmony_ci */
877f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSaveLayerRestore, TestSize.Level2) {
878f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate, OH_Drawing_RectCreate, OH_Drawing_BrushCreate
879f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
880f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
881f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
882f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
883f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
884f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
885f6603c60Sopenharmony_ci
886f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasSaveLayer and call OH_Drawing_CanvasGetSaveCount to retrieve the number of saved states
887f6603c60Sopenharmony_ci    // for the canvas.
888f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
889f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
890f6603c60Sopenharmony_ci
891f6603c60Sopenharmony_ci    // 3. Use the restore interface OH_Drawing_CanvasRestore to discard any changes made to the matrix and clip region
892f6603c60Sopenharmony_ci    // and draw the bitmap.
893f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas);
894f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
895f6603c60Sopenharmony_ci
896f6603c60Sopenharmony_ci    // 4. Release memory.
897f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
898f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
899f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
900f6603c60Sopenharmony_ci}
901f6603c60Sopenharmony_ci
902f6603c60Sopenharmony_ci/*
903f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0604
904f6603c60Sopenharmony_ci * @tc.name: testCanvasSaveLayerMultipleCalls
905f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasSaveLayerMultipleCalls.
906f6603c60Sopenharmony_ci * @tc.size  : SmallTest
907f6603c60Sopenharmony_ci * @tc.type  : Function
908f6603c60Sopenharmony_ci * @tc.level : Level 3
909f6603c60Sopenharmony_ci */
910f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasSaveLayerMultipleCalls, TestSize.Level3) {
911f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate, OH_Drawing_BrushCreate
912f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
913f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
914f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
915f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
916f6603c60Sopenharmony_ci
917f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasSaveLayer in a loop 10 times, configure different sizes of rects. After each call to the
918f6603c60Sopenharmony_ci    // interface, use OH_Drawing_CanvasGetSaveCount to retrieve the number of saved states for the canvas.
919f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
920f6603c60Sopenharmony_ci        OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300 + i, 600 + i);
921f6603c60Sopenharmony_ci        OH_Drawing_CanvasSaveLayer(canvas, rect, brush);
922f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), i + 2);
923f6603c60Sopenharmony_ci        OH_Drawing_RectDestroy(rect);
924f6603c60Sopenharmony_ci    }
925f6603c60Sopenharmony_ci
926f6603c60Sopenharmony_ci    // 3. Release memory.
927f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
928f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
929f6603c60Sopenharmony_ci}
930f6603c60Sopenharmony_ci
931f6603c60Sopenharmony_ci/*
932f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0700
933f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreNormal
934f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreNormal.
935f6603c60Sopenharmony_ci * @tc.size  : SmallTest
936f6603c60Sopenharmony_ci * @tc.type  : Function
937f6603c60Sopenharmony_ci * @tc.level : Level 0
938f6603c60Sopenharmony_ci */
939f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreNormal, TestSize.Level0) {
940f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
941f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
942f6603c60Sopenharmony_ci
943f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasSave and call OH_Drawing_CanvasGetSaveCount to retrieve the number of saved states for
944f6603c60Sopenharmony_ci    // the canvas.
945f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
946f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
947f6603c60Sopenharmony_ci
948f6603c60Sopenharmony_ci    // 3. Use OH_Drawing_CanvasRestore and call OH_Drawing_CanvasGetSaveCount to retrieve the number of saved states for
949f6603c60Sopenharmony_ci    // the canvas.
950f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas);
951f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
952f6603c60Sopenharmony_ci
953f6603c60Sopenharmony_ci    // 4. Release memory.
954f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
955f6603c60Sopenharmony_ci}
956f6603c60Sopenharmony_ci
957f6603c60Sopenharmony_ci/*
958f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0701
959f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreNull
960f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreNull.
961f6603c60Sopenharmony_ci * @tc.size  : SmallTest
962f6603c60Sopenharmony_ci * @tc.type  : Function
963f6603c60Sopenharmony_ci * @tc.level : Level 3
964f6603c60Sopenharmony_ci */
965f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreNull, TestSize.Level3) {
966f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
967f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
968f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
969f6603c60Sopenharmony_ci
970f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasSave and call OH_Drawing_CanvasGetSaveCount to retrieve the number of saved states for
971f6603c60Sopenharmony_ci    // the canvas.
972f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
973f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
974f6603c60Sopenharmony_ci
975f6603c60Sopenharmony_ci    // 3. Use OH_Drawing_CanvasRestore with no arguments, and then call OH_Drawing_CanvasGetSaveCount to retrieve the
976f6603c60Sopenharmony_ci    // number of saved states for the canvas.
977f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(nullptr);
978f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 2);
979f6603c60Sopenharmony_ci
980f6603c60Sopenharmony_ci    // 4. Release memory.
981f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
982f6603c60Sopenharmony_ci}
983f6603c60Sopenharmony_ci
984f6603c60Sopenharmony_ci/*
985f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0702
986f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreMultipleCalls
987f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreMultipleCalls.
988f6603c60Sopenharmony_ci * @tc.size  : SmallTest
989f6603c60Sopenharmony_ci * @tc.type  : Function
990f6603c60Sopenharmony_ci * @tc.level : Level 3
991f6603c60Sopenharmony_ci */
992f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreMultipleCalls, TestSize.Level3) {
993f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
994f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
995f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
996f6603c60Sopenharmony_ci
997f6603c60Sopenharmony_ci    // 2. Call OH_Drawing_CanvasSave 10 times and then call OH_Drawing_CanvasGetSaveCount to retrieve the number of
998f6603c60Sopenharmony_ci    // saved states for the canvas.
999f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1000f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas);
1001f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), i + 2);
1002f6603c60Sopenharmony_ci    }
1003f6603c60Sopenharmony_ci
1004f6603c60Sopenharmony_ci    // 3. Call OH_Drawing_CanvasRestore 11 times and then call OH_Drawing_CanvasGetSaveCount to retrieve the number of
1005f6603c60Sopenharmony_ci    // saved states for the canvas.
1006f6603c60Sopenharmony_ci    for (int i = 0; i < 11; i++) {
1007f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas);
1008f6603c60Sopenharmony_ci        if (10 - i <= 0) {
1009f6603c60Sopenharmony_ci            EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1010f6603c60Sopenharmony_ci        } else {
1011f6603c60Sopenharmony_ci            EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 10 - i);
1012f6603c60Sopenharmony_ci        }
1013f6603c60Sopenharmony_ci    }
1014f6603c60Sopenharmony_ci
1015f6603c60Sopenharmony_ci    // 4. Call OH_Drawing_CanvasSave, then call OH_Drawing_CanvasRestore, and finally call OH_Drawing_CanvasGetSaveCount
1016f6603c60Sopenharmony_ci    // to retrieve the number of saved states for the canvas.
1017f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
1018f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas);
1019f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1020f6603c60Sopenharmony_ci
1021f6603c60Sopenharmony_ci    // 5. Repeat step 4 for 10 times
1022f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1023f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas);
1024f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas);
1025f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1026f6603c60Sopenharmony_ci    }
1027f6603c60Sopenharmony_ci
1028f6603c60Sopenharmony_ci    // 6. Release memory.
1029f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1030f6603c60Sopenharmony_ci}
1031f6603c60Sopenharmony_ci
1032f6603c60Sopenharmony_ci/*
1033f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0703
1034f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreBeforeSave
1035f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreBeforeSave.
1036f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1037f6603c60Sopenharmony_ci * @tc.type  : Function
1038f6603c60Sopenharmony_ci * @tc.level : Level 3
1039f6603c60Sopenharmony_ci */
1040f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreBeforeSave, TestSize.Level3) {
1041f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1042f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1043f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1044f6603c60Sopenharmony_ci
1045f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasRestore and call OH_Drawing_CanvasGetSaveCount to retrieve the number of saved states for
1046f6603c60Sopenharmony_ci    // the canvas.
1047f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas);
1048f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1049f6603c60Sopenharmony_ci
1050f6603c60Sopenharmony_ci    // 3. Call OH_Drawing_CanvasRestore multiple times and then call OH_Drawing_CanvasGetSaveCount to retrieve the
1051f6603c60Sopenharmony_ci    // number of saved states for the canvas.
1052f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1053f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas);
1054f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1055f6603c60Sopenharmony_ci    }
1056f6603c60Sopenharmony_ci
1057f6603c60Sopenharmony_ci    // 4. Release memory.
1058f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1059f6603c60Sopenharmony_ci}
1060f6603c60Sopenharmony_ci
1061f6603c60Sopenharmony_ci/*
1062f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0704
1063f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreInputDestroyed
1064f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreInputDestroyed.
1065f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1066f6603c60Sopenharmony_ci * @tc.type  : Function
1067f6603c60Sopenharmony_ci * @tc.level : Level 3
1068f6603c60Sopenharmony_ci */
1069f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreInputDestroyed, TestSize.Level3) {
1070f6603c60Sopenharmony_ci    // Deprecated
1071f6603c60Sopenharmony_ci}
1072f6603c60Sopenharmony_ci
1073f6603c60Sopenharmony_ci/*
1074f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0705
1075f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreExceededSaveSavelayerTimes
1076f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreExceededSaveSavelayerTimes.
1077f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1078f6603c60Sopenharmony_ci * @tc.type  : Function
1079f6603c60Sopenharmony_ci * @tc.level : Level 3
1080f6603c60Sopenharmony_ci */
1081f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreExceededSaveSavelayerTimes, TestSize.Level3) {
1082f6603c60Sopenharmony_ci    // 1、OH_Drawing_CanvasCreate
1083f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1084f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1085f6603c60Sopenharmony_ci    OH_Drawing_Rect *rect = OH_Drawing_RectCreate(200, 500, 300, 600);
1086f6603c60Sopenharmony_ci    EXPECT_NE(rect, nullptr);
1087f6603c60Sopenharmony_ci    OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
1088f6603c60Sopenharmony_ci    EXPECT_NE(brush, nullptr);
1089f6603c60Sopenharmony_ci
1090f6603c60Sopenharmony_ci    // 2、Call OH_Drawing_CanvasSave 10 times and then call OH_Drawing_CanvasGetSaveCount to retrieve the number of
1091f6603c60Sopenharmony_ci    // saved states corresponding to the canvas status.
1092f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1093f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas);
1094f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), i + 2);
1095f6603c60Sopenharmony_ci    }
1096f6603c60Sopenharmony_ci
1097f6603c60Sopenharmony_ci    // 3、Use OH_Drawing_CanvasTranslate, OH_Drawing_CanvasScale, and OH_Drawing_CanvasSkew to modify the canvas status.
1098f6603c60Sopenharmony_ci    OH_Drawing_CanvasTranslate(canvas, 10, 10);
1099f6603c60Sopenharmony_ci    OH_Drawing_CanvasScale(canvas, 10, 10);
1100f6603c60Sopenharmony_ci    OH_Drawing_CanvasSkew(canvas, 10, 10);
1101f6603c60Sopenharmony_ci
1102f6603c60Sopenharmony_ci    // 4、Call OH_Drawing_CanvasSaveLayer 10 times and then call OH_Drawing_CanvasGetSaveCount to retrieve the number of
1103f6603c60Sopenharmony_ci    // saved states corresponding to the canvas status.
1104f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1105f6603c60Sopenharmony_ci        OH_Drawing_CanvasSaveLayer(canvas, rect, brush);
1106f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 12 + i);
1107f6603c60Sopenharmony_ci    }
1108f6603c60Sopenharmony_ci
1109f6603c60Sopenharmony_ci    // 5、Call OH_Drawing_CanvasRestore more than 20 times and then call OH_Drawing_CanvasGetSaveCount to retrieve the
1110f6603c60Sopenharmony_ci    // number of saved states corresponding to the canvas status.
1111f6603c60Sopenharmony_ci    for (int i = 0; i < 20; i++) {
1112f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas);
1113f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 20 - i);
1114f6603c60Sopenharmony_ci    }
1115f6603c60Sopenharmony_ci
1116f6603c60Sopenharmony_ci    // 6、Call OH_Drawing_CanvasSave -> OH_Drawing_CanvasSaveLayer -> Call OH_Drawing_CanvasRestore 3 times, and then
1117f6603c60Sopenharmony_ci    // call OH_Drawing_CanvasGetSaveCount to retrieve the number of saved states corresponding to the canvas status.
1118f6603c60Sopenharmony_ci    OH_Drawing_CanvasSave(canvas);
1119f6603c60Sopenharmony_ci    OH_Drawing_CanvasSaveLayer(canvas, rect, brush);
1120f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas);
1121f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas);
1122f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestore(canvas);
1123f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1124f6603c60Sopenharmony_ci
1125f6603c60Sopenharmony_ci    // 7、Repeat step 6 ten times
1126f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1127f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas);
1128f6603c60Sopenharmony_ci        OH_Drawing_CanvasSaveLayer(canvas, rect, brush);
1129f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas);
1130f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas);
1131f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestore(canvas);
1132f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1133f6603c60Sopenharmony_ci    }
1134f6603c60Sopenharmony_ci
1135f6603c60Sopenharmony_ci    // 8、Release memory.
1136f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1137f6603c60Sopenharmony_ci    OH_Drawing_RectDestroy(rect);
1138f6603c60Sopenharmony_ci    OH_Drawing_BrushDestroy(brush);
1139f6603c60Sopenharmony_ci}
1140f6603c60Sopenharmony_ci
1141f6603c60Sopenharmony_ci/*
1142f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0800
1143f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreToCountNormal
1144f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreToCountNormal.
1145f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1146f6603c60Sopenharmony_ci * @tc.type  : Function
1147f6603c60Sopenharmony_ci * @tc.level : Level 0
1148f6603c60Sopenharmony_ci */
1149f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreToCountNormal, TestSize.Level0) {
1150f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1151f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1152f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1153f6603c60Sopenharmony_ci
1154f6603c60Sopenharmony_ci    // 2. Call OH_Drawing_CanvasSave multiple times and then use OH_Drawing_CanvasGetSaveCount to retrieve the number of
1155f6603c60Sopenharmony_ci    // saved states corresponding to the canvas status.
1156f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1157f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas);
1158f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), i + 2);
1159f6603c60Sopenharmony_ci    }
1160f6603c60Sopenharmony_ci
1161f6603c60Sopenharmony_ci    // 3. Iterate through the parameter saveCount from 1 to the maximum number of canvas states, and use
1162f6603c60Sopenharmony_ci    // OH_Drawing_CanvasRestoreToCount to restore the canvas to each state. Use OH_Drawing_CanvasGetSaveCount to
1163f6603c60Sopenharmony_ci    // retrieve the number of saved states corresponding to the canvas status.
1164f6603c60Sopenharmony_ci    for (int i = 1; i <= 10; i++) {
1165f6603c60Sopenharmony_ci        OH_Drawing_CanvasRestoreToCount(canvas, i);
1166f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1167f6603c60Sopenharmony_ci    }
1168f6603c60Sopenharmony_ci
1169f6603c60Sopenharmony_ci    // 4. Free the memory.
1170f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1171f6603c60Sopenharmony_ci}
1172f6603c60Sopenharmony_ci
1173f6603c60Sopenharmony_ci/*
1174f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0801
1175f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreToCountNull
1176f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreToCountNull.
1177f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1178f6603c60Sopenharmony_ci * @tc.type  : Function
1179f6603c60Sopenharmony_ci * @tc.level : Level 3
1180f6603c60Sopenharmony_ci */
1181f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreToCountNull, TestSize.Level3) {
1182f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1183f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1184f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1185f6603c60Sopenharmony_ci
1186f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasRestoreToCount with the first parameter empty to retrieve the number of saved states
1187f6603c60Sopenharmony_ci    // corresponding to the canvas status using OH_Drawing_CanvasGetSaveCount.
1188f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(nullptr, 1);
1189f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1190f6603c60Sopenharmony_ci
1191f6603c60Sopenharmony_ci    // 3. Use OH_Drawing_CanvasRestoreToCount with the second parameter as 0 to retrieve the number of saved states
1192f6603c60Sopenharmony_ci    // corresponding to the canvas status using OH_Drawing_CanvasGetSaveCount.
1193f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(canvas, 0);
1194f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1195f6603c60Sopenharmony_ci
1196f6603c60Sopenharmony_ci    // 4. Free the memory.
1197f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1198f6603c60Sopenharmony_ci}
1199f6603c60Sopenharmony_ci
1200f6603c60Sopenharmony_ci/*
1201f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0802
1202f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreToCountAbnormal
1203f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreToCountAbnormal.
1204f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1205f6603c60Sopenharmony_ci * @tc.type  : Function
1206f6603c60Sopenharmony_ci * @tc.level : Level 3
1207f6603c60Sopenharmony_ci */
1208f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreToCountAbnormal, TestSize.Level3) {
1209f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1210f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1211f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1212f6603c60Sopenharmony_ci
1213f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasRestoreToCount with a negative value for the saveCount parameter to retrieve the number
1214f6603c60Sopenharmony_ci    // of saved states corresponding to the canvas status using OH_Drawing_CanvasGetSaveCount.
1215f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(canvas, -1);
1216f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1217f6603c60Sopenharmony_ci
1218f6603c60Sopenharmony_ci    // 3. Use OH_Drawing_CanvasRestoreToCount with a floating-point value for the saveCount parameter to retrieve the
1219f6603c60Sopenharmony_ci    // number of saved states corresponding to the canvas status using OH_Drawing_CanvasGetSaveCount.
1220f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(canvas, 1.0);
1221f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1222f6603c60Sopenharmony_ci
1223f6603c60Sopenharmony_ci    // 4. Free the memory.
1224f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1225f6603c60Sopenharmony_ci}
1226f6603c60Sopenharmony_ci
1227f6603c60Sopenharmony_ci/*
1228f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0803
1229f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreToCountMaximum
1230f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreToCountMaximum.
1231f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1232f6603c60Sopenharmony_ci * @tc.type  : Function
1233f6603c60Sopenharmony_ci * @tc.level : Level 3
1234f6603c60Sopenharmony_ci */
1235f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreToCountMaximum, TestSize.Level3) {
1236f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1237f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1238f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1239f6603c60Sopenharmony_ci
1240f6603c60Sopenharmony_ci    // 2. Use OH_Drawing_CanvasRestoreToCount with a very large value for the saveCount parameter to retrieve the number
1241f6603c60Sopenharmony_ci    // of saved states corresponding to the canvas status using OH_Drawing_CanvasGetSaveCount.
1242f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(canvas, INT32_MAX);
1243f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 1);
1244f6603c60Sopenharmony_ci
1245f6603c60Sopenharmony_ci    // 3. Free the memory.
1246f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1247f6603c60Sopenharmony_ci}
1248f6603c60Sopenharmony_ci
1249f6603c60Sopenharmony_ci/*
1250f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0804
1251f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreToCountExceeded
1252f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreToCountExceeded.
1253f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1254f6603c60Sopenharmony_ci * @tc.type  : Function
1255f6603c60Sopenharmony_ci * @tc.level : Level 3
1256f6603c60Sopenharmony_ci */
1257f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreToCountExceeded, TestSize.Level3) {
1258f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1259f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1260f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1261f6603c60Sopenharmony_ci
1262f6603c60Sopenharmony_ci    // 2. Call OH_Drawing_CanvasSave multiple times and use OH_Drawing_CanvasGetSaveCount to retrieve the number of
1263f6603c60Sopenharmony_ci    // saved states corresponding to the canvas status.
1264f6603c60Sopenharmony_ci    for (int i = 0; i < 10; i++) {
1265f6603c60Sopenharmony_ci        OH_Drawing_CanvasSave(canvas);
1266f6603c60Sopenharmony_ci        EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), i + 2);
1267f6603c60Sopenharmony_ci    }
1268f6603c60Sopenharmony_ci
1269f6603c60Sopenharmony_ci    // 3. Use OH_Drawing_CanvasRestoreToCount with a saveCount parameter greater than the maximum number of current
1270f6603c60Sopenharmony_ci    // canvas states to retrieve the number of saved states corresponding to the canvas status using
1271f6603c60Sopenharmony_ci    // OH_Drawing_CanvasGetSaveCount.
1272f6603c60Sopenharmony_ci    OH_Drawing_CanvasRestoreToCount(canvas, INT32_MAX);
1273f6603c60Sopenharmony_ci    EXPECT_EQ(OH_Drawing_CanvasGetSaveCount(canvas), 11);
1274f6603c60Sopenharmony_ci
1275f6603c60Sopenharmony_ci    // 4. Free the memory.
1276f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1277f6603c60Sopenharmony_ci}
1278f6603c60Sopenharmony_ci
1279f6603c60Sopenharmony_ci/*
1280f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0805
1281f6603c60Sopenharmony_ci * @tc.name: testCanvasRestoreToCountInputDestroyed
1282f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasRestoreToCountInputDestroyed.
1283f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1284f6603c60Sopenharmony_ci * @tc.type  : Function
1285f6603c60Sopenharmony_ci * @tc.level : Level 3
1286f6603c60Sopenharmony_ci */
1287f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasRestoreToCountInputDestroyed, TestSize.Level3) {
1288f6603c60Sopenharmony_ci    // Deprecated
1289f6603c60Sopenharmony_ci}
1290f6603c60Sopenharmony_ci
1291f6603c60Sopenharmony_ci/*
1292f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0900
1293f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawLineNormal
1294f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawLineNormal.
1295f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1296f6603c60Sopenharmony_ci * @tc.type  : Function
1297f6603c60Sopenharmony_ci * @tc.level : Level 0
1298f6603c60Sopenharmony_ci */
1299f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawLineNormal, TestSize.Level0) {
1300f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1301f6603c60Sopenharmony_ci    // 2. OH_Drawing_CanvasDrawLine, passing floating-point coordinates
1302f6603c60Sopenharmony_ci    // 3. OH_Drawing_CanvasDrawLine, passing integer coordinates
1303f6603c60Sopenharmony_ci    // 4. Free memory
1304f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1305f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0.0f, 0.0f, 20.0f, 20.0f);
1306f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 0, 20, 20);
1307f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1308f6603c60Sopenharmony_ci}
1309f6603c60Sopenharmony_ci
1310f6603c60Sopenharmony_ci/*
1311f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0901
1312f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawLineNull
1313f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawLineNull.
1314f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1315f6603c60Sopenharmony_ci * @tc.type  : Function
1316f6603c60Sopenharmony_ci * @tc.level : Level 3
1317f6603c60Sopenharmony_ci */
1318f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawLineNull, TestSize.Level3) {
1319f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1320f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1321f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1322f6603c60Sopenharmony_ci
1323f6603c60Sopenharmony_ci    // 2. Pass an empty value for the first parameter of OH_Drawing_CanvasDrawLine.
1324f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(nullptr, 0, 0, 20, 20);
1325f6603c60Sopenharmony_ci
1326f6603c60Sopenharmony_ci    // 3. Pass NULL for the second parameter of OH_Drawing_CanvasDrawLine.
1327f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 10, 20, 20);
1328f6603c60Sopenharmony_ci
1329f6603c60Sopenharmony_ci    // 4. Pass NULL for the third parameter of OH_Drawing_CanvasDrawLine.
1330f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 10, 0, 20, 20);
1331f6603c60Sopenharmony_ci
1332f6603c60Sopenharmony_ci    // 5. Pass NULL for the fourth parameter of OH_Drawing_CanvasDrawLine.
1333f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 10, 10, 0, 20);
1334f6603c60Sopenharmony_ci
1335f6603c60Sopenharmony_ci    // 6. Pass NULL for the fifth parameter of OH_Drawing_CanvasDrawLine.
1336f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 10, 10, 20, 0);
1337f6603c60Sopenharmony_ci
1338f6603c60Sopenharmony_ci    // 7. Free the memory.
1339f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1340f6603c60Sopenharmony_ci}
1341f6603c60Sopenharmony_ci
1342f6603c60Sopenharmony_ci/*
1343f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0902
1344f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawLineAbnormal
1345f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawLineAbnormal.
1346f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1347f6603c60Sopenharmony_ci * @tc.type  : Function
1348f6603c60Sopenharmony_ci * @tc.level : Level 3
1349f6603c60Sopenharmony_ci */
1350f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawLineAbnormal, TestSize.Level3) {
1351f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1352f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1353f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1354f6603c60Sopenharmony_ci
1355f6603c60Sopenharmony_ci    // 2. Pass a negative value for the second parameter of OH_Drawing_CanvasDrawLine.
1356f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, -1, 0, 20, 20);
1357f6603c60Sopenharmony_ci
1358f6603c60Sopenharmony_ci    // 3. Pass a negative value for the third parameter of OH_Drawing_CanvasDrawLine.
1359f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, -1, 20, 20);
1360f6603c60Sopenharmony_ci
1361f6603c60Sopenharmony_ci    // 4. Pass a negative value for the fourth parameter of OH_Drawing_CanvasDrawLine.
1362f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 0, -20, 20);
1363f6603c60Sopenharmony_ci
1364f6603c60Sopenharmony_ci    // 5. Pass a negative value for the fifth parameter of OH_Drawing_CanvasDrawLine.
1365f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 0, 20, -20);
1366f6603c60Sopenharmony_ci
1367f6603c60Sopenharmony_ci    // 6. The Y-coordinate (Y1) of the starting point of the line segment in OH_Drawing_CanvasDrawLine is equal to the
1368f6603c60Sopenharmony_ci    // X-coordinate (X2) of the end point, but the Y-coordinate is different.
1369f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 0, 20, 21);
1370f6603c60Sopenharmony_ci
1371f6603c60Sopenharmony_ci    // 7. The X-coordinate (X1) of the starting point of the line segment in OH_Drawing_CanvasDrawLine is equal to the
1372f6603c60Sopenharmony_ci    // Y-coordinate (Y2) of the starting point, but the X-coordinate is different.
1373f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 20, 21, 20);
1374f6603c60Sopenharmony_ci
1375f6603c60Sopenharmony_ci    // 8. The coordinates of the starting point of the line segment in OH_Drawing_CanvasDrawLine are equal to the
1376f6603c60Sopenharmony_ci    // coordinates of the end point.
1377f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 10, 10, 10, 10);
1378f6603c60Sopenharmony_ci
1379f6603c60Sopenharmony_ci    // 9. The coordinates of the starting point of the line segment in OH_Drawing_CanvasDrawLine are greater than the
1380f6603c60Sopenharmony_ci    // coordinates of the end point.
1381f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 100, 100, 20, 20);
1382f6603c60Sopenharmony_ci
1383f6603c60Sopenharmony_ci    // 10. Free the memory.
1384f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1385f6603c60Sopenharmony_ci}
1386f6603c60Sopenharmony_ci
1387f6603c60Sopenharmony_ci/*
1388f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0903
1389f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawLineMaximum
1390f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawLineMaximum.
1391f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1392f6603c60Sopenharmony_ci * @tc.type  : Function
1393f6603c60Sopenharmony_ci * @tc.level : Level 3
1394f6603c60Sopenharmony_ci */
1395f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawLineMaximum, TestSize.Level3) {
1396f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1397f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1398f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1399f6603c60Sopenharmony_ci
1400f6603c60Sopenharmony_ci    // 2. Pass a maximum value for the second parameter of OH_Drawing_CanvasDrawLine.
1401f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, FLT_MAX, 0, 20, 20);
1402f6603c60Sopenharmony_ci
1403f6603c60Sopenharmony_ci    // 3. Pass a maximum value for the third parameter of OH_Drawing_CanvasDrawLine.
1404f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, FLT_MAX, 20, 20);
1405f6603c60Sopenharmony_ci
1406f6603c60Sopenharmony_ci    // 4. Pass a maximum value for the fourth parameter of OH_Drawing_CanvasDrawLine.
1407f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 0, FLT_MAX, 20);
1408f6603c60Sopenharmony_ci
1409f6603c60Sopenharmony_ci    // 5. Pass a maximum value for the fifth parameter of OH_Drawing_CanvasDrawLine.
1410f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawLine(canvas, 0, 0, 20, FLT_MAX);
1411f6603c60Sopenharmony_ci
1412f6603c60Sopenharmony_ci    // 6. Free the memory.
1413f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1414f6603c60Sopenharmony_ci}
1415f6603c60Sopenharmony_ci
1416f6603c60Sopenharmony_ci/*
1417f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_0904
1418f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawLineInputDestroyed
1419f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawLineInputDestroyed.
1420f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1421f6603c60Sopenharmony_ci * @tc.type  : Function
1422f6603c60Sopenharmony_ci * @tc.level : Level 3
1423f6603c60Sopenharmony_ci */
1424f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawLineInputDestroyed, TestSize.Level3) {
1425f6603c60Sopenharmony_ci    // Deprecated
1426f6603c60Sopenharmony_ci}
1427f6603c60Sopenharmony_ci
1428f6603c60Sopenharmony_ci/*
1429f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1000
1430f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawPathNormal
1431f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawPathNormal.
1432f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1433f6603c60Sopenharmony_ci * @tc.type  : Function
1434f6603c60Sopenharmony_ci * @tc.level : Level 0
1435f6603c60Sopenharmony_ci */
1436f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawPathNormal, TestSize.Level0) {
1437f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1438f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1439f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1440f6603c60Sopenharmony_ci
1441f6603c60Sopenharmony_ci    // 2. OH_Drawing_PathCreate
1442f6603c60Sopenharmony_ci    OH_Drawing_Path *path = OH_Drawing_PathCreate();
1443f6603c60Sopenharmony_ci    EXPECT_NE(path, nullptr);
1444f6603c60Sopenharmony_ci
1445f6603c60Sopenharmony_ci    // 3. OH_Drawing_PathMoveTo
1446f6603c60Sopenharmony_ci    OH_Drawing_PathMoveTo(path, 50.0f, 50.0f);
1447f6603c60Sopenharmony_ci
1448f6603c60Sopenharmony_ci    // 4. OH_Drawing_PathLineTo
1449f6603c60Sopenharmony_ci    OH_Drawing_PathLineTo(path, 100.0f, 50.0f);
1450f6603c60Sopenharmony_ci
1451f6603c60Sopenharmony_ci    // 5. OH_Drawing_CanvasDrawPath
1452f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPath(canvas, path);
1453f6603c60Sopenharmony_ci
1454f6603c60Sopenharmony_ci    // 6. Free the memory.
1455f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1456f6603c60Sopenharmony_ci    OH_Drawing_PathDestroy(path);
1457f6603c60Sopenharmony_ci}
1458f6603c60Sopenharmony_ci
1459f6603c60Sopenharmony_ci/*
1460f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1001
1461f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawPathNull
1462f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawPathNull.
1463f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1464f6603c60Sopenharmony_ci * @tc.type  : Function
1465f6603c60Sopenharmony_ci * @tc.level : Level 3
1466f6603c60Sopenharmony_ci */
1467f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawPathNull, TestSize.Level3) {
1468f6603c60Sopenharmony_ci    // 1. OH_Drawing_CanvasCreate
1469f6603c60Sopenharmony_ci    OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
1470f6603c60Sopenharmony_ci    EXPECT_NE(canvas, nullptr);
1471f6603c60Sopenharmony_ci
1472f6603c60Sopenharmony_ci    // 2. OH_Drawing_PathCreate
1473f6603c60Sopenharmony_ci    OH_Drawing_Path *path = OH_Drawing_PathCreate();
1474f6603c60Sopenharmony_ci    EXPECT_NE(path, nullptr);
1475f6603c60Sopenharmony_ci
1476f6603c60Sopenharmony_ci    // 3. Pass null as the first argument for OH_Drawing_CanvasDrawPath.
1477f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPath(nullptr, path);
1478f6603c60Sopenharmony_ci
1479f6603c60Sopenharmony_ci    // 4. Pass null as the second argument for OH_Drawing_CanvasDrawPath.
1480f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPath(canvas, nullptr);
1481f6603c60Sopenharmony_ci
1482f6603c60Sopenharmony_ci    // 5. Pass null path as the second argument for OH_Drawing_CanvasDrawPath.
1483f6603c60Sopenharmony_ci    OH_Drawing_CanvasDrawPath(canvas, path);
1484f6603c60Sopenharmony_ci
1485f6603c60Sopenharmony_ci    // 6. Free the memory.
1486f6603c60Sopenharmony_ci    OH_Drawing_CanvasDestroy(canvas);
1487f6603c60Sopenharmony_ci    OH_Drawing_PathDestroy(path);
1488f6603c60Sopenharmony_ci}
1489f6603c60Sopenharmony_ci
1490f6603c60Sopenharmony_ci/*
1491f6603c60Sopenharmony_ci * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_CANVAS_1002
1492f6603c60Sopenharmony_ci * @tc.name: testCanvasDrawPathInputDestroyed
1493f6603c60Sopenharmony_ci * @tc.desc: test for testCanvasDrawPathInputDestroyed.
1494f6603c60Sopenharmony_ci * @tc.size  : SmallTest
1495f6603c60Sopenharmony_ci * @tc.type  : Function
1496f6603c60Sopenharmony_ci * @tc.level : Level 3
1497f6603c60Sopenharmony_ci */
1498f6603c60Sopenharmony_ciHWTEST_F(DrawingNativeCanvasTest, testCanvasDrawPathInputDestroyed, TestSize.Level3) {
1499f6603c60Sopenharmony_ci    // Deprecated
1500f6603c60Sopenharmony_ci}
1501f6603c60Sopenharmony_ci
1502f6603c60Sopenharmony_ci} // namespace Drawing
1503f6603c60Sopenharmony_ci} // namespace Rosen
1504f6603c60Sopenharmony_ci} // namespace OHOS
1505