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