1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, Hardware 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "drawing_color.h" 17#include "drawing_error_code.h" 18#include "drawing_filter.h" 19#include "drawing_mask_filter.h" 20#include "drawing_rect.h" 21#include "drawing_round_rect.h" 22#include "gtest/gtest.h" 23 24#include "utils/round_rect.h" 25#include "utils/scalar.h" 26 27using namespace testing; 28using namespace testing::ext; 29 30namespace OHOS { 31namespace Rosen { 32namespace Drawing { 33class NativeDrawingRoundRectLargeValueTest : public testing::Test { 34public: 35 static void SetUpTestCase(); 36 static void TearDownTestCase(); 37 void SetUp() override; 38 void TearDown() override; 39}; 40 41void NativeDrawingRoundRectLargeValueTest::SetUpTestCase() {} 42void NativeDrawingRoundRectLargeValueTest::TearDownTestCase() {} 43void NativeDrawingRoundRectLargeValueTest::SetUp() {} 44void NativeDrawingRoundRectLargeValueTest::TearDown() {} 45 46constexpr uint32_t FOUR = 4; 47constexpr int32_t MINUS_ONE = -1; 48 49/* 50 * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos001 51 * @tc.desc: test CCornerPosCastToCornerPos 52 * @tc.type: FUNC 53 * @tc.require: AR000GTO5R 54 */ 55HWTEST_F(NativeDrawingRoundRectLargeValueTest, CCornerPosCastToCornerPos001, TestSize.Level1) 56{ 57 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 2160, 4096); 58 OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200); 59 ASSERT_NE(nullptr, roundRect); 60 61 OH_Drawing_Corner_Radii radius = { 10, 10 }; 62 63 OH_Drawing_RoundRectSetCorner(nullptr, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT, radius); 64 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 65 OH_Drawing_RoundRectSetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(FOUR), radius); 66 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 67 OH_Drawing_RoundRectSetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(MINUS_ONE), radius); 68 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 69 OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT, radius); 70 71 OH_Drawing_RoundRectGetCorner(nullptr, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT); 72 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_INVALID_PARAMETER); 73 OH_Drawing_RoundRectGetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(FOUR)); 74 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 75 OH_Drawing_RoundRectGetCorner(roundRect, static_cast<OH_Drawing_CornerPos>(MINUS_ONE)); 76 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 77 OH_Drawing_Corner_Radii retrievedRadius; 78 retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT); 79 ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x); 80 ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y); 81 82 OH_Drawing_RoundRectDestroy(roundRect); 83 OH_Drawing_RectDestroy(rect); 84} 85 86/* 87 * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos002 88 * @tc.desc: test CCornerPosCastToCornerPos 89 * @tc.type: FUNC 90 * @tc.require: AR000GTO5R 91 */ 92HWTEST_F(NativeDrawingRoundRectLargeValueTest, CCornerPosCastToCornerPos002, TestSize.Level1) 93{ 94 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 2160, 4096); 95 OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200); 96 ASSERT_NE(nullptr, roundRect); 97 98 OH_Drawing_Corner_Radii radius = { 10, 10 }; 99 100 OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_RIGHT, radius); 101 102 OH_Drawing_Corner_Radii retrievedRadius; 103 104 retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_RIGHT); 105 ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x); 106 ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y); 107 108 OH_Drawing_RoundRectDestroy(roundRect); 109 OH_Drawing_RectDestroy(rect); 110} 111 112/* 113 * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos003 114 * @tc.desc: test CCornerPosCastToCornerPos 115 * @tc.type: FUNC 116 * @tc.require: AR000GTO5R 117 */ 118HWTEST_F(NativeDrawingRoundRectLargeValueTest, CCornerPosCastToCornerPos003, TestSize.Level1) 119{ 120 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 2160, 4096); 121 OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200); 122 ASSERT_NE(nullptr, roundRect); 123 124 OH_Drawing_Corner_Radii radius = { 10, 10 }; 125 126 OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_RIGHT, radius); 127 128 OH_Drawing_Corner_Radii retrievedRadius; 129 130 retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_RIGHT); 131 ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x); 132 ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y); 133 134 OH_Drawing_RoundRectDestroy(roundRect); 135 OH_Drawing_RectDestroy(rect); 136} 137 138/* 139 * @tc.name: NativeDrawingRectTest_CCornerPosCastToCornerPos004 140 * @tc.desc: test CCornerPosCastToCornerPos 141 * @tc.type: FUNC 142 * @tc.require: AR000GTO5R 143 */ 144HWTEST_F(NativeDrawingRoundRectLargeValueTest, CCornerPosCastToCornerPos004, TestSize.Level1) 145{ 146 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(100, 100, 2160, 4096); 147 OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 200, 200); 148 ASSERT_NE(nullptr, roundRect); 149 150 OH_Drawing_Corner_Radii radius = { 10, 10 }; 151 152 OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_LEFT, radius); 153 154 OH_Drawing_Corner_Radii retrievedRadius; 155 156 retrievedRadius = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_BOTTOM_LEFT); 157 ASSERT_FLOAT_EQ(retrievedRadius.x, radius.x); 158 ASSERT_FLOAT_EQ(retrievedRadius.y, radius.y); 159 160 OH_Drawing_RoundRectDestroy(roundRect); 161 OH_Drawing_RectDestroy(rect); 162} 163 164/* 165 * @tc.name: NativeDrawingRoundRectLargeValueTest_RoundRectOffset006 166 * @tc.desc: test for test for Translates RoundRect by (dx, dy). 167 * @tc.type: FUNC 168 * @tc.require: AR000GTO5R 169 */ 170HWTEST_F(NativeDrawingRoundRectLargeValueTest, NativeDrawingRoundRectLargeValueTest_RoundRectOffset006, TestSize.Level1) 171{ 172 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(10, 100, 2160, 4096); 173 OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, 25, 25); // 25: xRad, 25: yRad 174 float dx = 10.0f, dy = 10.0f; //10.0f: X-axis offset, 10.0f: Y-axis offset 175 176 EXPECT_EQ(OH_Drawing_RoundRectOffset(nullptr, dx, dy), OH_DRAWING_ERROR_INVALID_PARAMETER); 177 EXPECT_EQ(OH_Drawing_RoundRectOffset(roundRect, dx, dy), OH_DRAWING_SUCCESS); 178 179 OH_Drawing_RectDestroy(rect); 180 OH_Drawing_RoundRectDestroy(roundRect); 181} 182} // namespace Drawing 183} // namespace Rosen 184} // namespace OHOS