1/* 2 * Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development 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, software 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_error_code.h" 17#include "drawing_shadow_layer.h" 18#include "gtest/gtest.h" 19#include <random> 20 21using namespace testing; 22using namespace testing::ext; 23 24namespace OHOS { 25namespace Rosen { 26namespace Drawing { 27class DrawingNativeShadowLayerTest : public testing::Test {}; 28 29/* 30 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0100 31 * @tc.name: testShadowLayerCreateNormal 32 * @tc.desc: test for testShadowLayerCreateNormal. 33 * @tc.size : SmallTest 34 * @tc.type : Function 35 * @tc.level : Level 0 36 */ 37HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateNormal, TestSize.Level0) { 38 // 1. Call OH_Drawing_ShadowLayerCreate with integer values for blurRadius, x, and y 39 OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(3, -3, 3, 0xFF00FF00); 40 EXPECT_NE(shadow, nullptr); 41 OH_Drawing_ShadowLayerDestroy(shadow); 42 // 2. Call OH_Drawing_ShadowLayerCreate with floating-point values for blurRadius, x, and y 43 OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3.f, -3.f, 3.f, 0xFF00FF00); 44 EXPECT_NE(shadow2, nullptr); 45 OH_Drawing_ShadowLayerDestroy(shadow2); 46} 47 48/* 49 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0101 50 * @tc.name: testShadowLayerCreateNull 51 * @tc.desc: test for testShadowLayerCreateNull. 52 * @tc.size : SmallTest 53 * @tc.type : Function 54 * @tc.level : Level 3 55 */ 56HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateNull, TestSize.Level3) { 57 // 1. OH_Drawing_ShadowLayerCreate with the first parameter being empty, check the error code using 58 // OH_Drawing_ErrorCodeGet 59 OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(0, -3, 3, 0xFF00FF00); 60 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 61 // 2. OH_Drawing_ShadowLayerCreate with the second parameter being empty 62 OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3, 0, 3, 0xFF00FF00); 63 EXPECT_NE(shadow2, nullptr); 64 // 3. OH_Drawing_ShadowLayerCreate with the third parameter being empty 65 OH_Drawing_ShadowLayer *shadow3 = OH_Drawing_ShadowLayerCreate(3, -3, 0, 0xFF00FF00); 66 EXPECT_NE(shadow3, nullptr); 67 // 4. OH_Drawing_ShadowLayerCreate with the fourth parameter being empty 68 OH_Drawing_ShadowLayer *shadow4 = OH_Drawing_ShadowLayerCreate(3, -3, 3, 0); 69 EXPECT_NE(shadow4, nullptr); 70 // 5. Free memory 71 OH_Drawing_ShadowLayerDestroy(shadow); 72 OH_Drawing_ShadowLayerDestroy(shadow2); 73 OH_Drawing_ShadowLayerDestroy(shadow3); 74 OH_Drawing_ShadowLayerDestroy(shadow4); 75} 76 77/* 78 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0102 79 * @tc.name: testShadowLayerCreateAbnormal 80 * @tc.desc: test for testShadowLayerCreateAbnormal. 81 * @tc.size : SmallTest 82 * @tc.type : Function 83 * @tc.level : Level 3 84 */ 85HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateAbnormal, TestSize.Level3) { 86 // 1. OH_Drawing_ShadowLayerCreate with the first parameter as a negative number, check the error code using 87 // OH_Drawing_ErrorCodeGet 88 OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(-3, 3, 3, 0xFF00FF00); 89 EXPECT_EQ(OH_Drawing_ErrorCodeGet(), OH_DRAWING_ERROR_PARAMETER_OUT_OF_RANGE); 90 // 2. OH_Drawing_ShadowLayerCreate with the second parameter as a negative number 91 OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3, -3, 3, 0xFF00FF00); 92 EXPECT_NE(shadow2, nullptr); 93 // 3. OH_Drawing_ShadowLayerCreate with the third parameter as a negative number 94 OH_Drawing_ShadowLayer *shadow3 = OH_Drawing_ShadowLayerCreate(3, 3, -3, 0xFF00FF00); 95 EXPECT_NE(shadow3, nullptr); 96 // 4. OH_Drawing_ShadowLayerCreate with the fourth parameter as a negative number 97 OH_Drawing_ShadowLayer *shadow4 = OH_Drawing_ShadowLayerCreate(3, 3, 3, -0xFF00FF00); 98 EXPECT_NE(shadow4, nullptr); 99 // 5. Free memory 100 OH_Drawing_ShadowLayerDestroy(shadow); 101 OH_Drawing_ShadowLayerDestroy(shadow2); 102 OH_Drawing_ShadowLayerDestroy(shadow3); 103 OH_Drawing_ShadowLayerDestroy(shadow4); 104} 105 106/* 107 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0103 108 * @tc.name: testShadowLayerCreateMaximum 109 * @tc.desc: test for testShadowLayerCreateMaximum. 110 * @tc.size : SmallTest 111 * @tc.type : Function 112 * @tc.level : Level 3 113 */ 114HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateMaximum, TestSize.Level3) { 115 // 1. Call OH_Drawing_ShadowLayerCreate with the first parameter as the maximum value 116 OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(FLT_MAX, 3, 3, 0xFF00FF00); 117 EXPECT_NE(shadow, nullptr); 118 // 2. Call OH_Drawing_ShadowLayerCreate with the second parameter as the maximum value 119 OH_Drawing_ShadowLayer *shadow2 = OH_Drawing_ShadowLayerCreate(3, FLT_MAX, 3, 0xFF00FF00); 120 EXPECT_NE(shadow2, nullptr); 121 // 3. Call OH_Drawing_ShadowLayerCreate with the third parameter as the maximum value 122 OH_Drawing_ShadowLayer *shadow3 = OH_Drawing_ShadowLayerCreate(3, 3, FLT_MAX, 0xFF00FF00); 123 EXPECT_NE(shadow3, nullptr); 124 // 4. Call OH_Drawing_ShadowLayerCreate with the fourth parameter as the maximum value 125 OH_Drawing_ShadowLayer *shadow4 = OH_Drawing_ShadowLayerCreate(3, 3, 3, UINT32_MAX); 126 EXPECT_NE(shadow4, nullptr); 127 // 5. Free memory 128 OH_Drawing_ShadowLayerDestroy(shadow); 129 OH_Drawing_ShadowLayerDestroy(shadow2); 130 OH_Drawing_ShadowLayerDestroy(shadow3); 131 OH_Drawing_ShadowLayerDestroy(shadow4); 132} 133 134/* 135 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0104 136 * @tc.name: testShadowLayerCreateMultipleCalls 137 * @tc.desc: test for testShadowLayerCreateMultipleCalls. 138 * @tc.size : SmallTest 139 * @tc.type : Function 140 * @tc.level : Level 3 141 */ 142HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerCreateMultipleCalls, TestSize.Level3) { 143 // 1. Call OH_Drawing_ShadowLayerCreate 10 times with random values for blurRadius, x, y, and different colors 144 std::random_device rd; 145 std::mt19937 gen(rd()); 146 std::uniform_real_distribution<float> dis(0, 100); 147 for (int i = 0; i < 10; i++) { 148 float blurRadius = dis(gen); 149 float x = dis(gen); 150 float y = dis(gen); 151 uint32_t color = dis(gen); 152 OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(blurRadius, x, y, color); 153 EXPECT_NE(shadow, nullptr); 154 OH_Drawing_ShadowLayerDestroy(shadow); 155 } 156} 157 158/* 159 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0200 160 * @tc.name: testShadowLayerDestroyNormal 161 * @tc.desc: test for testShadowLayerDestroyNormal. 162 * @tc.size : SmallTest 163 * @tc.type : Function 164 * @tc.level : Level 0 165 */ 166HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerDestroyNormal, TestSize.Level0) { 167 // 1. Call OH_Drawing_ShadowLayerCreate 168 OH_Drawing_ShadowLayer *shadow = OH_Drawing_ShadowLayerCreate(3, 3, 3, 0xFF00FF00); 169 // 2. Call OH_Drawing_ShadowLayerDestroy 170 OH_Drawing_ShadowLayerDestroy(shadow); 171} 172 173/* 174 * @tc.number: SUB_BASIC_GRAPHICS_SPECIAL_API_C_DRAWING_SHADOW_LAYER_0201 175 * @tc.name: testShadowLayerDestroyNull 176 * @tc.desc: test for testShadowLayerDestroyNull. 177 * @tc.size : SmallTest 178 * @tc.type : Function 179 * @tc.level : Level 3 180 */ 181HWTEST_F(DrawingNativeShadowLayerTest, testShadowLayerDestroyNull, TestSize.Level3) { 182 // 1. OH_Drawing_ShadowLayerDestroy with null parameter 183 OH_Drawing_ShadowLayerDestroy(nullptr); 184} 185 186} // namespace Drawing 187} // namespace Rosen 188} // namespace OHOS