Fixes memory leak in struggle unit test, adds test for Ally Switch.
This commit is contained in:
parent
d44ba77795
commit
4b401e59d6
|
@ -0,0 +1,60 @@
|
||||||
|
#include <CreatureLib/Battling/Models/ExecutingAttack.hpp>
|
||||||
|
#include <PkmnLib/Battling/Battle/Battle.hpp>
|
||||||
|
#include <PkmnLib/Battling/Pokemon/CreatePokemon.hpp>
|
||||||
|
#include "../../../../extern/doctest.hpp"
|
||||||
|
#include "../../Macros/MoveMacros.hpp"
|
||||||
|
|
||||||
|
TEST_CASE("Ally Switch - Swaps two mons around") {
|
||||||
|
auto library = Library::GetLibrary();
|
||||||
|
auto userMon = PkmnLib::Battling::CreatePokemon(library, "charizard"_cnc, 50)
|
||||||
|
.LearnMove("ally_switch"_cnc, CreatureLib::Battling::AttackLearnMethod::Unknown)
|
||||||
|
.Build();
|
||||||
|
auto userMon2 = PkmnLib::Battling::CreatePokemon(library, "blastoise"_cnc, 50).Build();
|
||||||
|
auto foeMon = PkmnLib::Battling::CreatePokemon(library, "venusaur"_cnc, 50).Build();
|
||||||
|
auto foeMon2 = PkmnLib::Battling::CreatePokemon(library, "pidgey"_cnc, 50).Build();
|
||||||
|
|
||||||
|
auto userParty = CreatureLib::Battling::CreatureParty({userMon, userMon2});
|
||||||
|
auto targetParty = CreatureLib::Battling::CreatureParty({foeMon, foeMon2});
|
||||||
|
auto battle = new PkmnLib::Battling::Battle(
|
||||||
|
library,
|
||||||
|
{
|
||||||
|
new CreatureLib::Battling::BattleParty(
|
||||||
|
&userParty, {CreatureLib::Battling::CreatureIndex(0, 0), CreatureLib::Battling::CreatureIndex(0, 1)}),
|
||||||
|
new CreatureLib::Battling::BattleParty(
|
||||||
|
&targetParty, {CreatureLib::Battling::CreatureIndex(1, 0), CreatureLib::Battling::CreatureIndex(1, 1)}),
|
||||||
|
},
|
||||||
|
false, 2, 2);
|
||||||
|
|
||||||
|
battle->SwitchCreature(0, 0, userMon);
|
||||||
|
battle->SwitchCreature(0, 1, userMon2);
|
||||||
|
battle->SwitchCreature(1, 0, foeMon);
|
||||||
|
battle->SwitchCreature(1, 1, foeMon2);
|
||||||
|
|
||||||
|
auto moveData = library->GetMoveLibrary()->Get("ally_switch"_cnc);
|
||||||
|
REQUIRE(moveData->HasSecondaryEffect());
|
||||||
|
auto& effect = moveData->GetSecondaryEffect();
|
||||||
|
auto script = library->LoadScript(ScriptCategory::Attack, effect->GetEffectName());
|
||||||
|
REQUIRE(script != nullptr);
|
||||||
|
script->OnInitialize(effect->GetParameters());
|
||||||
|
|
||||||
|
auto index1 = battle->GetSides()[0]->GetCreatureIndex(userMon);
|
||||||
|
auto index2 = battle->GetSides()[0]->GetCreatureIndex(userMon2);
|
||||||
|
CHECK(index1 == 0);
|
||||||
|
CHECK(index2 == 1);
|
||||||
|
CHECK(battle->GetCreature(0, 0).GetValue()->GetSpecies()->GetName() == "charizard"_cnc);
|
||||||
|
CHECK(battle->GetCreature(0, 1).GetValue()->GetSpecies()->GetName() == "blastoise"_cnc);
|
||||||
|
|
||||||
|
auto executingMove = CreatureLib::Battling::ExecutingAttack(
|
||||||
|
ArbUt::List<ArbUt::OptionalBorrowedPtr<CreatureLib::Battling::Creature>>{userMon2}, (uint8_t)1, userMon,
|
||||||
|
userMon->GetMoves()[0], std::unique_ptr<AngelScriptScript::BattleScript>(script));
|
||||||
|
script->OnSecondaryEffect(&executingMove, userMon2, 0);
|
||||||
|
|
||||||
|
index1 = battle->GetSides()[0]->GetCreatureIndex(userMon);
|
||||||
|
index2 = battle->GetSides()[0]->GetCreatureIndex(userMon2);
|
||||||
|
CHECK(index1 == 1);
|
||||||
|
CHECK(index2 == 0);
|
||||||
|
CHECK(battle->GetCreature(0, 0).GetValue()->GetSpecies()->GetName() == "blastoise"_cnc);
|
||||||
|
CHECK(battle->GetCreature(0, 1).GetValue()->GetSpecies()->GetName() == "charizard"_cnc);
|
||||||
|
|
||||||
|
delete battle;
|
||||||
|
}
|
|
@ -21,9 +21,9 @@ TEST_CASE("Struggle - Damages by 1/4th of users max health") {
|
||||||
userMon->SetBattleData(battle, battle->GetSides()[0]);
|
userMon->SetBattleData(battle, battle->GetSides()[0]);
|
||||||
targetMon->SetBattleData(battle, battle->GetSides()[1]);
|
targetMon->SetBattleData(battle, battle->GetSides()[1]);
|
||||||
|
|
||||||
auto& script = ((CreatureLib::Battling::AttackTurnChoice*)library->GetMiscLibrary()->ReplacementAttack(
|
auto move = ((CreatureLib::Battling::AttackTurnChoice*)library->GetMiscLibrary()->ReplacementAttack(
|
||||||
userMon, CreatureLib::Battling::CreatureIndex(1, 0)))
|
userMon, CreatureLib::Battling::CreatureIndex(1, 0)));
|
||||||
->GetAttackScript();
|
auto& script = move->GetAttackScript();
|
||||||
REQUIRE(script != nullptr);
|
REQUIRE(script != nullptr);
|
||||||
|
|
||||||
auto choice = (CreatureLib::Battling::AttackTurnChoice*)library->GetMiscLibrary()->ReplacementAttack(
|
auto choice = (CreatureLib::Battling::AttackTurnChoice*)library->GetMiscLibrary()->ReplacementAttack(
|
||||||
|
@ -37,4 +37,6 @@ TEST_CASE("Struggle - Damages by 1/4th of users max health") {
|
||||||
delete targetParty;
|
delete targetParty;
|
||||||
delete userParty;
|
delete userParty;
|
||||||
delete battle;
|
delete battle;
|
||||||
|
delete move;
|
||||||
|
delete choice;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,8 @@ int main(int argc, char* argv[]) {
|
||||||
args::ValueFlag<std::string> workingDirFlag(parser, "Working Directory", "Which work directory to use.",
|
args::ValueFlag<std::string> workingDirFlag(parser, "Working Directory", "Which work directory to use.",
|
||||||
{"workdir"});
|
{"workdir"});
|
||||||
args::ValueFlag<std::string> _(parser, "Reporters", "List of reporters to use (default is console)",
|
args::ValueFlag<std::string> _(parser, "Reporters", "List of reporters to use (default is console)",
|
||||||
{'r', "reporters"});
|
{'r', "reporters"});
|
||||||
|
args::ValueFlag<std::string> __(parser, "", "", {'t', ""});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
parser.ParseCLI(argc, argv);
|
parser.ParseCLI(argc, argv);
|
||||||
|
|
Loading…
Reference in New Issue