Files
EVEngine/test/standard_combat_abilities.cpp

67 lines
2.7 KiB
C++

#include "combat/StandardAbilities.h"
#include "action/AbilityAsset.h"
#include "action/AbilityController.h"
#include "zeroerr/assert.h"
#include "zeroerr/unittest.h"
#include <set>
#include <string>
TEST_CASE("standardCombatAbilities.providesTwentyUniqueValidatedArchetypes") {
auto catalog = eve::combat::standardCombatAbilities();
REQUIRE(catalog.ok());
REQUIRE_EQ(catalog.value().size(), 20u);
std::set<std::string> ids;
for (const auto& definition : catalog.value()) {
REQUIRE(definition.validate().ok());
ids.insert(definition.id.format());
CHECK(definition.action.metadata.contains("combat.adapter"));
}
CHECK_EQ(ids.size(), 20u);
CHECK(ids.contains("combat-ability:light-attack"));
CHECK(ids.contains("combat-ability:death"));
}
TEST_CASE("standardCombatAbilities.registerGrantAndActivateThroughSharedController") {
auto catalog = eve::combat::standardCombatAbilities();
REQUIRE(catalog.ok());
eve::action::ActionRuntime actions;
eve::action::AbilityRuntime abilities(actions);
for (const auto& definition : catalog.value()) REQUIRE(abilities.registerDefinition(definition).ok());
auto grant = abilities.grant("fighter", catalog.value()[0].id);
REQUIRE(grant.ok());
eve::action::PlayerAbilityIntentQueue player;
eve::action::AbilityIntent intent;
intent.grantId = grant.value();
intent.request.actionId = catalog.value()[0].action.id;
REQUIRE(player.enqueue(std::move(intent)).ok());
eve::action::AbilityControllerRuntime controller(abilities);
auto activation = controller.processNext(player, eve::SimulationTick(1));
REQUIRE(activation.ok());
REQUIRE(activation.value().has_value());
CHECK(actions.find(activation.value()->executionId) != nullptr);
}
TEST_CASE("standardCombatAbilities.roundTripEveryArchetypeThroughVersionedJsonAssets") {
auto catalog = eve::combat::standardCombatAbilities();
REQUIRE(catalog.ok());
eve::action::ActionRuntime actions;
eve::action::AbilityRuntime abilities(actions);
for (const auto& definition : catalog.value()) {
auto encoded = eve::action::encodeAbilityAsset(definition);
REQUIRE(encoded.ok());
auto json = encoded.value().toJson();
REQUIRE(json.ok());
auto parsed = eve::Value::fromJson(json.value());
REQUIRE(parsed.ok());
auto decoded = eve::action::decodeAbilityAsset(parsed.value());
REQUIRE(decoded.ok());
CHECK_EQ(decoded.value().id, definition.id);
CHECK_EQ(decoded.value().action.metadata.at("combat.adapter").asString(),
definition.action.metadata.at("combat.adapter").asString());
REQUIRE(abilities.registerDefinition(std::move(decoded).takeValue()).ok());
}
}