PkmnLib/tests/ScriptTests/ScriptTypeTests/Library/StaticLibraryTests.cpp

152 lines
6.3 KiB
C++
Raw Normal View History

2020-01-23 14:10:08 +00:00
#ifdef TESTS_BUILD
#include "../../../../extern/catch.hpp"
2020-02-02 11:23:50 +00:00
#include "../../../../src/ScriptResolving/AngelScript/AngelScripResolver.hpp"
2020-01-23 14:10:08 +00:00
#include "../../../TestLibrary/TestLibrary.hpp"
static std::unordered_map<const char*, const char*> _scripts =
std::unordered_map<const char*, const char*>{{"testScript1", R"(
namespace Pokemon{
2020-01-23 14:10:08 +00:00
class testScript1 {
bool testMaximumLevel(const StaticLibrary@ s, uint8 level){ return s.Settings.MaximalLevel == level; }
bool testMaximumMoves(const StaticLibrary@ s, uint8 moveCount){ return s.Settings.MaximalMoves == moveCount; }
bool testSpeciesLibrary(const StaticLibrary@ s, const SpeciesLibrary@ speciesLib){ return s.SpeciesLibrary is speciesLib; }
bool testMoveLibrary(const StaticLibrary@ s, const MoveLibrary@ moveLib){ return s.MoveLibrary is moveLib; }
bool testItemLibrary(const StaticLibrary@ s, const ItemLibrary@ itemLib){ return s.ItemLibrary is itemLib; }
bool testGrowthRateLibrary(const StaticLibrary@ s, const GrowthRateLibrary@ gl){ return s.GrowthRateLibrary is gl; }
bool testTypeLibrary(const StaticLibrary@ s, const TypeLibrary@ tl){ return s.TypeLibrary is tl; }
}}
2020-01-23 14:10:08 +00:00
)"}};
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);
2020-01-23 14:10:08 +00:00
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 StaticLibrary Maximum Level in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto data = GetScript(mainLib, "testMaximumLevel"_cnc);
2020-01-23 14:10:08 +00:00
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonLibrary*>(mainLib->GetStaticLib()));
data.Context->SetArgByte(1, mainLib->GetStaticLib()->GetSettings()->GetMaximalLevel());
2020-01-23 14:10:08 +00:00
auto result = data.Context->Execute();
REQUIRE(result == asEXECUTION_FINISHED);
auto v = (bool)data.Context->GetReturnWord();
REQUIRE(v);
}
TEST_CASE("Validate StaticLibrary Maximum Moves in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto data = GetScript(mainLib, "testMaximumMoves"_cnc);
2020-01-23 14:10:08 +00:00
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonLibrary*>(mainLib->GetStaticLib()));
data.Context->SetArgByte(1, mainLib->GetStaticLib()->GetSettings()->GetMaximalMoves());
2020-01-23 14:10:08 +00:00
auto result = data.Context->Execute();
REQUIRE(result == asEXECUTION_FINISHED);
auto v = (bool)data.Context->GetReturnWord();
REQUIRE(v);
}
TEST_CASE("Validate StaticLibrary Species Library in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto data = GetScript(mainLib, "testSpeciesLibrary"_cnc);
2020-01-23 14:10:08 +00:00
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonLibrary*>(mainLib->GetStaticLib()));
data.Context->SetArgObject(
1, const_cast<PkmnLib::Library::SpeciesLibrary*>(mainLib->GetStaticLib()->GetSpeciesLibrary()));
auto result = data.Context->Execute();
REQUIRE(result == asEXECUTION_FINISHED);
auto v = (bool)data.Context->GetReturnWord();
REQUIRE(v);
}
TEST_CASE("Validate StaticLibrary Move Library in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto data = GetScript(mainLib, "testMoveLibrary"_cnc);
2020-01-23 14:10:08 +00:00
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonLibrary*>(mainLib->GetStaticLib()));
data.Context->SetArgObject(1,
const_cast<PkmnLib::Library::MoveLibrary*>(mainLib->GetStaticLib()->GetMoveLibrary()));
auto result = data.Context->Execute();
REQUIRE(result == asEXECUTION_FINISHED);
auto v = (bool)data.Context->GetReturnWord();
REQUIRE(v);
}
TEST_CASE("Validate StaticLibrary Item Library in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto data = GetScript(mainLib, "testItemLibrary"_cnc);
2020-01-23 14:10:08 +00:00
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonLibrary*>(mainLib->GetStaticLib()));
data.Context->SetArgObject(1,
const_cast<PkmnLib::Library::ItemLibrary*>(mainLib->GetStaticLib()->GetItemLibrary()));
auto result = data.Context->Execute();
REQUIRE(result == asEXECUTION_FINISHED);
auto v = (bool)data.Context->GetReturnWord();
REQUIRE(v);
}
TEST_CASE("Validate StaticLibrary Growth Rate Library in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto data = GetScript(mainLib, "testGrowthRateLibrary"_cnc);
2020-01-23 14:10:08 +00:00
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonLibrary*>(mainLib->GetStaticLib()));
data.Context->SetArgObject(
1, const_cast<CreatureLib::Library::GrowthRateLibrary*>(mainLib->GetStaticLib()->GetGrowthRates()));
auto result = data.Context->Execute();
REQUIRE(result == asEXECUTION_FINISHED);
auto v = (bool)data.Context->GetReturnWord();
REQUIRE(v);
}
TEST_CASE("Validate StaticLibrary Type Library in Script") {
auto mainLib = TestLibrary::GetLibrary();
auto data = GetScript(mainLib, "testTypeLibrary"_cnc);
2020-01-23 14:10:08 +00:00
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::PokemonLibrary*>(mainLib->GetStaticLib()));
data.Context->SetArgObject(
1, const_cast<CreatureLib::Library::TypeLibrary*>(mainLib->GetStaticLib()->GetTypeLibrary()));
auto result = data.Context->Execute();
REQUIRE(result == asEXECUTION_FINISHED);
auto v = (bool)data.Context->GetReturnWord();
REQUIRE(v);
}
#endif