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}