* Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "include/DrawingNativePathTest.h"
#include "include/OhosCommonTest.h"
#define MAX_ALLOWED_SIZE 1024
#define DRAWING_NUMBER_1 1
#define DRAWING_NUMBER_2 2
#define DRAWING_NUMBER_3 3
#define DRAWING_NUMBER_4 4
#define DRAWING_NUMBER_5 5
#define DRAWING_NUMBER_6 6
#define DRAWING_NUMBER_10 10
#define DRAWING_NUMBER_50 50
#define DRAWING_NUMBER_100 100
#define DRAWING_NUMBER_120 120
#define DRAWING_NUMBER_150 150
#define DRAWING_NUMBER_180 180
#define DRAWING_NUMBER_200 200
#define DRAWING_NUMBER_300 300
#define DRAWING_NUMBER_800 800
#define DRAWING_NUMBER_999 999
#define DRAWING_NUMBER_0XFF00FF00 0xFF00FF00
#define DRAWING_NUMBER_0XFFFFFFFF 0xFFFFFFFF
namespace OHOS {
namespace Rosen {
namespace Drawing {
void DrawingNativePathPart3TestSetUp()
{
std::cout << "DrawingNativePathPart3Test Setup code called before each test case." << std::endl;
OH_Drawing_ErrorCodeReset();
std::cout << "DrawingNativePathPart3Test errorCodeReset before each test case." << std::endl;
}
void DrawingNativePathPart3TestTearDown()
{
std::cout << "DrawingNativePathPart3Test Setup code called after each test case." << std::endl;
OH_Drawing_ErrorCodeReset();
std::cout << "DrawingNativePathPart3Test errorCodeReset after each test case." << std::endl;
}
int TestPathIsClosedNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, 0, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, 0, 0);
OH_Drawing_PathClose(path);
bool isClosed = OH_Drawing_PathIsClosed(path, false);
EXPECT_EQ(isClosed, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsClosedNormal2()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
bool isClosed = OH_Drawing_PathIsClosed(path, false);
EXPECT_EQ(isClosed, false);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsClosedNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathIsClosed(nullptr, false);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetPositionTangentNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_Point2D position;
OH_Drawing_Point2D tangent;
bool isSuccess = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetPositionTangentNormal2()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_Point2D position;
OH_Drawing_Point2D tangent;
bool isSuccess = OH_Drawing_PathGetPositionTangent(path, false, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetPositionTangentNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathGetPositionTangent(nullptr, true, DRAWING_NUMBER_50, nullptr, nullptr);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_ErrorCodeReset();
OH_Drawing_Point2D position;
OH_Drawing_Point2D tangent;
bool isSuccess = OH_Drawing_PathGetPositionTangent(path, true, 0.00f, &position, &tangent);
EXPECT_EQ(isSuccess, false);
OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, nullptr, &tangent);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_ErrorCodeReset();
OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, nullptr);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetPositionTangentAbnormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_Point2D position;
OH_Drawing_Point2D tangent;
bool isSuccess1 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess1, true);
position = {10, 10.0f};
bool isSuccess2 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess2, true);
position = {10.0f, 10};
bool isSuccess3 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess3, true);
tangent = {10, 10.0f};
bool isSuccess4 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess4, true);
tangent = {10.0f, 10};
bool isSuccess5 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess5, true);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetPositionTangentMaximal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_Point2D position;
OH_Drawing_Point2D tangent;
bool isSuccess1 = OH_Drawing_PathGetPositionTangent(path, true, FLT_MAX + DRAWING_NUMBER_1, &position, &tangent);
EXPECT_EQ(isSuccess1, true);
position = {FLT_MAX + DRAWING_NUMBER_1, 0.0f};
bool isSuccess2 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess2, true);
position = {0.0f, FLT_MAX + DRAWING_NUMBER_1};
bool isSuccess3 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess3, true);
tangent = {FLT_MAX + DRAWING_NUMBER_1, 0.0f};
bool isSuccess4 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess4, true);
tangent = {0.0f, FLT_MAX + DRAWING_NUMBER_1};
bool isSuccess5 = OH_Drawing_PathGetPositionTangent(path, true, DRAWING_NUMBER_50, &position, &tangent);
EXPECT_EQ(isSuccess5, true);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathOpNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_Path *src = OH_Drawing_PathCreate();
EXPECT_NE(src, nullptr);
OH_Drawing_PathMoveTo(src, 0, 0);
OH_Drawing_PathLineTo(src, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
bool pathOp1 = OH_Drawing_PathOp(path, src, OH_Drawing_PathOpMode::PATH_OP_MODE_INTERSECT);
EXPECT_EQ(pathOp1, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
bool pathOp2 = OH_Drawing_PathOp(path, src, OH_Drawing_PathOpMode::PATH_OP_MODE_DIFFERENCE);
EXPECT_EQ(pathOp2, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
bool pathOp3 = OH_Drawing_PathOp(path, src, OH_Drawing_PathOpMode::PATH_OP_MODE_UNION);
EXPECT_EQ(pathOp3, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
bool pathOp4 = OH_Drawing_PathOp(path, src, OH_Drawing_PathOpMode::PATH_OP_MODE_XOR);
EXPECT_EQ(pathOp4, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
bool pathOp5 = OH_Drawing_PathOp(path, src, OH_Drawing_PathOpMode::PATH_OP_MODE_REVERSE_DIFFERENCE);
EXPECT_EQ(pathOp5, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(src);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathOpNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_Path *src = OH_Drawing_PathCreate();
EXPECT_NE(src, nullptr);
bool pathOp = OH_Drawing_PathOp(nullptr, src, OH_Drawing_PathOpMode::PATH_OP_MODE_INTERSECT);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
EXPECT_EQ(pathOp, false);
OH_Drawing_ErrorCodeReset();
pathOp = OH_Drawing_PathOp(path, nullptr, OH_Drawing_PathOpMode::PATH_OP_MODE_INTERSECT);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
EXPECT_EQ(pathOp, false);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(src);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetMatrixNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
EXPECT_NE(matrix, nullptr);
OH_Drawing_MatrixSetMatrix(matrix, DRAWING_NUMBER_5, DRAWING_NUMBER_4, 0, 0, -DRAWING_NUMBER_1, 0, 0, 0,
DRAWING_NUMBER_1);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathMeasureMatrixFlags flags[] = {
GET_POSITION_MATRIX,
GET_TANGENT_MATRIX,
GET_POSITION_AND_TANGENT_MATRIX,
};
for (int i = 0; i < DRAWING_NUMBER_3; i++) {
OH_Drawing_ErrorCodeReset();
bool getMatrix = OH_Drawing_PathGetMatrix(path, true, DRAWING_NUMBER_50, matrix, flags[i]);
EXPECT_EQ(getMatrix, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
OH_Drawing_MatrixDestroy(matrix);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetMatrixNormal2()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
EXPECT_NE(matrix, nullptr);
OH_Drawing_MatrixSetMatrix(matrix, DRAWING_NUMBER_5, DRAWING_NUMBER_4, 0, 0, -DRAWING_NUMBER_1, 0, 0, 0,
DRAWING_NUMBER_1);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathMeasureMatrixFlags flags[] = {
GET_POSITION_MATRIX,
GET_TANGENT_MATRIX,
GET_POSITION_AND_TANGENT_MATRIX,
};
for (int i = 0; i < DRAWING_NUMBER_3; i++) {
OH_Drawing_ErrorCodeReset();
bool getMatrix = OH_Drawing_PathGetMatrix(path, false, DRAWING_NUMBER_50, matrix, flags[i]);
EXPECT_EQ(getMatrix, true);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
OH_Drawing_MatrixDestroy(matrix);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetMatrixNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
EXPECT_NE(matrix, nullptr);
OH_Drawing_MatrixSetMatrix(matrix, DRAWING_NUMBER_5, DRAWING_NUMBER_4, 0, 0, -DRAWING_NUMBER_1, 0, 0, 0,
DRAWING_NUMBER_1);
OH_Drawing_PathGetMatrix(nullptr, true, DRAWING_NUMBER_50, matrix, GET_POSITION_MATRIX);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_ErrorCodeReset();
bool getMatrix = OH_Drawing_PathGetMatrix(path, true, 0.00f, matrix, GET_POSITION_MATRIX);
EXPECT_EQ(getMatrix, false);
OH_Drawing_PathGetMatrix(path, true, DRAWING_NUMBER_50, nullptr, GET_POSITION_MATRIX);
EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
OH_Drawing_MatrixDestroy(matrix);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetMatrixAbnormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
EXPECT_NE(matrix, nullptr);
OH_Drawing_MatrixSetMatrix(matrix, DRAWING_NUMBER_5, DRAWING_NUMBER_4, 0, 0, -DRAWING_NUMBER_1, 0, 0, 0,
DRAWING_NUMBER_1);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
bool getMatrix = OH_Drawing_PathGetMatrix(path, true, DRAWING_NUMBER_50, matrix, GET_POSITION_MATRIX);
EXPECT_EQ(getMatrix, true);
OH_Drawing_PathDestroy(path);
OH_Drawing_MatrixDestroy(matrix);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetMatrixMaximal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_Matrix *matrix = OH_Drawing_MatrixCreate();
EXPECT_NE(matrix, nullptr);
OH_Drawing_MatrixSetMatrix(matrix, DRAWING_NUMBER_5, DRAWING_NUMBER_4, 0, 0, -DRAWING_NUMBER_1, 0, 0, 0,
DRAWING_NUMBER_1);
OH_Drawing_PathMoveTo(path, 0, 0);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
bool getMatrix = OH_Drawing_PathGetMatrix(path, true, FLT_MAX + 1, matrix, GET_POSITION_MATRIX);
EXPECT_EQ(getMatrix, true);
OH_Drawing_PathDestroy(path);
OH_Drawing_MatrixDestroy(matrix);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetSegmentNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Path *dstPath = OH_Drawing_PathCreate();
EXPECT_NE(dstPath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = {};
errorCode = OH_Drawing_PathGetSegment(path, true, DRAWING_NUMBER_120, DRAWING_NUMBER_180, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_180, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
errorCode = OH_Drawing_PathGetSegment(path, true, DRAWING_NUMBER_120, DRAWING_NUMBER_180, false, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_180, false, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(dstPath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetSegmentNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Path *dstPath = OH_Drawing_PathCreate();
EXPECT_NE(dstPath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = {};
errorCode = OH_Drawing_PathGetSegment(nullptr, false, DRAWING_NUMBER_120, DRAWING_NUMBER_180, true, dstPath,
&result);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
EXPECT_EQ(result, false);
errorCode = OH_Drawing_PathGetSegment(path, false, 0, DRAWING_NUMBER_180, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, 0, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, false);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_180, true, nullptr, &result);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
EXPECT_EQ(result, false);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_180, true, dstPath, nullptr);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
EXPECT_EQ(result, false);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(dstPath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetSegmentAbnormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Path *dstPath = OH_Drawing_PathCreate();
EXPECT_NE(dstPath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = {};
errorCode = OH_Drawing_PathGetSegment(path, false, -DRAWING_NUMBER_50, DRAWING_NUMBER_180, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_999, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_120, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, false);
errorCode = OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_100, true, dstPath, &result);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, false);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(dstPath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetSegmentMultiplies()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Path *dstPath = OH_Drawing_PathCreate();
EXPECT_NE(dstPath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = {};
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode =
OH_Drawing_PathGetSegment(path, false, DRAWING_NUMBER_120, DRAWING_NUMBER_180, true, dstPath, &result);
}
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
EXPECT_EQ(result, true);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(dstPath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathSetPathNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_PathAddCircle(other, DRAWING_NUMBER_200, DRAWING_NUMBER_200, DRAWING_NUMBER_150,
OH_Drawing_PathDirection::PATH_DIRECTION_CW);
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathSetPath(path, other);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathSetPathNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_PathAddCircle(other, DRAWING_NUMBER_200, DRAWING_NUMBER_200, DRAWING_NUMBER_150,
OH_Drawing_PathDirection::PATH_DIRECTION_CW);
OH_Drawing_ErrorCode errorCode = {};
errorCode = OH_Drawing_PathSetPath(nullptr, other);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathSetPath(path, nullptr);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathSetPathMulptiCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_PathAddCircle(other, DRAWING_NUMBER_200, DRAWING_NUMBER_200, DRAWING_NUMBER_150,
OH_Drawing_PathDirection::PATH_DIRECTION_CW);
OH_Drawing_ErrorCode errorCode = {};
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode = OH_Drawing_PathSetPath(path, other);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsEmptyNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
bool isEmpty = true;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathIsEmpty(path, &isEmpty);
EXPECT_EQ(isEmpty, false);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsEmptyNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
bool isEmpty = false;
OH_Drawing_ErrorCode errorCode = {};
errorCode = OH_Drawing_PathIsEmpty(nullptr, &isEmpty);
EXPECT_EQ(isEmpty, false);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathIsEmpty(path, nullptr);
EXPECT_EQ(isEmpty, false);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsEmptyMultipleCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
bool isEmpty = true;
OH_Drawing_ErrorCode errorCode = {};
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode = OH_Drawing_PathIsEmpty(path, &isEmpty);
EXPECT_EQ(isEmpty, false);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsRectNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path1 = OH_Drawing_PathCreate();
EXPECT_NE(path1, nullptr);
OH_Drawing_PathMoveTo(path1, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path1, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path1, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
bool isRect = true;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathIsRect(path1, rect, &isRect);
EXPECT_EQ(isRect, false);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_Path *path2 = OH_Drawing_PathCreate();
EXPECT_NE(path2, nullptr);
OH_Drawing_PathAddRect(path2, 0, 0, DRAWING_NUMBER_200, DRAWING_NUMBER_200,
OH_Drawing_PathDirection::PATH_DIRECTION_CW);
errorCode = OH_Drawing_PathIsRect(path2, rect, &isRect);
EXPECT_EQ(isRect, true);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_RectDestroy(rect);
OH_Drawing_PathDestroy(path1);
OH_Drawing_PathDestroy(path2);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsRectNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
bool isRect = true;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathIsRect(nullptr, rect, &isRect);
EXPECT_EQ(isRect, true);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathIsRect(path, nullptr, &isRect);
EXPECT_EQ(isRect, false);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
errorCode = OH_Drawing_PathIsRect(path, rect, nullptr);
EXPECT_EQ(isRect, false);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_RectDestroy(rect);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsRectMultipleCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_Rect *rect = OH_Drawing_RectCreate(0, 0, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
bool isRect = true;
OH_Drawing_ErrorCode errorCode = {};
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode = OH_Drawing_PathIsRect(path, rect, &isRect);
EXPECT_EQ(isRect, false);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_RectDestroy(rect);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetFillTypeNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_PathFillType pathFillType = PATH_FILL_TYPE_WINDING;
OH_Drawing_PathSetFillType(path, pathFillType);
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathGetFillType(path, &pathFillType);
EXPECT_EQ(pathFillType, OH_Drawing_PathFillType::PATH_FILL_TYPE_WINDING);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
pathFillType = PATH_FILL_TYPE_EVEN_ODD;
OH_Drawing_PathSetFillType(path, pathFillType);
errorCode = OH_Drawing_PathGetFillType(path, &pathFillType);
EXPECT_EQ(pathFillType, OH_Drawing_PathFillType::PATH_FILL_TYPE_EVEN_ODD);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
pathFillType = PATH_FILL_TYPE_INVERSE_WINDING;
OH_Drawing_PathSetFillType(path, pathFillType);
errorCode = OH_Drawing_PathGetFillType(path, &pathFillType);
EXPECT_EQ(pathFillType, OH_Drawing_PathFillType::PATH_FILL_TYPE_INVERSE_WINDING);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
pathFillType = PATH_FILL_TYPE_INVERSE_EVEN_ODD;
OH_Drawing_PathSetFillType(path, pathFillType);
errorCode = OH_Drawing_PathGetFillType(path, &pathFillType);
EXPECT_EQ(pathFillType, OH_Drawing_PathFillType::PATH_FILL_TYPE_INVERSE_EVEN_ODD);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetFillTypeNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_PathFillType pathFillType = PATH_FILL_TYPE_WINDING;
OH_Drawing_PathSetFillType(path, pathFillType);
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathGetFillType(nullptr, &pathFillType);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
pathFillType = PATH_FILL_TYPE_EVEN_ODD;
OH_Drawing_PathSetFillType(path, pathFillType);
errorCode = OH_Drawing_PathGetFillType(path, nullptr);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathGetFillTypeMultipleCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_200);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
OH_Drawing_ErrorCode errorCode = {};
OH_Drawing_PathFillType pathFillType = PATH_FILL_TYPE_WINDING;
OH_Drawing_PathSetFillType(path, pathFillType);
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode = OH_Drawing_PathGetFillType(path, &pathFillType);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathApproximateNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
float acceptableError = 0.1f;
uint32_t count = 0;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathApproximate(path, acceptableError, nullptr, &count);
float *vals = new float[count];
if (count == 0 || count > MAX_ALLOWED_SIZE) {
return -DRAWING_NUMBER_1;
} else {
errorCode = OH_Drawing_PathApproximate(path, acceptableError, vals, &count);
EXPECT_EQ(count, DRAWING_NUMBER_6);
EXPECT_EQ(vals[0], 0);
EXPECT_EQ(vals[DRAWING_NUMBER_1], 100.0f);
EXPECT_EQ(vals[DRAWING_NUMBER_2], 100.0f);
EXPECT_EQ(vals[DRAWING_NUMBER_3], 1.0f);
EXPECT_EQ(vals[DRAWING_NUMBER_4], 200.0f);
EXPECT_EQ(vals[DRAWING_NUMBER_5], 200.0f);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathApproximateNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
float acceptableError = 0.1f;
uint32_t count = 0;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathApproximate(path, acceptableError, nullptr, &count);
float *vals = new float[count];
if (count == 0 || count > MAX_ALLOWED_SIZE) {
return -DRAWING_NUMBER_1;
} else {
errorCode = OH_Drawing_PathApproximate(path, acceptableError, vals, &count);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
errorCode = OH_Drawing_PathApproximate(nullptr, acceptableError, vals, &count);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathApproximate(path, 0, vals, &count);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
errorCode = OH_Drawing_PathApproximate(path, acceptableError, nullptr, &count);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
errorCode = OH_Drawing_PathApproximate(path, acceptableError, nullptr, nullptr);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathApproximate(path, acceptableError, vals, nullptr);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathApproximateAbnormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
float acceptableError = 0.1f;
uint32_t count = 0;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathApproximate(path, acceptableError, nullptr, &count);
float *vals = new float[count];
if (count == 0 || count > MAX_ALLOWED_SIZE) {
return -DRAWING_NUMBER_1;
} else {
errorCode = OH_Drawing_PathApproximate(path, -0.1f, vals, &count);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
uint32_t count1 = DRAWING_NUMBER_10;
errorCode = OH_Drawing_PathApproximate(path, acceptableError, vals, &count1);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
uint32_t count2 = DRAWING_NUMBER_2;
errorCode = OH_Drawing_PathApproximate(path, acceptableError, vals, &count2);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathApproximateMultiCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_100);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_200, DRAWING_NUMBER_200);
float acceptableError = 0.1f;
uint32_t count = 0;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathApproximate(path, acceptableError, nullptr, &count);
float *vals = new float[count];
if (count == 0 || count > MAX_ALLOWED_SIZE) {
return -DRAWING_NUMBER_1;
} else {
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode = OH_Drawing_PathApproximate(path, acceptableError, vals, &count);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathInterpolateNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_50, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_150);
OH_Drawing_Path *other1 = OH_Drawing_PathCreate();
EXPECT_NE(other1, nullptr);
OH_Drawing_PathMoveTo(other1, DRAWING_NUMBER_100, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(other1, DRAWING_NUMBER_200, DRAWING_NUMBER_300);
OH_Drawing_Path *other2 = OH_Drawing_PathCreate();
EXPECT_NE(other2, nullptr);
OH_Drawing_PathArcTo(other2, DRAWING_NUMBER_100, DRAWING_NUMBER_100, DRAWING_NUMBER_800, DRAWING_NUMBER_800, 0,
DRAWING_NUMBER_180);
OH_Drawing_Path *interpolatePath = OH_Drawing_PathCreate();
EXPECT_NE(interpolatePath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathInterpolate(path, other1, 1.0f, &result, interpolatePath);
EXPECT_EQ(result, true);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
errorCode = OH_Drawing_PathInterpolate(path, other2, 1.0f, &result, interpolatePath);
EXPECT_EQ(result, false);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other1);
OH_Drawing_PathDestroy(other2);
OH_Drawing_PathDestroy(interpolatePath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathInterpolateNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_Path *interpolatePath = OH_Drawing_PathCreate();
EXPECT_NE(interpolatePath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathInterpolate(path, other, 0.5f, &result, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_50, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_150);
OH_Drawing_PathMoveTo(other, DRAWING_NUMBER_100, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(other, DRAWING_NUMBER_200, DRAWING_NUMBER_300);
errorCode = OH_Drawing_PathInterpolate(nullptr, other, 0.5f, &result, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathInterpolate(path, nullptr, 0.5f, &result, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathInterpolate(path, other, 0, &result, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
errorCode = OH_Drawing_PathInterpolate(path, other, 0.5f, nullptr, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathInterpolate(path, other, 0.5f, &result, nullptr);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
OH_Drawing_PathDestroy(interpolatePath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathInterpolateAbnormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_50, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_150);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_PathMoveTo(other, DRAWING_NUMBER_100, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(other, DRAWING_NUMBER_200, DRAWING_NUMBER_300);
OH_Drawing_Path *interpolatePath = OH_Drawing_PathCreate();
EXPECT_NE(interpolatePath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathInterpolate(path, other, -1.0f, &result, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
errorCode = OH_Drawing_PathInterpolate(path, other, 2.0f, &result, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
OH_Drawing_PathDestroy(interpolatePath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathInterpolateMultiCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_50, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_150);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_PathMoveTo(other, DRAWING_NUMBER_100, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(other, DRAWING_NUMBER_200, DRAWING_NUMBER_300);
OH_Drawing_Path *interpolatePath = OH_Drawing_PathCreate();
EXPECT_NE(interpolatePath, nullptr);
bool result = false;
OH_Drawing_ErrorCode errorCode = {};
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode = OH_Drawing_PathInterpolate(path, other, 0.5f, &result, interpolatePath);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
OH_Drawing_PathDestroy(interpolatePath);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInterpolateNormal()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_50, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_150);
OH_Drawing_Path *other1 = OH_Drawing_PathCreate();
EXPECT_NE(other1, nullptr);
OH_Drawing_PathMoveTo(other1, DRAWING_NUMBER_100, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(other1, DRAWING_NUMBER_200, DRAWING_NUMBER_300);
OH_Drawing_Path *other2 = OH_Drawing_PathCreate();
EXPECT_NE(other2, nullptr);
OH_Drawing_PathArcTo(other2, DRAWING_NUMBER_100, DRAWING_NUMBER_100, DRAWING_NUMBER_800, DRAWING_NUMBER_800, 0,
DRAWING_NUMBER_180);
bool result = false;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathIsInterpolate(path, other1, &result);
EXPECT_EQ(result, true);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
errorCode = OH_Drawing_PathIsInterpolate(path, other2, &result);
EXPECT_EQ(result, false);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other1);
OH_Drawing_PathDestroy(other2);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInterpolateNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_50, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_150);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_PathMoveTo(other, DRAWING_NUMBER_100, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(other, DRAWING_NUMBER_200, DRAWING_NUMBER_300);
bool result = false;
OH_Drawing_ErrorCode errorCode = OH_Drawing_PathIsInterpolate(nullptr, other, &result);
EXPECT_EQ(result, false);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathIsInterpolate(path, nullptr, &result);
EXPECT_EQ(result, false);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
errorCode = OH_Drawing_PathIsInterpolate(path, other, nullptr);
EXPECT_EQ(result, false);
EXPECT_EQ(errorCode, OH_DRAWING_ERROR_INVALID_PARAMETER);
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInterpolateMultiCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path *path = OH_Drawing_PathCreate();
EXPECT_NE(path, nullptr);
OH_Drawing_PathMoveTo(path, DRAWING_NUMBER_50, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(path, DRAWING_NUMBER_100, DRAWING_NUMBER_150);
OH_Drawing_Path *other = OH_Drawing_PathCreate();
EXPECT_NE(other, nullptr);
OH_Drawing_PathMoveTo(other, DRAWING_NUMBER_100, DRAWING_NUMBER_50);
OH_Drawing_PathLineTo(other, DRAWING_NUMBER_200, DRAWING_NUMBER_300);
bool result = false;
OH_Drawing_ErrorCode errorCode = {};
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
errorCode = OH_Drawing_PathIsInterpolate(path, other, &result);
EXPECT_EQ(result, true);
EXPECT_EQ(errorCode, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
OH_Drawing_PathDestroy(other);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInverseFillTypeNormalOne()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_WINDING);
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 200.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 300.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, 0xffff0000);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_ErrorCode code1 = OH_Drawing_PathToggleInverseFillType(path);
code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, true);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
EXPECT_EQ(code1, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 600.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 700.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, 0xff00ff00);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_PathDestroy(path);
OH_Drawing_BrushDestroy(brush);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInverseFillTypeNormalTwo()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_EVEN_ODD);
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 200.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 300.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, 0xffff0000);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_ErrorCode code1 = OH_Drawing_PathToggleInverseFillType(path);
code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, true);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
EXPECT_EQ(code1, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 600.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 700.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, 0xff00ff00);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_PathDestroy(path);
OH_Drawing_BrushDestroy(brush);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInverseFillTypeNormalThree()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_INVERSE_WINDING);
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, true);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 200.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 300.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, 0xFFFF0000);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_ErrorCode code1 = OH_Drawing_PathToggleInverseFillType(path);
code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
EXPECT_EQ(code1, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 600.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 700.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, 0xFF00FF00);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_PathDestroy(path);
OH_Drawing_BrushDestroy(brush);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInverseFillTypeNormalFour()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
OH_Drawing_Canvas *canvas = OH_Drawing_CanvasCreate();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_INVERSE_EVEN_ODD);
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, true);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 200.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 300.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, DRAWING_NUMBER_0XFFFFFFFF);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_ErrorCode code1 = OH_Drawing_PathToggleInverseFillType(path);
code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
EXPECT_EQ(code1, OH_DRAWING_SUCCESS);
OH_Drawing_PathAddCircle(path, 600.0f, 200.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_PathAddCircle(path, 700.0f, 300.0f, 100.0f, PATH_DIRECTION_CW);
OH_Drawing_BrushSetColor(brush, DRAWING_NUMBER_0XFF00FF00);
OH_Drawing_CanvasAttachBrush(canvas, brush);
OH_Drawing_CanvasDrawPath(canvas, path);
OH_Drawing_CanvasDetachBrush(canvas);
OH_Drawing_PathDestroy(path);
OH_Drawing_BrushDestroy(brush);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInverseFillTypeNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_WINDING);
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(nullptr, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_ERROR_INCORRECT_PARAMETER);
OH_Drawing_ErrorCode code1 = OH_Drawing_PathIsInverseFillType(path, nullptr);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code1, OH_DRAWING_ERROR_INCORRECT_PARAMETER);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathToggleInverseFillTypeNull()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_WINDING);
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
OH_Drawing_ErrorCode code1 = OH_Drawing_PathToggleInverseFillType(nullptr);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code1, OH_DRAWING_ERROR_INCORRECT_PARAMETER);
code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathIsInverseFillTypeCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_WINDING);
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
int TestPathToggleInverseFillTypeCalls()
{
DrawingNativePathPart3TestSetUp();
OH_Drawing_Path* path = OH_Drawing_PathCreate();
bool isInverseFillType = false;
OH_Drawing_PathSetFillType(path, OH_Drawing_PathFillType::PATH_FILL_TYPE_WINDING);
OH_Drawing_ErrorCode code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(isInverseFillType, false);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
for (int i = 0; i < DRAWING_NUMBER_10; i++) {
OH_Drawing_ErrorCode code1 = OH_Drawing_PathToggleInverseFillType(path);
code = OH_Drawing_PathIsInverseFillType(path, &isInverseFillType);
EXPECT_EQ(code1, OH_DRAWING_SUCCESS);
EXPECT_EQ(code, OH_DRAWING_SUCCESS);
EXPECT_EQ(isInverseFillType, (i % DRAWING_NUMBER_2 == 0));
}
OH_Drawing_PathDestroy(path);
DrawingNativePathPart3TestTearDown();
return OH_DRAWING_SUCCESS;
}
}
}
}