2020-01-22 09:33:10 +00:00
|
|
|
#ifdef TESTS_BUILD
|
2020-01-23 14:10:08 +00:00
|
|
|
#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"
|
2020-01-22 09:33:10 +00:00
|
|
|
|
|
|
|
static std::unordered_map<const char*, const char*> _scripts =
|
|
|
|
std::unordered_map<const char*, const char*>{{"testScript1", R"(
|
|
|
|
class testScript1 {
|
|
|
|
bool testName(const Item@ i, const string &in name){ return i.Name == name; }
|
2020-01-22 10:29:14 +00:00
|
|
|
bool testCategory(const Item@ i, ItemCategory category){ return i.Category == category; }
|
|
|
|
bool testBattleCategory(const Item@ i, BattleItemCategory category){ return i.BattleCategory == category; }
|
|
|
|
bool testPrice(const Item@ i, int price){ return i.Price == price; }
|
2020-01-22 09:33:10 +00:00
|
|
|
}
|
|
|
|
)"}};
|
|
|
|
|
2020-02-13 12:59:07 +00:00
|
|
|
static const char* _testLoadFunc(CreatureLib::Battling::ScriptResolver::ScriptCategory category, const char* name) {
|
|
|
|
return _scripts[name];
|
|
|
|
}
|
2020-01-22 09:33:10 +00:00
|
|
|
|
|
|
|
struct ScriptData {
|
2020-02-06 15:25:55 +00:00
|
|
|
AngelScriptScript* Script = nullptr;
|
|
|
|
AngelScripResolver* Resolver = nullptr;
|
|
|
|
asIScriptFunction* Func = nullptr;
|
|
|
|
asIScriptContext* Context = nullptr;
|
2020-01-22 09:33:10 +00:00
|
|
|
|
|
|
|
~ScriptData() {
|
|
|
|
Script->GetContextPool()->ReturnContextToPool(Context);
|
|
|
|
delete Script;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-02-01 15:56:09 +00:00
|
|
|
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->SetCreateFunction(&_testLoadFunc);
|
2020-02-13 12:59:07 +00:00
|
|
|
_resolverCache->CreateScript(AngelScripResolver::ScriptCategory::Attack ,"testScript1");
|
2020-02-01 15:56:09 +00:00
|
|
|
_resolverCache->FinalizeModule();
|
|
|
|
}
|
|
|
|
return _resolverCache;
|
|
|
|
}
|
|
|
|
|
2020-01-22 09:33:10 +00:00
|
|
|
static ScriptData GetScript(PkmnLib::Battling::BattleLibrary* mainLib, const char* funcName) {
|
2020-02-01 15:56:09 +00:00
|
|
|
auto lib = GetScriptResolver(mainLib);
|
2020-01-22 09:33:10 +00:00
|
|
|
auto s = lib->LoadScript(AngelScripResolver::ScriptCategory::Creature, "testScript1");
|
|
|
|
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 Item Name in Script") {
|
|
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
|
|
auto data = GetScript(mainLib, "testName");
|
|
|
|
|
2020-02-15 18:04:06 +00:00
|
|
|
auto item = mainLib->GetItemLibrary()->Get("testItem");
|
2020-01-22 09:33:10 +00:00
|
|
|
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::Item*>(item));
|
|
|
|
auto name = item->GetName();
|
|
|
|
data.Context->SetArgAddress(1, &name);
|
|
|
|
|
|
|
|
REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED);
|
|
|
|
REQUIRE((bool)data.Context->GetReturnWord());
|
|
|
|
}
|
|
|
|
|
2020-01-22 10:29:14 +00:00
|
|
|
TEST_CASE("Validate Item Category in Script") {
|
|
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
|
|
auto data = GetScript(mainLib, "testCategory");
|
|
|
|
|
2020-02-15 18:04:06 +00:00
|
|
|
auto item = mainLib->GetItemLibrary()->Get("testItem");
|
2020-01-22 10:29:14 +00:00
|
|
|
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::Item*>(item));
|
|
|
|
data.Context->SetArgDWord(1, static_cast<int32_t >(item->GetCategory()));
|
|
|
|
|
|
|
|
REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED);
|
|
|
|
REQUIRE((bool)data.Context->GetReturnWord());
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("Validate Item Battle Category in Script") {
|
|
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
|
|
auto data = GetScript(mainLib, "testBattleCategory");
|
|
|
|
|
2020-02-15 18:04:06 +00:00
|
|
|
auto item = mainLib->GetItemLibrary()->Get("testItem");
|
2020-01-22 10:29:14 +00:00
|
|
|
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::Item*>(item));
|
|
|
|
data.Context->SetArgDWord(1, static_cast<int32_t >(item->GetBattleCategory()));
|
|
|
|
|
|
|
|
REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED);
|
|
|
|
REQUIRE((bool)data.Context->GetReturnWord());
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("Validate Item Price in Script") {
|
|
|
|
auto mainLib = TestLibrary::GetLibrary();
|
|
|
|
auto data = GetScript(mainLib, "testPrice");
|
|
|
|
|
2020-02-15 18:04:06 +00:00
|
|
|
auto item = mainLib->GetItemLibrary()->Get("testItem");
|
2020-01-22 10:29:14 +00:00
|
|
|
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::Item*>(item));
|
|
|
|
data.Context->SetArgDWord(1, static_cast<int32_t >(item->GetPrice()));
|
|
|
|
|
|
|
|
REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED);
|
|
|
|
REQUIRE((bool)data.Context->GetReturnWord());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-01-22 09:33:10 +00:00
|
|
|
#endif
|