Files
UnrealEngine/Engine/Source/Runtime/PropertyPath/Private/Tests/PropertyPathHelpersTest.cpp
2025-05-18 13:04:45 +08:00

1145 lines
55 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "PropertyPathHelpersTest.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(PropertyPathHelpersTest)
#if WITH_DEV_AUTOMATION_TESTS
DEFINE_LOG_CATEGORY_STATIC(LogPropertyPathHelpersTest, Log, All);
/**
* Coverage:
*
* SetPrimitives (Bool, Integer, Float)
* SetInvalidInputIsNoOp
* SetString
* SetEnum
* SetStruct
* SetInnerObject
* SetStructData
* SetStructMember
* SetStructInnerObjectMember
* SetInnerStructMember
* SetPrimitivesInnerObject
* SetStringInnerObject
* SetStructInnerObject
* SetStructMemberInnerObject
* SetInnerStructMemberInnerObject
* SetInnerStructMemberEnumInnerObject
*
* GetPrimitives
* GetString
* GetStruct
* GetInnerObject
* GetEnum
* GetStructMember
* GetStructInnerObjectMember
* GetInnerStructMember
* GetPrimitivesInnerObject
* GetStringInnerObject
* GetStructInnerObject
* GetStructMemberInnerObject
* GetInnerStructMemberInnerObject
* GetInnerStructMemberEnumInnerObject
*
* Note:
* When a struct setter is called due to a struct member set we expect getter to be called.
* This is because to call the struct setter we had to read the current struct value.
*/
// Begin Tests
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetPrimitivesTest, "System.PropertyPath.SetPrimitivesTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetPrimitivesTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->Bool = true;
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Bool"), true);
GPassing &= TestEqual(TEXT("Primitive Bool Set"), Test.Object->Bool, true);
GPassing &= TestEqual(TEXT("Primitive Bool Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Primitive Bool Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->Integer = 1;
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Integer"), 1);
GPassing &= TestEqual(TEXT("Primitive Integer Set"), Test.Object->Integer, 1);
GPassing &= TestEqual(TEXT("Primitive Integer Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Primitive Integer Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Integer Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->SetFloat(1.5f);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Float"), 1.5f);
GPassing &= TestEqual(TEXT("Primitive Float Set"), Test.Object->Float, 1.5f);
GPassing &= TestEqual(TEXT("Primitive Float Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Primitive Float Setter Called"), Test.Object->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Primitive Float Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetInvalidInputIsNoOp, "System.PropertyPath.SetInvalidInputIsNoOp", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetInvalidInputIsNoOp::RunTest(const FString& Parameters)
{
bool GPassing = true;
// Note: Skipping CppTests here since these are No Ops.
{
FPropertyPathTestBed Test = {};
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Bool"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Bool Invalid Input Set No Op"), Test.Object->Bool, false);
GPassing &= TestEqual(TEXT("Bool Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Bool Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Integer"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Integer Invalid Input Set No Op"), Test.Object->Integer, 0);
GPassing &= TestEqual(TEXT("Integer Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Integer Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Float"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Float Invalid Input Set No Op"), Test.Object->Float, 0.0f);
GPassing &= TestEqual(TEXT("Float Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Float Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Struct"), 1);
GPassing &= TestEqual(TEXT("Struct Invalid Input Set No Op"), Test.Object->Struct, Test.DefaultStruct);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStringTest, "System.PropertyPath.SetStringTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStringTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->String = FString("NewValue");
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("String"), FString("NewValue"));
GPassing &= TestEqual(TEXT("String Set"), Test.Object->String, FString("NewValue"));
GPassing &= TestEqual(TEXT("String Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("String Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("String Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetEnumTest, "System.PropertyPath.SetEnumTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetEnumTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->EnumTwo = Two;
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumTwo"), Two);
GPassing &= TestEqual(TEXT("Enum Set"), Test.Object->EnumTwo, Two);
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Enum Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Enum Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
// Test for
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->EnumOne = Four;
CppTest.Object->EnumTwo = Three;
CppTest.Object->EnumThree = Two;
CppTest.Object->EnumFour = One;
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumOne"), Four);
CppTest.Object->EnumOne = Four;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumTwo"), Three);
CppTest.Object->EnumTwo = Three;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumThree"), Two);
CppTest.Object->EnumThree = Two;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumFour"), One);
CppTest.Object->EnumFour = One;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumOne, Four);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumTwo, Three);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumThree, Two);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumFour, One);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumFour"), Four);
CppTest.Object->EnumFour = Four;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumThree"), Three);
CppTest.Object->EnumThree = Three;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumTwo"), Two);
CppTest.Object->EnumTwo = Two;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("EnumOne"), One);
CppTest.Object->EnumOne = One;
GPassing &= TestEqual(TEXT("Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumOne, One);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumTwo, Two);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumThree, Three);
GPassing &= TestEqual(TEXT("Enum Close No Overwrite Set"), Test.Object->EnumFour, Four);
GPassing &= TestEqual(TEXT("Enum Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Enum Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStructTest, "System.PropertyPath.SetStructTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStructTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->SetStruct(Test.ModifiedStruct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Struct"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Set"), Test.Object->Struct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->SetStructRef(Test.ModifiedStruct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructRef"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Ref Set"), Test.Object->StructRef, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Ref Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->SetStructConstRef(Test.ModifiedStruct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructConstRef"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Const Ref Set"), Test.Object->StructConstRef, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Const Ref Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetInnerObjectTest, "System.PropertyPath.SetInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject = CppTest.ModifiedObject;
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Inner Object Set"), Test.Object->InnerObject, Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Inner Object Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Inner Object Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStructDataTest, "System.PropertyPath.SetStructDataTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStructDataTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->SetStruct(Test.ModifiedStruct);
UScriptStruct* ScriptStruct = TBaseStructure<FPropertyPathTestStruct>::Get();
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Struct"), ScriptStruct, (const uint8*)&Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Data Set"), Test.Object->Struct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Data Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->SetStructRef(Test.ModifiedStruct);
UScriptStruct* ScriptStruct = TBaseStructure<FPropertyPathTestStruct>::Get();
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructRef"), ScriptStruct, (const uint8*)&Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Ref Data Set"), Test.Object->StructRef, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Ref Data Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->SetStructConstRef(Test.ModifiedStruct);
UScriptStruct* ScriptStruct = TBaseStructure<FPropertyPathTestStruct>::Get();
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructConstRef"), ScriptStruct, (const uint8*)&Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Const Ref Data Set"), Test.Object->StructConstRef, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Const Ref Data Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStructMemberTest, "System.PropertyPath.SetStructMemberTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStructMemberTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->Struct.Float = 1.5f;
CppTest.Object->SetStruct(CppTest.Object->Struct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Struct.Float"), 1.5f);
GPassing &= TestEqual(TEXT("Struct Member Set"), Test.Object->Struct.Float, 1.5f);
GPassing &= TestEqual(TEXT("Struct Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->StructRef.Float = 1.5f;
CppTest.Object->SetStructRef(CppTest.Object->StructRef);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructRef.Float"), 1.5f);
GPassing &= TestEqual(TEXT("Struct Ref Member Set"), Test.Object->StructRef.Float, 1.5f);
GPassing &= TestEqual(TEXT("Struct Ref Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->StructConstRef.Float = 1.5f;
CppTest.Object->SetStructConstRef(CppTest.Object->StructConstRef);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructConstRef.Float"), 1.5f);
GPassing &= TestEqual(TEXT("Struct Const Ref Member Set"), Test.Object->StructConstRef.Float, 1.5f);
GPassing &= TestEqual(TEXT("Struct Const Ref Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStructInnerObjectMemberTest, "System.PropertyPath.SetStructInnerObjectMemberTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStructInnerObjectMemberTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->Struct.InnerObject = CppTest.ModifiedObject;
CppTest.Object->SetStruct(CppTest.Object->Struct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Struct.InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Inner Object Member Set"), Test.Object->Struct.InnerObject, Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Inner Object Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->StructRef.InnerObject = CppTest.ModifiedObject;
CppTest.Object->SetStructRef(CppTest.Object->StructRef);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructRef.InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Ref Inner Object Member Set"), Test.Object->StructRef.InnerObject, Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Ref Inner Object Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->StructConstRef.InnerObject = CppTest.ModifiedObject;
CppTest.Object->SetStructConstRef(CppTest.Object->StructConstRef);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("StructConstRef.InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Const Ref Inner Object Member Set"), Test.Object->StructConstRef.InnerObject, Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Const Ref Inner Object Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetInnerStructMemberTest, "System.PropertyPath.SetInnerStructMemberTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetInnerStructMemberTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->Struct.InnerStruct.Float = 1.5f;
CppTest.Object->SetStruct(CppTest.Object->Struct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("Struct.InnerStruct.Float"), 1.5f);
GPassing &= TestEqual(TEXT("Inner Struct Member Set"), Test.Object->Struct.InnerStruct.Float, 1.5f);
GPassing &= TestEqual(TEXT("Inner Struct Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetPrimitivesInnerObjectTest, "System.PropertyPath.SetPrimitivesInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetPrimitivesInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->Bool = true;
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.Bool"), true);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Set"), Test.Object->InnerObject->Bool, true);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->Integer = 1;
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.Integer"), 1);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Set"), Test.Object->InnerObject->Integer, 1);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->SetFloat(1.5f);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.Float"), 1.5f);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Set"), Test.Object->InnerObject->Float, 1.5f);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Setter Called"), Test.Object->InnerObject->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Float Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Float Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStringInnerObjectTest, "System.PropertyPath.SetStringInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStringInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->String = FString("NewValue");
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.String"), FString("NewValue"));
GPassing &= TestEqual(TEXT("Inner Object String Set"), Test.Object->InnerObject->String, FString("NewValue"));
GPassing &= TestEqual(TEXT("Inner Object String Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Inner Object String Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object String Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("String Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("String Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStructInnerObjectTest, "System.PropertyPath.SetStructInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStructInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->SetStruct(Test.ModifiedStruct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.Struct"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Struct Set"), Test.Object->InnerObject->Struct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Struct Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Inner Object Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), true);
GPassing &= TestEqual(TEXT("Inner Object Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetStructMemberInnerObjectTest, "System.PropertyPath.SetStructMemberInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetStructMemberInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->Struct.Float = 1.5f;
CppTest.Object->InnerObject->SetStruct(CppTest.Object->InnerObject->Struct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.Struct.Float"), 1.5f);
GPassing &= TestEqual(TEXT("Inner Object Struct Member Set"), Test.Object->InnerObject->Struct.Float, 1.5f);
GPassing &= TestEqual(TEXT("Inner Object Struct Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Inner Object Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Inner Object Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetInnerStructMemberInnerObjectTest, "System.PropertyPath.SetInnerStructMemberInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetInnerStructMemberInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->Struct.InnerStruct.Float = 1.5f;
CppTest.Object->InnerObject->SetStruct(CppTest.Object->InnerObject->Struct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.Struct.InnerStruct.Float"), 1.5f);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Set"), Test.Object->InnerObject->Struct.InnerStruct.Float, 1.5f);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Inner Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FSetInnerStructMemberEnumInnerObjectTest, "System.PropertyPath.SetInnerStructMemberEnumInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FSetInnerStructMemberEnumInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.Object->InnerObject->Struct.InnerStruct.EnumTwo = Two;
CppTest.Object->InnerObject->SetStruct(CppTest.Object->InnerObject->Struct);
PropertyPathHelpers::SetPropertyValue(Test.Object, FString("InnerObject.Struct.InnerStruct.EnumTwo"), Two);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Enum Set"), Test.Object->InnerObject->Struct.InnerStruct.EnumTwo, Two);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Enum Set Cpp Equivalent"), *Test.Object, *CppTest.Object);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), true);
// Emphasis, see note under coverage at top
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Inner Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetPrimitivesTest, "System.PropertyPath.GetPrimitivesTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetPrimitivesTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Bool = CppTest.Object->Bool;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("Bool"), Test.ModifiedStruct.Bool);
GPassing &= TestEqual(TEXT("Primitive Bool Get"), Test.DefaultStruct.Bool, Test.ModifiedStruct.Bool);
GPassing &= TestEqual(TEXT("Primitive Bool Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Primitive Bool Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Integer = CppTest.Object->Integer;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("Integer"), Test.ModifiedStruct.Integer);
GPassing &= TestEqual(TEXT("Primitive Integer Get"), Test.DefaultStruct.Integer, Test.ModifiedStruct.Integer);
GPassing &= TestEqual(TEXT("Primitive Integer Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Primitive Integer Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Integer Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->GetFloat();
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Primitive Float Get"), Test.DefaultStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Primitive Float Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Primitive Float Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Float Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetStringTest, "System.PropertyPath.GetStringTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetStringTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.String = CppTest.Object->String;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("String"), Test.ModifiedStruct.String);
GPassing &= TestEqual(TEXT("String Get"), Test.DefaultStruct.String, Test.ModifiedStruct.String);
GPassing &= TestEqual(TEXT("String Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("String Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("String Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetEnumTest, "System.PropertyPath.GetEnumTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetEnumTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.EnumTwo = CppTest.Object->EnumTwo;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("EnumTwo"), Test.ModifiedStruct.EnumTwo);
GPassing &= TestEqual(TEXT("Enum Get"), Test.DefaultStruct.EnumTwo, Test.ModifiedStruct.EnumTwo);
GPassing &= TestEqual(TEXT("Enum Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Enum Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Enum Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetStructTest, "System.PropertyPath.GetStructTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetStructTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct = CppTest.Object->GetStruct();
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("Struct"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Get"), Test.DefaultStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct = CppTest.Object->GetStructRef();
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("StructRef"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Ref Get"), Test.DefaultStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Ref Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct = CppTest.Object->GetStructConstRef();
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("StructConstRef"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Const Ref Get"), Test.DefaultStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Const Ref Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetInnerObjectTest, "System.PropertyPath.GetInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedObject = CppTest.Object->InnerObject;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Inner Object Get"), Test.Object->InnerObject, Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Inner Object Get Cpp Equivalent"), *CppTest.ModifiedObject, *Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Inner Object Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetStructMemberTest, "System.PropertyPath.GetStructMemberTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetStructMemberTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->GetStruct().Float;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("Struct.Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Struct Member Get"), Test.DefaultStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Struct Member Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->GetStructRef().Float;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("StructRef.Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Struct Ref Member Get"), Test.DefaultStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Struct Ref Member Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->GetStructConstRef().Float;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("StructConstRef.Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Struct Const Ref Member Get"), Test.DefaultStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Struct Const Ref Member Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetStructInnerObjectMemberTest, "System.PropertyPath.GetStructInnerObjectMemberTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetStructInnerObjectMemberTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedObject = CppTest.Object->GetStruct().InnerObject;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("Struct.InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Member Get"), *Test.ModifiedObject, *Test.Object->Struct.InnerObject);
GPassing &= TestEqual(TEXT("Struct Member Get Cpp Equivalent"), *CppTest.ModifiedObject, *Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedObject = CppTest.Object->GetStructRef().InnerObject;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("StructRef.InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Ref Member Get"), *Test.ModifiedObject, *Test.Object->StructRef.InnerObject);
GPassing &= TestEqual(TEXT("Struct Ref Member Get Cpp Equivalent"), *CppTest.ModifiedObject, *Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedObject = CppTest.Object->GetStructConstRef().InnerObject;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("StructConstRef.InnerObject"), Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Const Ref Member Get"), *Test.ModifiedObject, *Test.Object->StructConstRef.InnerObject);
GPassing &= TestEqual(TEXT("Struct Const Ref Member Get Cpp Equivalent"), *CppTest.ModifiedObject, *Test.ModifiedObject);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetInnerStructMemberTest, "System.PropertyPath.GetInnerStructMemberTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetInnerStructMemberTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->GetStruct().InnerStruct.Float;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("Struct.InnerStruct.Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Inner Struct Member Get"), Test.DefaultStruct.InnerStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Inner Struct Member Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Struct Getter Called"), Test.Object->IsGetterCalled(), true);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetPrimitivesInnerObjectTest, "System.PropertyPath.GetPrimitivesInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetPrimitivesInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Bool = CppTest.Object->InnerObject->Bool;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.Bool"), Test.ModifiedStruct.Bool);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Get"), Test.DefaultStruct.Bool, Test.ModifiedStruct.Bool);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Inner Object Bool Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Integer = CppTest.Object->InnerObject->Integer;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.Integer"), Test.ModifiedStruct.Integer);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Get"), Test.DefaultStruct.Integer, Test.ModifiedStruct.Integer);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Inner Object Integer Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Bool Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->InnerObject->GetFloat();
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Get"), Test.DefaultStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Inner Object Float Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Primitive Float Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Primitive Float Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetStringInnerObjectTest, "System.PropertyPath.GetStringInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetStringInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.String = CppTest.Object->InnerObject->String;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.String"), Test.ModifiedStruct.String);
GPassing &= TestEqual(TEXT("Inner Object String Get"), Test.DefaultStruct.String, Test.ModifiedStruct.String);
GPassing &= TestEqual(TEXT("Inner Object String Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object String Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object String Getter Called"), Test.Object->InnerObject->IsGetterCalled(), false);
GPassing &= TestEqual(TEXT("String Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("String Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetStructInnerObjectTest, "System.PropertyPath.GetStructInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetStructInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct = CppTest.Object->InnerObject->GetStruct();
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.Struct"), Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Struct Get"), Test.DefaultStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Struct Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->InnerObject->ResetGetterSetterFlags();
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetStructMemberInnerObjectTest, "System.PropertyPath.GetStructMemberInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetStructMemberInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->InnerObject->GetStruct().Float;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.Struct.Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Inner Object Struct Member Get"), Test.DefaultStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Inner Object Struct Member Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetInnerStructMemberInnerObjectTest, "System.PropertyPath.GetInnerStructMemberInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetInnerStructMemberInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.Float = CppTest.Object->InnerObject->GetStruct().InnerStruct.Float;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.Struct.InnerStruct.Float"), Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Get"), Test.DefaultStruct.InnerStruct.Float, Test.ModifiedStruct.Float);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Inner Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FGetInnerStructMemberEnumInnerObjectTest, "System.PropertyPath.GetInnerStructMemberEnumInnerObjectTest", EAutomationTestFlags_ApplicationContextMask | EAutomationTestFlags::EngineFilter)
bool FGetInnerStructMemberEnumInnerObjectTest::RunTest(const FString& Parameters)
{
bool GPassing = true;
{
FPropertyPathTestBed Test = {};
FPropertyPathTestBed CppTest = {};
CppTest.ModifiedStruct.EnumTwo = CppTest.Object->InnerObject->GetStruct().InnerStruct.EnumTwo;
PropertyPathHelpers::GetPropertyValue(Test.Object, FString("InnerObject.Struct.InnerStruct.EnumTwo"), Test.ModifiedStruct.EnumTwo);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Enum Get"), Test.DefaultStruct.InnerStruct.EnumTwo, Test.ModifiedStruct.EnumTwo);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Member Enum Get Cpp Equivalent"), CppTest.ModifiedStruct, Test.ModifiedStruct);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Setter Called"), Test.Object->InnerObject->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Object Inner Struct Getter Called"), Test.Object->InnerObject->IsGetterCalled(), true);
GPassing &= TestEqual(TEXT("Inner Struct Setter Called"), Test.Object->IsSetterCalled(), false);
GPassing &= TestEqual(TEXT("Inner Struct Getter Called"), Test.Object->IsGetterCalled(), false);
Test.Object->ResetGetterSetterFlags();
}
return GPassing;
}
#endif // WITH_DEV_AUTOMATION_TESTS