Implements handling of userdata collection items
Some checks reported errors
continuous-integration/drone/push Build was killed
Some checks reported errors
continuous-integration/drone/push Build was killed
This commit is contained in:
@@ -8,7 +8,10 @@
|
||||
#include "../../src/UserData/UserDataFunction.hpp"
|
||||
#include "../../src/UserData/UserDataFunctionType.hpp"
|
||||
#include "../../src/UserData/UserDataTemplates.hpp"
|
||||
#include "../../src/UserData/UserDataCollectionType.hpp"
|
||||
#include "../../src/UserData/UserDataCollectionValue.hpp"
|
||||
#include "../../src/Evaluator/EvalValues/EvalValueHelper.hpp"
|
||||
#include "../../src/Utilities/Random.hpp"
|
||||
|
||||
using namespace Porygon;
|
||||
using namespace Porygon::UserData;
|
||||
@@ -17,6 +20,7 @@ using namespace Porygon::Utilities;
|
||||
class UserDataTestObject{
|
||||
public:
|
||||
int foo = 10;
|
||||
vector<int> fooVector = {5,10,15,25};
|
||||
int getFoo(){
|
||||
return foo;
|
||||
}
|
||||
@@ -29,11 +33,17 @@ public:
|
||||
private:
|
||||
PORYGON_PREPARE_FUNCTION(UserDataTestObject, getFoo, IntegerEvalValue)
|
||||
PORYGON_PREPARE_FUNCTION(UserDataTestObject, Addition, IntegerEvalValue, (par[0] -> EvaluateInteger()), (par[1] -> EvaluateInteger()))
|
||||
void __setFooVector(const EvalValue* key, const EvalValue* value){
|
||||
auto index = key->EvaluateInteger();
|
||||
fooVector[index] = value->EvaluateInteger();
|
||||
}
|
||||
|
||||
public:
|
||||
PORYGON_USERDATA(UserDataTestObject,
|
||||
PORYGON_INTEGER_FIELD(foo)
|
||||
PORYGON_INTEGER_FUNCTION(getFoo)
|
||||
PORYGON_INTEGER_FUNCTION(Addition, PORYGON_INTEGER_TYPE, PORYGON_INTEGER_TYPE)
|
||||
PORYGON_READONLY_VECTOR_FIELD(fooVector, PORYGON_INTEGER_TYPE)
|
||||
)
|
||||
};
|
||||
|
||||
@@ -117,5 +127,51 @@ end
|
||||
UserDataStorage::ClearTypes();
|
||||
}
|
||||
|
||||
TEST_CASE( "Gets userdata vector value", "[integration]" ) {
|
||||
UserDataStorage::RegisterType(HashedString::ConstHash("testObject"), UserDataTestObject::__createUserData());
|
||||
Script* script = Script::Create(R"(
|
||||
function testFunc(testObject obj)
|
||||
return obj.fooVector[1]
|
||||
end
|
||||
)");
|
||||
REQUIRE(!script->Diagnostics -> HasErrors());
|
||||
script->Evaluate();
|
||||
auto func = (GenericFunctionEvalValue*)script -> GetVariable(u"testFunc");
|
||||
auto funcType = func -> GetType();
|
||||
REQUIRE(funcType->GetFirstOption()->GetReturnType()->GetClass() == TypeClass::Number);
|
||||
auto obj = new UserDataTestObject();
|
||||
auto parameter = new UserDataValue(HashedString::ConstHash("testObject"), obj);
|
||||
auto result = script->CallFunction(u"testFunc", {parameter});
|
||||
REQUIRE(result -> EvaluateInteger() == 5);
|
||||
delete obj;
|
||||
delete parameter;
|
||||
delete result;
|
||||
delete script;
|
||||
delete func;
|
||||
UserDataStorage::ClearTypes();
|
||||
}
|
||||
|
||||
TEST_CASE( "Sets userdata vector value", "[integration]" ) {
|
||||
UserDataStorage::RegisterType(HashedString::ConstHash("testObject"), UserDataTestObject::__createUserData());
|
||||
Script* script = Script::Create(R"(
|
||||
function testFunc(testObject obj)
|
||||
obj.fooVector[3] = 684
|
||||
end
|
||||
)");
|
||||
REQUIRE(!script->Diagnostics -> HasErrors());
|
||||
script->Evaluate();
|
||||
auto func = (GenericFunctionEvalValue*)script -> GetVariable(u"testFunc");
|
||||
auto funcType = func -> GetType();
|
||||
auto obj = new UserDataTestObject();
|
||||
auto parameter = new UserDataValue(HashedString::ConstHash("testObject"), obj);
|
||||
script->CallFunction(u"testFunc", {parameter});
|
||||
REQUIRE(obj->fooVector[2] == 684);
|
||||
delete obj;
|
||||
delete parameter;
|
||||
delete script;
|
||||
delete func;
|
||||
UserDataStorage::ClearTypes();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user