From 4b401e59d6112409e159ece5b6a9ca9658bb9de9 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 28 Mar 2021 16:39:06 +0200 Subject: [PATCH] Fixes memory leak in struggle unit test, adds test for Ally Switch. --- src/ScriptTests/Moves/AMoves/AllySwitch.cpp | 60 +++++++++++++++++++++ src/ScriptTests/Moves/Struggle.cpp | 8 +-- src/main.cpp | 3 +- 3 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 src/ScriptTests/Moves/AMoves/AllySwitch.cpp diff --git a/src/ScriptTests/Moves/AMoves/AllySwitch.cpp b/src/ScriptTests/Moves/AMoves/AllySwitch.cpp new file mode 100644 index 0000000..3d24c76 --- /dev/null +++ b/src/ScriptTests/Moves/AMoves/AllySwitch.cpp @@ -0,0 +1,60 @@ +#include +#include +#include +#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>{userMon2}, (uint8_t)1, userMon, + userMon->GetMoves()[0], std::unique_ptr(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; +} diff --git a/src/ScriptTests/Moves/Struggle.cpp b/src/ScriptTests/Moves/Struggle.cpp index 49f3717..16f1103 100644 --- a/src/ScriptTests/Moves/Struggle.cpp +++ b/src/ScriptTests/Moves/Struggle.cpp @@ -21,9 +21,9 @@ TEST_CASE("Struggle - Damages by 1/4th of users max health") { userMon->SetBattleData(battle, battle->GetSides()[0]); targetMon->SetBattleData(battle, battle->GetSides()[1]); - auto& script = ((CreatureLib::Battling::AttackTurnChoice*)library->GetMiscLibrary()->ReplacementAttack( - userMon, CreatureLib::Battling::CreatureIndex(1, 0))) - ->GetAttackScript(); + auto move = ((CreatureLib::Battling::AttackTurnChoice*)library->GetMiscLibrary()->ReplacementAttack( + userMon, CreatureLib::Battling::CreatureIndex(1, 0))); + auto& script = move->GetAttackScript(); REQUIRE(script != nullptr); 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 userParty; delete battle; + delete move; + delete choice; } diff --git a/src/main.cpp b/src/main.cpp index e123a8b..6341bc9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,7 +30,8 @@ int main(int argc, char* argv[]) { args::ValueFlag workingDirFlag(parser, "Working Directory", "Which work directory to use.", {"workdir"}); args::ValueFlag _(parser, "Reporters", "List of reporters to use (default is console)", - {'r', "reporters"}); + {'r', "reporters"}); + args::ValueFlag __(parser, "", "", {'t', ""}); try { parser.ParseCLI(argc, argv);