Gen7Tests/src/ScriptTests/Moves/Absorb.cpp

58 lines
2.4 KiB
C++

#include <CreatureLib/Battling/Models/ExecutingAttack.hpp>
#include <PkmnLib/Battling/Pokemon/CreatePokemon.hpp>
#include "../../../extern/catch.hpp"
#include "../../Library.hpp"
TEST_CASE("Absorb - Heals on use", "[moves]") {
auto library = Library::GetLibrary();
auto userMon = PkmnLib::Battling::CreatePokemon(library, "charizard", 50)
.LearnMove("absorb", CreatureLib::Battling::AttackLearnMethod::Unknown)
->Build();
userMon->Damage(50, CreatureLib::Battling::DamageSource::AttackDamage);
auto targetMon = PkmnLib::Battling::CreatePokemon(library, "venusaur", 50).Build();
auto executingMove =
new CreatureLib::Battling::ExecutingAttack({targetMon}, 1, userMon, userMon->GetMoves()[0], nullptr);
executingMove->GetAttackDataForTarget(targetMon)->GetHit(0)->SetDamage(50);
auto script = library->LoadScript(CreatureLib::Battling::ScriptResolver::ScriptCategory::Attack, "Absorb");
REQUIRE(script != nullptr);
try{
script->OnSecondaryEffect(executingMove, targetMon, 0);
}
catch (const CreatureException& e){
FAIL(e.what());
}
CHECK(userMon->GetCurrentHealth() == userMon->GetMaxHealth() - 25);
delete script;
delete executingMove;
delete targetMon;
delete userMon;
}
TEST_CASE("Absorb - Heals more with big root", "[moves]") {
auto library = Library::GetLibrary();
auto userMon = PkmnLib::Battling::CreatePokemon(library, "charizard", 50)
.LearnMove("absorb", CreatureLib::Battling::AttackLearnMethod::Unknown)
->WithHeldItem("big_root")
->Build();
userMon->Damage(50, CreatureLib::Battling::DamageSource::AttackDamage);
auto targetMon = PkmnLib::Battling::CreatePokemon(library, "venusaur", 50).Build();
auto executingMove =
new CreatureLib::Battling::ExecutingAttack({targetMon}, 1, userMon, userMon->GetMoves()[0], nullptr);
executingMove->GetAttackDataForTarget(targetMon)->GetHit(0)->SetDamage(50);
auto script = library->LoadScript(CreatureLib::Battling::ScriptResolver::ScriptCategory::Attack, "Absorb");
REQUIRE(script != nullptr);
try{
script->OnSecondaryEffect(executingMove, targetMon, 0);
}
catch (const CreatureException& e){
FAIL(e.what());
}
CHECK(userMon->GetCurrentHealth() == userMon->GetMaxHealth() - 18);
delete script;
delete executingMove;
delete targetMon;
delete userMon;
}