Fixed different sized enums being a problem for AngelScript, minor fixes for Item class
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-01-22 10:33:10 +01:00
parent 9372ba4b27
commit 22648e8617
7 changed files with 117 additions and 42 deletions

View File

@@ -0,0 +1,58 @@
#ifdef TESTS_BUILD
#include "../../../extern/catch.hpp"
#include "../../../src/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"(
class testScript1 {
bool testName(const Item@ i, const string &in name){ return i.Name == name; }
}
)"}};
static const char* _testLoadFunc(const char* name) { return _scripts[name]; }
struct ScriptData {
AngelScriptScript* Script;
AngelScripResolver* Resolver;
asIScriptFunction* Func;
asIScriptContext* Context;
~ScriptData() {
Script->GetContextPool()->ReturnContextToPool(Context);
delete Script;
delete Resolver;
}
};
static ScriptData GetScript(PkmnLib::Battling::BattleLibrary* mainLib, const char* funcName) {
auto lib = dynamic_cast<AngelScripResolver*>(PkmnLib::Battling::BattleLibrary::CreateScriptResolver());
lib->Initialize(mainLib);
lib->SetCreateFunction(&_testLoadFunc);
lib->CreateScript("testScript1");
lib->FinalizeModule();
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");
auto item = mainLib->GetItemLibrary()->GetItem("testItem");
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());
}
#endif

View File

@@ -79,11 +79,14 @@ TEST_CASE("Validate Move Category in Script") {
auto data = GetScript(mainLib, "testCategory");
auto move = mainLib->GetMoveLibrary()->GetAttack("testMove");
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::MoveData*>(move));
data.Context->SetArgDWord(1, (uint32_t)move->GetCategory());
REQUIRE(data.Context->Execute() == asEXECUTION_FINISHED);
REQUIRE((bool)data.Context->GetReturnWord());
data.Context->SetArgObject(0, const_cast<PkmnLib::Library::MoveData*>(move));
data.Context->SetArgDWord(1, (asDWORD)move->GetCategory());
auto result = data.Context->Execute();
INFO("exception: " << data.Context->GetExceptionString());
REQUIRE(result == asEXECUTION_FINISHED);
REQUIRE((bool)data.Context->GetReturnByte());
}
TEST_CASE("Validate Move BasePower in Script") {