150 lines
5.6 KiB
C++
150 lines
5.6 KiB
C++
#ifdef TESTS_BUILD
|
|
#include "../../../../extern/catch.hpp"
|
|
#include "../../../../src/ScriptResolving/AngelScript/AngelScripResolver.hpp"
|
|
#include "../../../TestLibrary/TestLibrary.hpp"
|
|
|
|
static std::unordered_map<const char*, const char*> _scripts =
|
|
std::unordered_map<const char*, const char*>{{"testScript1", R"(
|
|
namespace Pokemon{
|
|
class testScript1 {
|
|
bool testName(const Species@ s, const string &in name){ return s.Name == name; }
|
|
bool testId(const Species@ s, uint16 id){ return s.Id == id; }
|
|
bool testGenderRate(const Species@ s, float rate){ return s.GenderRate == rate; }
|
|
bool testCaptureRate(const Species@ s, uint8 rate){ return s.CaptureRate == rate; }
|
|
bool testGetForme(const Species@ s, const Forme@ forme){ return s.GetForme("default") is forme; }
|
|
bool testGetDefaultForme(const Species@ s, const Forme@ forme){ return s.GetDefaultForme() is forme; }
|
|
}}
|
|
)"}};
|
|
|
|
struct ScriptData {
|
|
AngelScriptScript* Script;
|
|
AngelScripResolver* Resolver;
|
|
asIScriptFunction* Func;
|
|
asIScriptContext* Context;
|
|
|
|
~ScriptData() {
|
|
Script->GetContextPool()->ReturnContextToPool(Context);
|
|
delete Script;
|
|
}
|
|
};
|
|
|
|
static AngelScripResolver* _resolverCache = nullptr;
|
|
static AngelScripResolver* GetScriptResolver(PkmnLib::Battling::BattleLibrary* mainLib){
|
|
if (_resolverCache == nullptr){
|
|
_resolverCache = dynamic_cast<AngelScripResolver*>(PkmnLib::Battling::BattleLibrary::CreateScriptResolver());
|
|
_resolverCache->Initialize(mainLib);
|
|
_resolverCache->CreateScript("testScript1" , _scripts["testScript1"]);
|
|
_resolverCache->FinalizeModule();
|
|
}
|
|
return _resolverCache;
|
|
}
|
|
|
|
static ScriptData GetScript(PkmnLib::Battling::BattleLibrary* mainLib, const ConstString& funcName) {
|
|
auto lib = GetScriptResolver(mainLib);
|
|
auto s = lib->LoadScript(ScriptCategory::Creature, "testScript1"_cnc);
|
|
auto script = dynamic_cast<AngelScriptScript*>(s);
|
|
auto ctxPool = script->GetContextPool();
|
|
auto ctx = ctxPool->RequestContext();
|
|
|
|
auto func = script->PrepareMethod(funcName, ctx);
|
|
REQUIRE(func != nullptr);
|
|
|
|
return {.Script = script, .Resolver = lib, .Func = func, .Context = ctx};
|
|
}
|
|
|
|
TEST_CASE("Validate Species Name in Script") {
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
auto data = GetScript(mainLib, "testName"_cnc);
|
|
|
|
auto species = mainLib->GetSpeciesLibrary()->Get("testSpecies2"_cnc);
|
|
data.Context->SetArgObject(
|
|
0, const_cast<PkmnLib::Library::PokemonSpecies*>(species));
|
|
auto name = species->GetName();
|
|
data.Context->SetArgAddress(1, &name);
|
|
|
|
auto result = data.Context->Execute();
|
|
REQUIRE(result == asEXECUTION_FINISHED);
|
|
auto v = (bool)data.Context->GetReturnWord();
|
|
REQUIRE(v);
|
|
}
|
|
|
|
TEST_CASE("Validate Species Id in Script") {
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
auto data = GetScript(mainLib, "testId"_cnc);
|
|
|
|
auto species = mainLib->GetSpeciesLibrary()->Get("testSpecies2"_cnc);
|
|
data.Context->SetArgObject(
|
|
0, const_cast<PkmnLib::Library::PokemonSpecies*>(species));
|
|
data.Context->SetArgWord(1, species->GetId());
|
|
|
|
auto result = data.Context->Execute();
|
|
REQUIRE(result == asEXECUTION_FINISHED);
|
|
auto v = (bool)data.Context->GetReturnWord();
|
|
REQUIRE(v);
|
|
}
|
|
|
|
TEST_CASE("Validate Species Gender Rate in Script") {
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
auto data = GetScript(mainLib, "testGenderRate"_cnc);
|
|
|
|
auto species = mainLib->GetSpeciesLibrary()->Get("testSpecies2"_cnc);
|
|
data.Context->SetArgObject(
|
|
0, const_cast<PkmnLib::Library::PokemonSpecies*>(species));
|
|
data.Context->SetArgFloat(1, species->GetGenderRate());
|
|
|
|
auto result = data.Context->Execute();
|
|
REQUIRE(result == asEXECUTION_FINISHED);
|
|
auto v = (bool)data.Context->GetReturnDWord();
|
|
REQUIRE(v);
|
|
}
|
|
|
|
TEST_CASE("Validate Species Capture Rate in Script") {
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
auto data = GetScript(mainLib, "testCaptureRate"_cnc);
|
|
|
|
auto species = mainLib->GetSpeciesLibrary()->Get("testSpecies2"_cnc);
|
|
data.Context->SetArgObject(
|
|
0, const_cast<PkmnLib::Library::PokemonSpecies*>(species));
|
|
data.Context->SetArgByte(1, species->GetCaptureRate());
|
|
|
|
auto result = data.Context->Execute();
|
|
REQUIRE(result == asEXECUTION_FINISHED);
|
|
auto v = (bool)data.Context->GetReturnWord();
|
|
REQUIRE(v);
|
|
}
|
|
|
|
TEST_CASE("Validate Species Get Forme in Script") {
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
auto data = GetScript(mainLib, "testGetForme"_cnc);
|
|
|
|
auto species = mainLib->GetSpeciesLibrary()->Get("testSpecies2"_cnc);
|
|
data.Context->SetArgObject(
|
|
0, const_cast<PkmnLib::Library::PokemonSpecies*>(species));
|
|
data.Context->SetArgObject(1, const_cast<PkmnLib::Library::PokemonForme*>(species->GetForme("default"_cnc)));
|
|
|
|
auto result = data.Context->Execute();
|
|
if (result == asEXECUTION_EXCEPTION){
|
|
FAIL(data.Context->GetExceptionString());
|
|
}
|
|
REQUIRE(result == asEXECUTION_FINISHED);
|
|
auto v = (bool)data.Context->GetReturnWord();
|
|
REQUIRE(v);
|
|
}
|
|
|
|
TEST_CASE("Validate Species Get Default Forme in Script") {
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
auto data = GetScript(mainLib, "testGetDefaultForme"_cnc);
|
|
|
|
auto species = mainLib->GetSpeciesLibrary()->Get("testSpecies2"_cnc);
|
|
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonSpecies*>(species));
|
|
data.Context->SetArgObject(1, const_cast<PkmnLib::Library::PokemonForme*>(species->GetDefaultForme()));
|
|
|
|
auto result = data.Context->Execute();
|
|
REQUIRE(result == asEXECUTION_FINISHED);
|
|
auto v = (bool)data.Context->GetReturnWord();
|
|
REQUIRE(v);
|
|
}
|
|
|
|
|
|
|
|
#endif |