diff --git a/tests/test_stop_animation.h b/tests/test_stop_animation.h new file mode 100644 index 0000000..6778032 --- /dev/null +++ b/tests/test_stop_animation.h @@ -0,0 +1,77 @@ +/** + * test_stop_animation.h + * ============================================================================= + * Copyright 2021-2023 Serhii Snitsaruk + * + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + * ============================================================================= + */ + +#ifndef TEST_STOP_ANIMATION_H +#define TEST_STOP_ANIMATION_H + +#include "limbo_test.h" + +#include "modules/limboai/bt/tasks/bt_task.h" +#include "modules/limboai/bt/tasks/scene/bt_stop_animation.h" + +#include "scene/animation/animation_player.h" +#include "scene/main/window.h" +#include "scene/resources/animation.h" +#include "scene/resources/animation_library.h" + +namespace TestStopAnimation { + +TEST_CASE("[SceneTree][LimboAI] BTStopAnimation") { + AnimationPlayer *player = memnew(AnimationPlayer); + SceneTree::get_singleton()->get_root()->add_child(player); + player->set_process_callback(AnimationPlayer::AnimationProcessCallback::ANIMATION_PROCESS_IDLE); + + Ref anim_lib = memnew(AnimationLibrary); + Ref anim = memnew(Animation); + anim->set_name("test"); + anim->set_length(0.1); + anim->set_loop_mode(Animation::LOOP_NONE); + REQUIRE(anim_lib->add_animation("test", anim) == OK); + REQUIRE(player->add_animation_library("", anim_lib) == OK); + REQUIRE(player->has_animation("test")); + + Ref sa = memnew(BTStopAnimation); + Ref player_param = memnew(BBNode); + sa->set_animation_player(player_param); + Node *dummy = memnew(Node); + SceneTree::get_singleton()->get_root()->add_child(dummy); + Ref bb = memnew(Blackboard); + + SUBCASE("When AnimationPlayer doesn't exist") { + player_param->set_saved_value(NodePath("./NotFound")); + ERR_PRINT_OFF; + sa->initialize(dummy, bb); + CHECK(sa->execute(0.01666) == BTTask::FAILURE); + ERR_PRINT_ON; + } + SUBCASE("When AnimationPlayer exists") { + player_param->set_saved_value(player->get_path()); + sa->initialize(dummy, bb); + + SUBCASE("When AnimationPlayer is not playing") { + REQUIRE_FALSE(player->is_playing()); + CHECK(sa->execute(0.01666) == BTTask::SUCCESS); + } + SUBCASE("When AnimationPlayer is playing") { + player->play("test"); + REQUIRE(player->is_playing()); + CHECK(sa->execute(0.01666) == BTTask::SUCCESS); + CHECK_FALSE(player->is_playing()); + } + } + + memdelete(dummy); + memdelete(player); +} + +} //namespace TestStopAnimation + +#endif // TEST_STOP_ANIMATION_H