44858921创建于 5月29日历史提交
/*
 * Copyright (c) 2024 Huawei Device 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 "animate_impl.h"
#include "core/interfaces/arkoala/arkoala_api.h"
#include "error_code.h"
#include "event_converter.h"
#include "gtest/gtest.h"
#include "native_animate.h"
#include "native_interface.h"
#include "native_node.h"
#include "node_extened.h"
#include "node_model.h"

using namespace testing;
using namespace testing::ext;
using namespace OHOS::Ace::AnimateModel;

class AnimateImplTest : public testing::Test {
public:
    static void SetUpTestCase() {};
    static void TearDownTestCase() {};
};

float InterpolateCallback(float fraction, void* userData)
{
    return fraction;
}

void AnimateCompleteCallback(void* userData) {}

/**
 * @tc.name: AnimateImplTest001
 * @tc.desc: Test InitCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest001, TestSize.Level1)
{
    ArkUI_CurveHandle curve = InitCurve(ArkUI_AnimationCurve::ARKUI_CURVE_EASE);
    ASSERT_EQ(curve, nullptr);
    
    DisposeCurve(curve);
}

/**
 * @tc.name: AnimateImplTest002
 * @tc.desc: Test CubicBezierCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest002, TestSize.Level1)
{
    ArkUI_CurveHandle curve = CubicBezierCurve(0.0f, 0.0f, 0.0f, 0.0f);
    ASSERT_EQ(curve, nullptr);
}

/**
 * @tc.name: AnimateImplTest003
 * @tc.desc: Test SpringCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest003, TestSize.Level1)
{
    ArkUI_CurveHandle curve = SpringCurve(0.0f, 0.0f, 0.0f, 0.0f);
    ASSERT_EQ(curve, nullptr);
}

/**
 * @tc.name: AnimateImplTest004
 * @tc.desc: Test SpringMotion function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest004, TestSize.Level1)
{
    ArkUI_CurveHandle curve = SpringMotion(0.0f, 0.0f, 0.0f);
    ASSERT_EQ(curve, nullptr);
}

/**
 * @tc.name: AnimateImplTest005
 * @tc.desc: Test InterpolatingSpring function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest005, TestSize.Level1)
{
    ArkUI_CurveHandle curve = InterpolatingSpring(0.0f, 0.0f, 0.0f, 0.0f);
    ASSERT_EQ(curve, nullptr);
}

/**
 * @tc.name: AnimateImplTest006
 * @tc.desc: Test ResponsiveSpringMotion function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest006, TestSize.Level1)
{
    ArkUI_CurveHandle curve = ResponsiveSpringMotion(0.0f, 0.0f, 0.0f);
    ASSERT_EQ(curve, nullptr);
}

/**
 * @tc.name: AnimateImplTest007
 * @tc.desc: Test CustomCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest007, TestSize.Level1)
{
    ArkUI_CurveHandle curve = CustomCurve(nullptr, InterpolateCallback);
    ASSERT_EQ(curve, nullptr);
}

/**
 * @tc.name: AnimateImplTest008
 * @tc.desc: Test InitCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest008, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = InitCurve(ArkUI_AnimationCurve::ARKUI_CURVE_EASE);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest009
 * @tc.desc: Test StepsCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest009, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = StepsCurve(0, true);
    ASSERT_EQ(curve, nullptr);
}

/**
 * @tc.name: AnimateImplTest010
 * @tc.desc: Test StepsCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest010, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = StepsCurve(1, true);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest011
 * @tc.desc: Test CubicBezierCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest011, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = CubicBezierCurve(0.0f, 0.0f, 0.0f, 0.0f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest012
 * @tc.desc: Test SpringCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest012, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = SpringCurve(0.0f, 0.0f, 0.0f, 0.0f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest013
 * @tc.desc: Test SpringCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest013, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = SpringCurve(0.5f, 0.5f, 0.5f, 0.5f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest014
 * @tc.desc: Test SpringMotion function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest014, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = SpringMotion(0.5f, 0.5f, 0.5f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest015
 * @tc.desc: Test SpringMotion function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest015, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = SpringMotion(-1.0f, -1.0f, -1.0f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest016
 * @tc.desc: Test ResponsiveSpringMotion function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest016, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = ResponsiveSpringMotion(-1.0f, -1.0f, -1.0f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest017
 * @tc.desc: Test ResponsiveSpringMotion function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest017, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = ResponsiveSpringMotion(0.5f, 0.5f, 0.5f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest018
 * @tc.desc: Test InterpolatingSpring function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest018, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = InterpolatingSpring(0.5f, 0.5f, 0.5f, 0.5f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest019
 * @tc.desc: Test InterpolatingSpring function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest019, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = InterpolatingSpring(0.0f, 0.0f, 0.0f, 0.0f);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest020
 * @tc.desc: Test CustomCurve function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest020, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_CurveHandle curve = CustomCurve(nullptr, InterpolateCallback);
    ASSERT_NE(curve, nullptr);

    DisposeCurve(curve);
    curve = nullptr;
}

/**
 * @tc.name: AnimateImplTest021
 * @tc.desc: Test CreateAnimator function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest021, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest022
 * @tc.desc: Test CreateAnimator function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest022, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(nullptr, nullptr);
    ASSERT_EQ(animatorHandle, nullptr);

    DisposeAnimator(animatorHandle);
}

/**
 * @tc.name: AnimateImplTest023
 * @tc.desc: Test AnimatorReset function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest023, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = AnimatorReset(nullptr, nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest024
 * @tc.desc: Test AnimatorReset function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest024, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);
    ArkUIAnimatorHandle animator = new ArkUIAnimator();
    animatorHandle->animator = animator;
    int32_t ret = AnimatorReset(animatorHandle, option);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest025
 * @tc.desc: Test AnimatorReset function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest025, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    struct ArkUI_Keyframe keyframe = {0.0f, 0.0f, nullptr};
    option->keyframes.push_back(keyframe);
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);
    ArkUIAnimatorHandle animator = new ArkUIAnimator();
    animatorHandle->animator = animator;
    int32_t ret = AnimatorReset(animatorHandle, option);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest026
 * @tc.desc: Test AnimatorPlay function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest026, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = AnimatorPlay(nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest027
 * @tc.desc: Test AnimatorPlay function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest027, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);
    ArkUIAnimatorHandle animator = new ArkUIAnimator();
    animatorHandle->animator = animator;
    int32_t ret = AnimatorPlay(animatorHandle);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest028
 * @tc.desc: Test AnimatorFinish function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest028, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = AnimatorFinish(nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest029
 * @tc.desc: Test AnimatorFinish function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest029, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);
    ArkUIAnimatorHandle animator = new ArkUIAnimator();
    animatorHandle->animator = animator;
    int32_t ret = AnimatorFinish(animatorHandle);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest030
 * @tc.desc: Test AnimatorPause function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest030, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = AnimatorPause(nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest031
 * @tc.desc: Test AnimatorPause function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest031, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);
    ArkUIAnimatorHandle animator = new ArkUIAnimator();
    animatorHandle->animator = animator;
    int32_t ret = AnimatorPause(animatorHandle);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest032
 * @tc.desc: Test AnimatorCancel function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest032, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = AnimatorCancel(nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest033
 * @tc.desc: Test AnimatorCancel function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest033, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);
    ArkUIAnimatorHandle animator = new ArkUIAnimator();
    animatorHandle->animator = animator;
    int32_t ret = AnimatorCancel(animatorHandle);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest034
 * @tc.desc: Test AnimatorReverse function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest034, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = AnimatorReverse(nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest035
 * @tc.desc: Test AnimatorReverse function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest035, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimatorOption* option = new ArkUI_AnimatorOption();
    ArkUI_AnimatorHandle animatorHandle = CreateAnimator(&context, option);
    ASSERT_NE(animatorHandle, nullptr);
    ArkUIAnimatorHandle animator = new ArkUIAnimator();
    animatorHandle->animator = animator;
    int32_t ret = AnimatorReverse(animatorHandle);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);

    DisposeAnimator(animatorHandle);
    animatorHandle = nullptr;
    delete option;
}

/**
 * @tc.name: AnimateImplTest036
 * @tc.desc: Test KeyframeAnimateTo function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest036, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = KeyframeAnimateTo(nullptr, nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest037
 * @tc.desc: Test KeyframeAnimateTo function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest037, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_KeyframeAnimateOption* option = new ArkUI_KeyframeAnimateOption();
    struct ArkUI_KeyframeState keyframe = {0, nullptr, nullptr, nullptr};
    option->keyframes.push_back(keyframe);
    int32_t ret = KeyframeAnimateTo(&context, option);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);
    delete option;
}

/**
 * @tc.name: AnimateImplTest038
 * @tc.desc: Test AnimateTo function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest038, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    int32_t ret = AnimateTo(nullptr, nullptr, nullptr, nullptr);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
}

/**
 * @tc.name: AnimateImplTest039
 * @tc.desc: Test AnimateTo function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest039, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimateOption* option = new ArkUI_AnimateOption();
    ArkUI_ContextCallback* update = new ArkUI_ContextCallback();
    update->callback = AnimateCompleteCallback;
    ArkUI_AnimateCompleteCallback* complete = new ArkUI_AnimateCompleteCallback();
    int32_t ret = AnimateTo(&context, option, update, complete);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);
    delete option;
    delete update;
    delete complete;
}

/**
 * @tc.name: AnimateImplTest040
 * @tc.desc: Test AnimateTo function.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimateImplTest040, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    struct ArkUI_Context context= {1};
    ArkUI_AnimateOption* option = new ArkUI_AnimateOption();
    ArkUI_CurveHandle curve = new ArkUI_Curve();
    ArkUI_ExpectedFrameRateRange* expectedFrameRateRange = new ArkUI_ExpectedFrameRateRange();
    option->iCurve = curve;
    option->expectedFrameRateRange = expectedFrameRateRange;
    ArkUI_ContextCallback* update = new ArkUI_ContextCallback();
    update->callback = AnimateCompleteCallback;
    ArkUI_AnimateCompleteCallback* complete = new ArkUI_AnimateCompleteCallback();
    complete->type = ARKUI_FINISH_CALLBACK_LOGICALLY;
    complete->callback = AnimateCompleteCallback;
    void* userData = malloc(100);
    complete->userData = userData;
    int32_t ret = AnimateTo(&context, option, update, complete);
    ASSERT_EQ(ret, OHOS::Ace::ERROR_CODE_NO_ERROR);
    free(userData);
    delete option;
    delete curve;
    delete update;
    delete complete;
}

/**
 * @tc.name: AnimatorPlay_NullHandle_001
 * @tc.desc: Test AnimatorPlay with null handle.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimatorPlay_NullHandle_001, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    auto result = AnimatorPlay(nullptr);
    EXPECT_EQ(result, OHOS::Ace::ERROR_CODE_PARAM_INVALID);

    const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
    ASSERT_NE(errorMessage, nullptr);
    std::string errorMessageStr(errorMessage);
    EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(result)), std::string::npos);
    EXPECT_NE(errorMessageStr.find("functionName: AnimatorPlay"), std::string::npos);
    EXPECT_NE(errorMessageStr.find("errorMessage: animatorHandle is null"),
        std::string::npos);
}

/**
 * @tc.name: AnimatorFinish_NullHandle_001
 * @tc.desc: Test AnimatorFinish with null handle.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimatorFinish_NullHandle_001, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    auto result = AnimatorFinish(nullptr);
    EXPECT_EQ(result, OHOS::Ace::ERROR_CODE_PARAM_INVALID);

    const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
    ASSERT_NE(errorMessage, nullptr);
    std::string errorMessageStr(errorMessage);
    EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(result)), std::string::npos);
    EXPECT_NE(errorMessageStr.find("functionName: AnimatorFinish"), std::string::npos);
    EXPECT_NE(errorMessageStr.find("errorMessage: animatorHandle is null"),
        std::string::npos);
}

/**
 * @tc.name: AnimatorPause_NullHandle_001
 * @tc.desc: Test AnimatorPause with null handle.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimatorPause_NullHandle_001, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    auto result = AnimatorPause(nullptr);
    EXPECT_EQ(result, OHOS::Ace::ERROR_CODE_PARAM_INVALID);

    const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
    ASSERT_NE(errorMessage, nullptr);
    std::string errorMessageStr(errorMessage);
    EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(result)), std::string::npos);
    EXPECT_NE(errorMessageStr.find("functionName: AnimatorPause"), std::string::npos);
    EXPECT_NE(errorMessageStr.find("errorMessage: animatorHandle is null"),
        std::string::npos);
}

/**
 * @tc.name: AnimatorCancel_NullHandle_001
 * @tc.desc: Test AnimatorCancel with null handle.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimatorCancel_NullHandle_001, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    auto result = AnimatorCancel(nullptr);
    EXPECT_EQ(result, OHOS::Ace::ERROR_CODE_PARAM_INVALID);

    const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
    ASSERT_NE(errorMessage, nullptr);
    std::string errorMessageStr(errorMessage);
    EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(result)), std::string::npos);
    EXPECT_NE(errorMessageStr.find("functionName: AnimatorCancel"), std::string::npos);
    EXPECT_NE(errorMessageStr.find("errorMessage: animatorHandle is null"),
        std::string::npos);
}

/**
 * @tc.name: AnimatorReverse_NullHandle_001
 * @tc.desc: Test AnimatorReverse with null handle.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimatorReverse_NullHandle_001, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    auto result = AnimatorReverse(nullptr);
    EXPECT_EQ(result, OHOS::Ace::ERROR_CODE_PARAM_INVALID);

    const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
    ASSERT_NE(errorMessage, nullptr);
    std::string errorMessageStr(errorMessage);
    EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(result)), std::string::npos);
    EXPECT_NE(errorMessageStr.find("functionName: AnimatorReverse"), std::string::npos);
    EXPECT_NE(errorMessageStr.find("errorMessage: animatorHandle is null"),
        std::string::npos);
}

/**
 * @tc.name: AnimatorReset_NullParams_001
 * @tc.desc: Test AnimatorReset with null parameters.
 * @tc.type: FUNC
 */
HWTEST_F(AnimateImplTest, AnimatorReset_NullParams_001, TestSize.Level1)
{
    ASSERT_TRUE(OHOS::Ace::NodeModel::InitialFullImpl());
    auto result = AnimatorReset(nullptr, nullptr);
    EXPECT_EQ(result, OHOS::Ace::ERROR_CODE_PARAM_INVALID);

    const char* errorMessage = OH_ArkUI_NativeModule_GetErrorMessage();
    ASSERT_NE(errorMessage, nullptr);
    std::string errorMessageStr(errorMessage);
    EXPECT_NE(errorMessageStr.find(std::string("errorCode: ") + std::to_string(result)), std::string::npos);
    EXPECT_NE(errorMessageStr.find("functionName: AnimatorReset"), std::string::npos);
    EXPECT_NE(errorMessageStr.find("errorMessage: animatorHandle or option is null"), std::string::npos);
}