#ifdef TESTS_BUILD #include "../../extern/catch.hpp" #include "../../src/Battling/Models/Battle.hpp" #include "../../src/Battling/Models/BattleParty.hpp" #include "../../src/Battling/Models/CreateCreature.hpp" #include "../../src/Battling/TurnChoices/AttackTurnChoice.hpp" #include "../../src/Battling/TurnChoices/PassTurnChoice.hpp" #include "../TestLibrary/TestLibrary.hpp" using namespace CreatureLib; using namespace Battling; TEST_CASE("Create Party", "[Integrations]") { auto library = TestLibrary::Get(); auto c1 = CreateCreature(library, "testSpecies1", 50).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party1{c1}; auto battleParty = BattleParty(&party1, {CreatureIndex(0, 0)}); REQUIRE(battleParty.GetParty()->GetAtIndex(0) == c1); } TEST_CASE("Create Battle", "[Integrations]") { auto library = TestLibrary::Get(); auto c1 = CreateCreature(library, "testSpecies1", 50).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party1{c1}; auto battleParty1 = BattleParty(&party1, {CreatureIndex(0, 0)}); auto c2 = CreateCreature(library, "testSpecies1", 50).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party2{c2}; auto battleParty2 = BattleParty(&party2, {CreatureIndex(1, 0)}); auto battle = Battle(library, {battleParty1, battleParty2}); } TEST_CASE("Use damaging move", "[Integrations]") { auto library = TestLibrary::Get(); auto c1 = CreateCreature(library, "testSpecies1", 50).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party1{c1}; auto battleParty1 = BattleParty(&party1, {CreatureIndex(0, 0)}); auto c2 = CreateCreature(library, "testSpecies1", 50).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party2{c2}; auto battleParty2 = BattleParty(&party2, {CreatureIndex(1, 0)}); auto battle = Battle(library, {battleParty1, battleParty2}); battle.SwitchCreature(0, 0, c1); battle.SwitchCreature(1, 0, c2); battle.TrySetChoice(new AttackTurnChoice(c1, c1->GetAttacks()[0], CreatureIndex(1, 0))); battle.TrySetChoice(new PassTurnChoice(c2)); REQUIRE(c2->GetCurrentHealth() < c2->GetBoostedStat(Statistic::Health)); } TEST_CASE("Finish battle when all battle of one side have fainted", "[Integrations]") { auto library = TestLibrary::Get(); auto c1 = CreateCreature(library, "testSpecies1", 50).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party1{c1}; auto battleParty1 = BattleParty(&party1, {CreatureIndex(0, 0)}); auto c2 = CreateCreature(library, "testSpecies1", 50).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party2{c2}; auto battleParty2 = BattleParty(&party2, {CreatureIndex(1, 0)}); auto battle = Battle(library, {battleParty1, battleParty2}); REQUIRE_FALSE(battle.HasEnded()); battle.SwitchCreature(0, 0, c1); battle.SwitchCreature(1, 0, c2); REQUIRE_FALSE(battle.HasEnded()); battle.TrySetChoice(new AttackTurnChoice(c1, c1->GetAttacks()[0], CreatureIndex(1, 0))); battle.TrySetChoice(new PassTurnChoice(c2)); REQUIRE_FALSE(battle.HasEnded()); REQUIRE(c2->GetCurrentHealth() < c2->GetBoostedStat(Statistic::Health)); c2->Damage(c2->GetCurrentHealth(), DamageSource::AttackDamage); REQUIRE(battle.HasEnded()); REQUIRE(battle.GetResult() == 0); } TEST_CASE("When creature is dealt enough damage, faint it and mark battle as ended", "[Integrations]") { auto library = TestLibrary::Get(); auto c1 = CreateCreature(library, "testSpecies1", 100).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party1{c1}; auto battleParty1 = BattleParty(&party1, {CreatureIndex(0, 0)}); auto c2 = CreateCreature(library, "testSpecies1", 1).WithAttack("standard", AttackLearnMethod::Unknown)->Create(); CreatureParty party2{c2}; auto battleParty2 = BattleParty(&party2, {CreatureIndex(1, 0)}); auto battle = Battle(library, {battleParty1, battleParty2}); REQUIRE_FALSE(battle.HasEnded()); battle.SwitchCreature(0, 0, c1); battle.SwitchCreature(1, 0, c2); REQUIRE_FALSE(battle.HasEnded()); battle.TrySetChoice(new AttackTurnChoice(c1, c1->GetAttacks()[0], CreatureIndex(1, 0))); battle.TrySetChoice(new PassTurnChoice(c2)); REQUIRE(battle.HasEnded()); REQUIRE(battle.GetResult() == 0); } #endif