142 lines
5.7 KiB
C++
142 lines
5.7 KiB
C++
#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);
|
|
}
|
|
|
|
TEST_CASE("When another creature is available on faint, make sure the battle hasn't 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();
|
|
auto c3 = CreateCreature(library, "testSpecies1", 1).WithAttack("standard", AttackLearnMethod::Unknown)->Create();
|
|
CreatureParty party2{c2, c3};
|
|
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());
|
|
|
|
battle.SwitchCreature(1, 0, c3);
|
|
|
|
battle.TrySetChoice(new AttackTurnChoice(c1, c1->GetAttacks()[0], CreatureIndex(1, 0)));
|
|
battle.TrySetChoice(new PassTurnChoice(c3));
|
|
|
|
REQUIRE(battle.HasEnded());
|
|
REQUIRE(battle.GetResult() == 0);
|
|
}
|
|
|
|
#endif |