14d949f91Sopenharmony_ci/* 24d949f91Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd. 34d949f91Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44d949f91Sopenharmony_ci * you may not use this file except in compliance with the License. 54d949f91Sopenharmony_ci * You may obtain a copy of the License at 64d949f91Sopenharmony_ci * 74d949f91Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84d949f91Sopenharmony_ci * 94d949f91Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104d949f91Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114d949f91Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124d949f91Sopenharmony_ci * See the License for the specific language governing permissions and 134d949f91Sopenharmony_ci * limitations under the License. 144d949f91Sopenharmony_ci */ 154d949f91Sopenharmony_ci 164d949f91Sopenharmony_ci#include "gtest/gtest.h" 174d949f91Sopenharmony_ci 184d949f91Sopenharmony_ci#include "native_common_utils.h" 194d949f91Sopenharmony_ci#include "effect_json_helper.h" 204d949f91Sopenharmony_ci#include "common_utils.h" 214d949f91Sopenharmony_ci#include "string_helper.h" 224d949f91Sopenharmony_ci#include "format_helper.h" 234d949f91Sopenharmony_ci#include "native_effect_base.h" 244d949f91Sopenharmony_ci#include "memcpy_helper.h" 254d949f91Sopenharmony_ci 264d949f91Sopenharmony_ciusing namespace testing::ext; 274d949f91Sopenharmony_cinamespace { 284d949f91Sopenharmony_ci const float YUV_BYTES_PER_PIXEL = 1.5f; 294d949f91Sopenharmony_ci const int32_t P10_BYTES_PER_LUMA = 2; 304d949f91Sopenharmony_ci const u_int32_t RGBA_BYTES_PER_PIXEL = 4; 314d949f91Sopenharmony_ci constexpr uint32_t WIDTH = 1920; 324d949f91Sopenharmony_ci constexpr uint32_t HEIGHT = 1080; 334d949f91Sopenharmony_ci constexpr uint32_t MAX_ALLOC_SIZE = 600 * 1024 * 1024; 344d949f91Sopenharmony_ci} 354d949f91Sopenharmony_ci 364d949f91Sopenharmony_cinamespace OHOS { 374d949f91Sopenharmony_cinamespace Media { 384d949f91Sopenharmony_cinamespace Effect { 394d949f91Sopenharmony_cinamespace Test { 404d949f91Sopenharmony_ci 414d949f91Sopenharmony_ciclass TestUtils : public testing::Test { 424d949f91Sopenharmony_cipublic: 434d949f91Sopenharmony_ci TestUtils() = default; 444d949f91Sopenharmony_ci 454d949f91Sopenharmony_ci ~TestUtils() override = default; 464d949f91Sopenharmony_ci static void SetUpTestCase() {} 474d949f91Sopenharmony_ci 484d949f91Sopenharmony_ci static void TearDownTestCase() {} 494d949f91Sopenharmony_ci 504d949f91Sopenharmony_ci void SetUp() override{} 514d949f91Sopenharmony_ci 524d949f91Sopenharmony_ci void TearDown() override{} 534d949f91Sopenharmony_ci}; 544d949f91Sopenharmony_ci 554d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny001, TestSize.Level1) { 564d949f91Sopenharmony_ci ImageEffect_Any value; 574d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_INT32; 584d949f91Sopenharmony_ci value.dataValue.int32Value = 123; 594d949f91Sopenharmony_ci Plugin::Any any; 604d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::ParseOHAny(&value, any); 614d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::SUCCESS); 624d949f91Sopenharmony_ci int actualValue = Plugin::AnyCast<int>(any); 634d949f91Sopenharmony_ci ASSERT_EQ(actualValue, 123); 644d949f91Sopenharmony_ci} 654d949f91Sopenharmony_ci 664d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny002, TestSize.Level1) { 674d949f91Sopenharmony_ci ImageEffect_Any value; 684d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_FLOAT; 694d949f91Sopenharmony_ci value.dataValue.floatValue = 123.45f; 704d949f91Sopenharmony_ci Plugin::Any any; 714d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::ParseOHAny(&value, any); 724d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::SUCCESS); 734d949f91Sopenharmony_ci float actualValue = Plugin::AnyCast<float>(any); 744d949f91Sopenharmony_ci ASSERT_EQ(actualValue, 123.45f); 754d949f91Sopenharmony_ci} 764d949f91Sopenharmony_ci 774d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny003, TestSize.Level1) { 784d949f91Sopenharmony_ci ImageEffect_Any value; 794d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_DOUBLE; 804d949f91Sopenharmony_ci value.dataValue.doubleValue = 123.45; 814d949f91Sopenharmony_ci Plugin::Any any; 824d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::ParseOHAny(&value, any); 834d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::SUCCESS); 844d949f91Sopenharmony_ci double actualValue = Plugin::AnyCast<double>(any); 854d949f91Sopenharmony_ci ASSERT_EQ(actualValue, 123.45); 864d949f91Sopenharmony_ci} 874d949f91Sopenharmony_ci 884d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny004, TestSize.Level1) { 894d949f91Sopenharmony_ci ImageEffect_Any value; 904d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_CHAR; 914d949f91Sopenharmony_ci value.dataValue.charValue = 'A'; 924d949f91Sopenharmony_ci Plugin::Any any; 934d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::ParseOHAny(&value, any); 944d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::SUCCESS); 954d949f91Sopenharmony_ci ASSERT_EQ(Plugin::AnyCast<char>(any), 'A'); 964d949f91Sopenharmony_ci} 974d949f91Sopenharmony_ci 984d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny005, TestSize.Level1) { 994d949f91Sopenharmony_ci ImageEffect_Any value; 1004d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_LONG; 1014d949f91Sopenharmony_ci value.dataValue.longValue = 123456789L; 1024d949f91Sopenharmony_ci Plugin::Any any; 1034d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::ParseOHAny(&value, any); 1044d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::SUCCESS); 1054d949f91Sopenharmony_ci ASSERT_EQ(Plugin::AnyCast<long>(any), 123456789L); 1064d949f91Sopenharmony_ci} 1074d949f91Sopenharmony_ci 1084d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny006, TestSize.Level1) { 1094d949f91Sopenharmony_ci ImageEffect_Any value; 1104d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR; 1114d949f91Sopenharmony_ci value.dataValue.ptrValue = (void*)0x12345678; 1124d949f91Sopenharmony_ci Plugin::Any any; 1134d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::ParseOHAny(&value, any); 1144d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::SUCCESS); 1154d949f91Sopenharmony_ci ASSERT_EQ(Plugin::AnyCast<void*>(any), reinterpret_cast<void*>(0x12345678)); 1164d949f91Sopenharmony_ci} 1174d949f91Sopenharmony_ci 1184d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny007, TestSize.Level1) { 1194d949f91Sopenharmony_ci ImageEffect_Any value; 1204d949f91Sopenharmony_ci Plugin::Any any; 1214d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::ParseOHAny(&value, any); 1224d949f91Sopenharmony_ci ASSERT_NE(result, ErrorCode::SUCCESS); 1234d949f91Sopenharmony_ci} 1244d949f91Sopenharmony_ci 1254d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseOHAny008, TestSize.Level1) { 1264d949f91Sopenharmony_ci ImageEffect_Any value; 1274d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_BOOL; 1284d949f91Sopenharmony_ci value.dataValue.boolValue = true; 1294d949f91Sopenharmony_ci Plugin::Any any; 1304d949f91Sopenharmony_ci EXPECT_EQ(NativeCommonUtils::ParseOHAny(&value, any), ErrorCode::SUCCESS); 1314d949f91Sopenharmony_ci} 1324d949f91Sopenharmony_ci 1334d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsSwitchToOHAny001, TestSize.Level1) { 1344d949f91Sopenharmony_ci Plugin::Any any = 10.0; 1354d949f91Sopenharmony_ci ImageEffect_Any value; 1364d949f91Sopenharmony_ci value.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_DOUBLE; 1374d949f91Sopenharmony_ci ErrorCode result = NativeCommonUtils::SwitchToOHAny(any, &value); 1384d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 1394d949f91Sopenharmony_ci EXPECT_DOUBLE_EQ(value.dataValue.doubleValue, 10.0); 1404d949f91Sopenharmony_ci 1414d949f91Sopenharmony_ci Plugin::Any anyChar = 'a'; 1424d949f91Sopenharmony_ci ImageEffect_Any valueChar; 1434d949f91Sopenharmony_ci valueChar.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_CHAR; 1444d949f91Sopenharmony_ci result = NativeCommonUtils::SwitchToOHAny(anyChar, &valueChar); 1454d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 1464d949f91Sopenharmony_ci EXPECT_EQ(valueChar.dataValue.charValue, 'a'); 1474d949f91Sopenharmony_ci 1484d949f91Sopenharmony_ci Plugin::Any anyLong = 10L; 1494d949f91Sopenharmony_ci ImageEffect_Any valueLong; 1504d949f91Sopenharmony_ci valueLong.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_LONG; 1514d949f91Sopenharmony_ci result = NativeCommonUtils::SwitchToOHAny(anyLong, &valueLong); 1524d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 1534d949f91Sopenharmony_ci EXPECT_EQ(valueLong.dataValue.longValue, 10L); 1544d949f91Sopenharmony_ci 1554d949f91Sopenharmony_ci Plugin::Any anyPtr = (void*)10; 1564d949f91Sopenharmony_ci ImageEffect_Any valuePtr; 1574d949f91Sopenharmony_ci valuePtr.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_PTR; 1584d949f91Sopenharmony_ci result = NativeCommonUtils::SwitchToOHAny(anyPtr, &valuePtr); 1594d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 1604d949f91Sopenharmony_ci EXPECT_EQ(valuePtr.dataValue.ptrValue, (void*)10); 1614d949f91Sopenharmony_ci 1624d949f91Sopenharmony_ci Plugin::Any anyBool = true; 1634d949f91Sopenharmony_ci ImageEffect_Any valueBool; 1644d949f91Sopenharmony_ci valueBool.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_BOOL; 1654d949f91Sopenharmony_ci result = NativeCommonUtils::SwitchToOHAny(anyBool, &valueBool); 1664d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::SUCCESS); 1674d949f91Sopenharmony_ci EXPECT_EQ(valueBool.dataValue.boolValue, true); 1684d949f91Sopenharmony_ci 1694d949f91Sopenharmony_ci Plugin::Any anyUnknown = std::string("Unsupported"); 1704d949f91Sopenharmony_ci ImageEffect_Any valueUnknown; 1714d949f91Sopenharmony_ci valueUnknown.dataType = ImageEffect_DataType::EFFECT_DATA_TYPE_UNKNOWN; 1724d949f91Sopenharmony_ci result = NativeCommonUtils::SwitchToOHAny(anyUnknown, &valueUnknown); 1734d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::ERR_NOT_SUPPORT_SWITCH_TO_OHANY); 1744d949f91Sopenharmony_ci} 1754d949f91Sopenharmony_ci 1764d949f91Sopenharmony_ciHWTEST_F(TestUtils, JsonHelper001, TestSize.Level1) { 1774d949f91Sopenharmony_ci EffectJsonPtr root = EFFECTJsonHelper::CreateObject(); 1784d949f91Sopenharmony_ci ASSERT_NE(root, nullptr); 1794d949f91Sopenharmony_ci ASSERT_TRUE(root->IsObject()); 1804d949f91Sopenharmony_ci ASSERT_TRUE(root->Put("stringKey", "testString")); 1814d949f91Sopenharmony_ci ASSERT_TRUE(root->Put("floatKey", 1.23f)); 1824d949f91Sopenharmony_ci ASSERT_TRUE(root->Put("intKey", 123)); 1834d949f91Sopenharmony_ci EffectJsonPtr intRoot = EFFECTJsonHelper::CreateArray(); 1844d949f91Sopenharmony_ci ASSERT_TRUE(intRoot->Add(1)); 1854d949f91Sopenharmony_ci ASSERT_TRUE(intRoot->Add(2)); 1864d949f91Sopenharmony_ci ASSERT_TRUE(intRoot->Add(3)); 1874d949f91Sopenharmony_ci ASSERT_TRUE(root->Put("arrayKey", intRoot)); 1884d949f91Sopenharmony_ci 1894d949f91Sopenharmony_ci ASSERT_TRUE(root->HasElement("stringKey")); 1904d949f91Sopenharmony_ci EffectJsonPtr stringKeyJsonPtr = root->GetElement("stringKey"); 1914d949f91Sopenharmony_ci ASSERT_NE(stringKeyJsonPtr, nullptr); 1924d949f91Sopenharmony_ci ASSERT_TRUE(stringKeyJsonPtr->IsString()); 1934d949f91Sopenharmony_ci ASSERT_FALSE(stringKeyJsonPtr->IsNumber()); 1944d949f91Sopenharmony_ci ASSERT_EQ(stringKeyJsonPtr->GetInt(), 0); 1954d949f91Sopenharmony_ci ASSERT_EQ(stringKeyJsonPtr->GetUInt(), 0); 1964d949f91Sopenharmony_ci ASSERT_EQ(stringKeyJsonPtr->GetFloat(), 0); 1974d949f91Sopenharmony_ci ASSERT_EQ(stringKeyJsonPtr->GetDouble(), 0); 1984d949f91Sopenharmony_ci ASSERT_FALSE(stringKeyJsonPtr->GetBool()); 1994d949f91Sopenharmony_ci std::string stringValue = stringKeyJsonPtr->GetString(); 2004d949f91Sopenharmony_ci ASSERT_STREQ(stringValue.c_str(), "testString"); 2014d949f91Sopenharmony_ci 2024d949f91Sopenharmony_ci ASSERT_TRUE(root->HasElement("floatKey")); 2034d949f91Sopenharmony_ci EffectJsonPtr floatKeyJsonPtr = root->GetElement("floatKey"); 2044d949f91Sopenharmony_ci ASSERT_NE(floatKeyJsonPtr, nullptr); 2054d949f91Sopenharmony_ci ASSERT_TRUE(floatKeyJsonPtr->IsNumber()); 2064d949f91Sopenharmony_ci ASSERT_TRUE(floatKeyJsonPtr->GetString().empty()); 2074d949f91Sopenharmony_ci ASSERT_FALSE(floatKeyJsonPtr->IsString()); 2084d949f91Sopenharmony_ci float floatValue = floatKeyJsonPtr->GetFloat(); 2094d949f91Sopenharmony_ci ASSERT_EQ(floatValue, 1.23f); 2104d949f91Sopenharmony_ci 2114d949f91Sopenharmony_ci ASSERT_FALSE(root->HasElement("nonExistKey")); 2124d949f91Sopenharmony_ci 2134d949f91Sopenharmony_ci ASSERT_TRUE(root->HasElement("arrayKey")); 2144d949f91Sopenharmony_ci EffectJsonPtr arrayKeyJsonPtr = root->GetElement("arrayKey"); 2154d949f91Sopenharmony_ci ASSERT_NE(arrayKeyJsonPtr, nullptr); 2164d949f91Sopenharmony_ci ASSERT_TRUE(arrayKeyJsonPtr->IsArray()); 2174d949f91Sopenharmony_ci std::vector<EffectJsonPtr> arrayJsonPtr = arrayKeyJsonPtr->GetArray(); 2184d949f91Sopenharmony_ci ASSERT_EQ(arrayJsonPtr.size(), 3); 2194d949f91Sopenharmony_ci ASSERT_EQ(arrayJsonPtr[0]->GetInt(), 1); 2204d949f91Sopenharmony_ci ASSERT_EQ(arrayJsonPtr[1]->GetInt(), 2); 2214d949f91Sopenharmony_ci ASSERT_EQ(arrayJsonPtr[2]->GetInt(), 3); 2224d949f91Sopenharmony_ci} 2234d949f91Sopenharmony_ci 2244d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseJson001, TestSize.Level1) { 2254d949f91Sopenharmony_ci std::string key = "test_key"; 2264d949f91Sopenharmony_ci Plugin::Any any = nullptr; 2274d949f91Sopenharmony_ci Json *json = nullptr; 2284d949f91Sopenharmony_ci EffectJsonPtr result = std::make_shared<EffectJson>(json); 2294d949f91Sopenharmony_ci ErrorCode ret = CommonUtils::ParseAnyAndAddToJson(key, any, result); 2304d949f91Sopenharmony_ci ASSERT_EQ(ret, ErrorCode::ERR_ANY_CAST_TYPE_NOT_MATCH); 2314d949f91Sopenharmony_ci} 2324d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsParseNativeWindowData001, TestSize.Level1) { 2334d949f91Sopenharmony_ci std::shared_ptr<BufferInfo> bufferinfo = std::make_unique<BufferInfo>(); 2344d949f91Sopenharmony_ci void *addr = nullptr; 2354d949f91Sopenharmony_ci std::shared_ptr<ExtraInfo> extrainfo = std::make_unique<ExtraInfo>(); 2364d949f91Sopenharmony_ci std::shared_ptr<EffectBuffer> effectBuffer = std::make_unique<EffectBuffer>(bufferinfo, addr, extrainfo); 2374d949f91Sopenharmony_ci DataType datatype = DataType::UNKNOWN; 2384d949f91Sopenharmony_ci ErrorCode result = CommonUtils::ParseNativeWindowData(effectBuffer, datatype); 2394d949f91Sopenharmony_ci ASSERT_EQ(result, ErrorCode::SUCCESS); 2404d949f91Sopenharmony_ci} 2414d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsModifyPixelMapProperty001, TestSize.Level1) { 2424d949f91Sopenharmony_ci PixelMap pixelMap; 2434d949f91Sopenharmony_ci std::shared_ptr<BufferInfo> bufferinfo = std::make_unique<BufferInfo>(); 2444d949f91Sopenharmony_ci void *addr = nullptr; 2454d949f91Sopenharmony_ci std::shared_ptr<ExtraInfo> extrainfo = std::make_unique<ExtraInfo>(); 2464d949f91Sopenharmony_ci std::shared_ptr<EffectBuffer> buffer = std::make_unique<EffectBuffer>(bufferinfo, addr, extrainfo); 2474d949f91Sopenharmony_ci std::shared_ptr<EffectMemoryManager> memoryManager = std::make_unique<EffectMemoryManager>(); 2484d949f91Sopenharmony_ci ErrorCode result = CommonUtils::ModifyPixelMapProperty(&pixelMap, buffer, memoryManager); 2494d949f91Sopenharmony_ci EXPECT_EQ(result, ErrorCode::ERR_ALLOC_MEMORY_FAIL); 2504d949f91Sopenharmony_ci} 2514d949f91Sopenharmony_ciHWTEST_F(TestUtils, StringHelper001, TestSize.Level1) { 2524d949f91Sopenharmony_ci std::string input = "abc"; 2534d949f91Sopenharmony_ci std::string suffix = "abcd"; 2544d949f91Sopenharmony_ci std::string srcStr = "abcdef"; 2554d949f91Sopenharmony_ci std::string endStr = "def"; 2564d949f91Sopenharmony_ci std::shared_ptr<StringHelp> stringHelp = std::make_shared<StringHelp>(); 2574d949f91Sopenharmony_ci EXPECT_FALSE(stringHelp->EndsWith(input, suffix)); 2584d949f91Sopenharmony_ci EXPECT_FALSE(stringHelp->EndsWithIgnoreCase(input, suffix)); 2594d949f91Sopenharmony_ci bool result = stringHelp->EndsWith(srcStr, endStr); 2604d949f91Sopenharmony_ci EXPECT_TRUE(result); 2614d949f91Sopenharmony_ci} 2624d949f91Sopenharmony_ci 2634d949f91Sopenharmony_ciHWTEST_F(TestUtils, FormatHelper001, TestSize.Level1) { 2644d949f91Sopenharmony_ci uint32_t height = 1280; 2654d949f91Sopenharmony_ci uint32_t width = 960; 2664d949f91Sopenharmony_ci std::shared_ptr<FormatHelper> formatHelper = std::make_shared<FormatHelper>(); 2674d949f91Sopenharmony_ci uint32_t result = formatHelper->CalculateDataRowCount(height, IEffectFormat::YUVNV12); 2684d949f91Sopenharmony_ci ASSERT_EQ(result, height * YUV_BYTES_PER_PIXEL); 2694d949f91Sopenharmony_ci 2704d949f91Sopenharmony_ci result = formatHelper->CalculateDataRowCount(height, IEffectFormat::DEFAULT); 2714d949f91Sopenharmony_ci ASSERT_EQ(result, height); 2724d949f91Sopenharmony_ci 2734d949f91Sopenharmony_ci result = formatHelper->CalculateRowStride(width, IEffectFormat::YCRCB_P010); 2744d949f91Sopenharmony_ci ASSERT_EQ(result, width * P10_BYTES_PER_LUMA); 2754d949f91Sopenharmony_ci 2764d949f91Sopenharmony_ci result = formatHelper->CalculateRowStride(width, IEffectFormat::DEFAULT); 2774d949f91Sopenharmony_ci ASSERT_EQ(result, width); 2784d949f91Sopenharmony_ci} 2794d949f91Sopenharmony_ci 2804d949f91Sopenharmony_cistd::shared_ptr<void> AllocBuffer(size_t size) 2814d949f91Sopenharmony_ci{ 2824d949f91Sopenharmony_ci if (size <= 0 || size > MAX_ALLOC_SIZE) { 2834d949f91Sopenharmony_ci return nullptr; 2844d949f91Sopenharmony_ci } 2854d949f91Sopenharmony_ci 2864d949f91Sopenharmony_ci void *buffer = malloc(size); 2874d949f91Sopenharmony_ci if (buffer == nullptr) { 2884d949f91Sopenharmony_ci return nullptr; 2894d949f91Sopenharmony_ci } 2904d949f91Sopenharmony_ci 2914d949f91Sopenharmony_ci std::shared_ptr<void> bufferPtr(buffer, [](void *buffer) { 2924d949f91Sopenharmony_ci if (buffer != nullptr) { 2934d949f91Sopenharmony_ci free(buffer); 2944d949f91Sopenharmony_ci } 2954d949f91Sopenharmony_ci }); 2964d949f91Sopenharmony_ci return bufferPtr; 2974d949f91Sopenharmony_ci} 2984d949f91Sopenharmony_ci 2994d949f91Sopenharmony_ciFormatConverterInfo CreateConverterInfo(IEffectFormat format, void *addr, uint32_t rowStride) 3004d949f91Sopenharmony_ci{ 3014d949f91Sopenharmony_ci return { 3024d949f91Sopenharmony_ci .bufferInfo = { 3034d949f91Sopenharmony_ci .width_ = WIDTH, 3044d949f91Sopenharmony_ci .height_ = HEIGHT, 3054d949f91Sopenharmony_ci .len_ = FormatHelper::CalculateSize(WIDTH, HEIGHT, format), 3064d949f91Sopenharmony_ci .formatType_ = format, 3074d949f91Sopenharmony_ci .rowStride_ = rowStride, 3084d949f91Sopenharmony_ci }, 3094d949f91Sopenharmony_ci .buffer = addr, 3104d949f91Sopenharmony_ci }; 3114d949f91Sopenharmony_ci} 3124d949f91Sopenharmony_ci 3134d949f91Sopenharmony_ciHWTEST_F(TestUtils, FormatHelper002, TestSize.Level1) 3144d949f91Sopenharmony_ci{ 3154d949f91Sopenharmony_ci std::unordered_set<IEffectFormat> formats = FormatHelper::GetAllSupportedFormats(); 3164d949f91Sopenharmony_ci ASSERT_NE(formats.size(), 0); 3174d949f91Sopenharmony_ci 3184d949f91Sopenharmony_ci ASSERT_TRUE(FormatHelper::IsSupportConvert(IEffectFormat::RGBA8888, IEffectFormat::YUVNV21)); 3194d949f91Sopenharmony_ci 3204d949f91Sopenharmony_ci std::shared_ptr<void> rgbaBuffer = AllocBuffer(FormatHelper::CalculateSize(WIDTH, HEIGHT, IEffectFormat::RGBA8888)); 3214d949f91Sopenharmony_ci FormatConverterInfo rgbaConverterInfo = CreateConverterInfo(IEffectFormat::RGBA8888, rgbaBuffer.get(), 3224d949f91Sopenharmony_ci RGBA_BYTES_PER_PIXEL * WIDTH); 3234d949f91Sopenharmony_ci std::shared_ptr<void> nv12Buffer = AllocBuffer(FormatHelper::CalculateSize(WIDTH, HEIGHT, IEffectFormat::YUVNV12)); 3244d949f91Sopenharmony_ci FormatConverterInfo nv12ConverterInfo = CreateConverterInfo(IEffectFormat::YUVNV12, nv12Buffer.get(), WIDTH); 3254d949f91Sopenharmony_ci std::shared_ptr<void> nv21Buffer = AllocBuffer(FormatHelper::CalculateSize(WIDTH, HEIGHT, IEffectFormat::YUVNV21)); 3264d949f91Sopenharmony_ci FormatConverterInfo nv21ConverterInfo = CreateConverterInfo(IEffectFormat::YUVNV21, nv21Buffer.get(), WIDTH); 3274d949f91Sopenharmony_ci 3284d949f91Sopenharmony_ci ErrorCode res = FormatHelper::ConvertFormat(rgbaConverterInfo, nv12ConverterInfo); 3294d949f91Sopenharmony_ci ASSERT_EQ(res, ErrorCode::SUCCESS); 3304d949f91Sopenharmony_ci 3314d949f91Sopenharmony_ci res = FormatHelper::ConvertFormat(rgbaConverterInfo, nv21ConverterInfo); 3324d949f91Sopenharmony_ci ASSERT_EQ(res, ErrorCode::SUCCESS); 3334d949f91Sopenharmony_ci 3344d949f91Sopenharmony_ci res = FormatHelper::ConvertFormat(nv12ConverterInfo, rgbaConverterInfo); 3354d949f91Sopenharmony_ci ASSERT_EQ(res, ErrorCode::SUCCESS); 3364d949f91Sopenharmony_ci 3374d949f91Sopenharmony_ci res = FormatHelper::ConvertFormat(nv21ConverterInfo, rgbaConverterInfo); 3384d949f91Sopenharmony_ci ASSERT_EQ(res, ErrorCode::SUCCESS); 3394d949f91Sopenharmony_ci 3404d949f91Sopenharmony_ci res = FormatHelper::ConvertFormat(nv12ConverterInfo, nv21ConverterInfo); 3414d949f91Sopenharmony_ci ASSERT_NE(res, ErrorCode::SUCCESS); 3424d949f91Sopenharmony_ci} 3434d949f91Sopenharmony_ci 3444d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtils001, TestSize.Level1) { 3454d949f91Sopenharmony_ci ImageEffect_Format ohFormatType = ImageEffect_Format::EFFECT_PIXEL_FORMAT_RGBA8888; 3464d949f91Sopenharmony_ci IEffectFormat formatType; 3474d949f91Sopenharmony_ci std::shared_ptr<NativeCommonUtils> nativeCommonUtils = std::make_shared<NativeCommonUtils>(); 3484d949f91Sopenharmony_ci nativeCommonUtils->SwitchToFormatType(ohFormatType, formatType); 3494d949f91Sopenharmony_ci ASSERT_EQ(formatType, IEffectFormat::RGBA8888); 3504d949f91Sopenharmony_ci 3514d949f91Sopenharmony_ci ohFormatType = ImageEffect_Format::EFFECT_PIXEL_FORMAT_UNKNOWN; 3524d949f91Sopenharmony_ci nativeCommonUtils->SwitchToFormatType(ohFormatType, formatType); 3534d949f91Sopenharmony_ci ASSERT_EQ(formatType, IEffectFormat::DEFAULT); 3544d949f91Sopenharmony_ci} 3554d949f91Sopenharmony_ci 3564d949f91Sopenharmony_ciHWTEST_F(TestUtils, ErrorCode001, TestSize.Level1) { 3574d949f91Sopenharmony_ci ErrorCode code = ErrorCode::ERR_PERMISSION_DENIED; 3584d949f91Sopenharmony_ci std::string expected = "ERROR_PERMISSION_DENIED"; 3594d949f91Sopenharmony_ci std::string actual = GetErrorName(code); 3604d949f91Sopenharmony_ci ASSERT_EQ(expected, actual); 3614d949f91Sopenharmony_ci 3624d949f91Sopenharmony_ci code = ErrorCode::ERR_INPUT_NULL; 3634d949f91Sopenharmony_ci expected = "Unknow error type"; 3644d949f91Sopenharmony_ci actual = GetErrorName(code); 3654d949f91Sopenharmony_ci ASSERT_EQ(expected, actual); 3664d949f91Sopenharmony_ci} 3674d949f91Sopenharmony_ci 3684d949f91Sopenharmony_ciHWTEST_F(TestUtils, MemcpyHelperCopyData001, TestSize.Level1) 3694d949f91Sopenharmony_ci{ 3704d949f91Sopenharmony_ci MemoryData *src = new MemoryData(); 3714d949f91Sopenharmony_ci MemoryData *dst = src; 3724d949f91Sopenharmony_ci MemcpyHelper::CopyData(src, dst); 3734d949f91Sopenharmony_ci EXPECT_EQ(src, dst); 3744d949f91Sopenharmony_ci 3754d949f91Sopenharmony_ci dst = new MemoryData(); 3764d949f91Sopenharmony_ci MemcpyHelper::CopyData(src, dst); 3774d949f91Sopenharmony_ci EXPECT_NE(src, dst); 3784d949f91Sopenharmony_ci 3794d949f91Sopenharmony_ci delete src; 3804d949f91Sopenharmony_ci delete dst; 3814d949f91Sopenharmony_ci} 3824d949f91Sopenharmony_ci 3834d949f91Sopenharmony_ciHWTEST_F(TestUtils, MemcpyHelperCopyData002, TestSize.Level1) 3844d949f91Sopenharmony_ci{ 3854d949f91Sopenharmony_ci std::shared_ptr<BufferInfo> bufferInfo = std::make_unique<BufferInfo>(); 3864d949f91Sopenharmony_ci void *add = nullptr; 3874d949f91Sopenharmony_ci std::shared_ptr<ExtraInfo> extraInfo = std::make_unique<ExtraInfo>(); 3884d949f91Sopenharmony_ci std::shared_ptr<EffectBuffer> src = std::make_unique<EffectBuffer>(bufferInfo, add, extraInfo); 3894d949f91Sopenharmony_ci std::shared_ptr<EffectBuffer> dst = src; 3904d949f91Sopenharmony_ci 3914d949f91Sopenharmony_ci MemcpyHelper::CopyData(src.get(), dst.get()); 3924d949f91Sopenharmony_ci EXPECT_EQ(src.get(), dst.get()); 3934d949f91Sopenharmony_ci} 3944d949f91Sopenharmony_ci 3954d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsSwitchToOHEffectInfo001, TestSize.Level1) 3964d949f91Sopenharmony_ci{ 3974d949f91Sopenharmony_ci EffectInfo effectInfo; 3984d949f91Sopenharmony_ci std::shared_ptr<OH_EffectFilterInfo> ohFilterInfo = std::make_shared<OH_EffectFilterInfo>(); 3994d949f91Sopenharmony_ci std::vector<IPType> ipType; 4004d949f91Sopenharmony_ci ipType.emplace_back(IPType::DEFAULT); 4014d949f91Sopenharmony_ci effectInfo.formats_.emplace(IEffectFormat::DEFAULT, ipType); 4024d949f91Sopenharmony_ci 4034d949f91Sopenharmony_ci NativeCommonUtils::SwitchToOHEffectInfo(&effectInfo, ohFilterInfo.get()); 4044d949f91Sopenharmony_ci ASSERT_NE(ohFilterInfo->supportedBufferTypes.size(), 1); 4054d949f91Sopenharmony_ci ASSERT_EQ(ohFilterInfo->supportedFormats.size(), 1); 4064d949f91Sopenharmony_ci ASSERT_EQ(*(ohFilterInfo->supportedFormats.begin()), ImageEffect_Format::EFFECT_PIXEL_FORMAT_UNKNOWN); 4074d949f91Sopenharmony_ci} 4084d949f91Sopenharmony_ci 4094d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsGetSupportedFormats001, TestSize.Level1) 4104d949f91Sopenharmony_ci{ 4114d949f91Sopenharmony_ci std::shared_ptr<OH_EffectFilterInfo> ohFilterInfo = nullptr; 4124d949f91Sopenharmony_ci uint32_t result = NativeCommonUtils::GetSupportedFormats(ohFilterInfo.get()); 4134d949f91Sopenharmony_ci ASSERT_EQ(result, 0); 4144d949f91Sopenharmony_ci 4154d949f91Sopenharmony_ci ohFilterInfo = std::make_shared<OH_EffectFilterInfo>(); 4164d949f91Sopenharmony_ci ohFilterInfo->supportedFormats.emplace(ImageEffect_Format::EFFECT_PIXEL_FORMAT_YCRCB_P010); 4174d949f91Sopenharmony_ci result = NativeCommonUtils::GetSupportedFormats(ohFilterInfo.get()); 4184d949f91Sopenharmony_ci ASSERT_EQ(result, 0); 4194d949f91Sopenharmony_ci} 4204d949f91Sopenharmony_ci 4214d949f91Sopenharmony_ci 4224d949f91Sopenharmony_ciHWTEST_F(TestUtils, NativeCommonUtilsConverStartResult001, TestSize.Level1) 4234d949f91Sopenharmony_ci{ 4244d949f91Sopenharmony_ci ErrorCode errorCode = ErrorCode::ERR_ALLOC_MEMORY_FAIL; 4254d949f91Sopenharmony_ci ImageEffect_ErrorCode result = NativeCommonUtils::ConvertStartResult(errorCode); 4264d949f91Sopenharmony_ci ASSERT_EQ(result, ImageEffect_ErrorCode::EFFECT_ALLOCATE_MEMORY_FAILED); 4274d949f91Sopenharmony_ci} 4284d949f91Sopenharmony_ci} 4294d949f91Sopenharmony_ci} 4304d949f91Sopenharmony_ci} 4314d949f91Sopenharmony_ci}