Files
UnrealEngine/Engine/Plugins/Experimental/GlobalConfigurationData/Tests/Private/GlobalConfigurationDataTests.cpp
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

149 lines
4.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "TestHarness.h"
#include "GlobalConfigurationData.h"
#include "GlobalConfigurationRouter.h"
#include "GlobalConfigurationTestData.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(GlobalConfigurationTestData)
class FGlobalConfigurationTestRouter : public IGlobalConfigurationRouter
{
public:
FGlobalConfigurationTestRouter() : IGlobalConfigurationRouter("Test", 0)
{
}
virtual TSharedPtr<FJsonValue> TryGetDataFromRouter(const FString& Name) const override
{
if (const TSharedRef<FJsonValue>* Value = Data.Find(Name))
{
return *Value;
}
return {};
}
virtual void GetAllDataFromRouter(TMap<FString, TSharedRef<FJsonValue>>& DataOut) const override
{
DataOut = Data;
}
void AddValue(const FStringView& Key, const FStringView& Value)
{
Data.Add(FString(Key), IGlobalConfigurationRouter::TryParseString(Value).ToSharedRef());
}
TMap<FString, TSharedRef<FJsonValue>> Data;
};
using namespace UE::GlobalConfigurationData;
TEST_CASE("GlobalConfigurationTest", "All")
{
FGlobalConfigurationTestRouter TestRouter;
TestRouter.AddValue(TEXT("BoolTrueValue"), TEXT("true"));
TestRouter.AddValue(TEXT("BoolFalseValue"), TEXT("false"));
TestRouter.AddValue(TEXT("IntValue"), TEXT("1"));
TestRouter.AddValue(TEXT("FloatValue"), TEXT("1.5"));
TestRouter.AddValue(TEXT("StringValue"), TEXT("foobar"));
SECTION("Find Data")
{
bool bBoolValue = false;
int32 IntValue = 0;
float FloatValue = 0;
FString StringValue;
CHECK(TryGetData(TEXT("BoolTrueValue"), bBoolValue));
CHECK(bBoolValue == true);
CHECK(TryGetData(TEXT("BoolFalseValue"), bBoolValue));
CHECK(bBoolValue == false);
CHECK(TryGetData(TEXT("IntValue"), IntValue));
CHECK(IntValue == 1);
CHECK(TryGetData(TEXT("FloatValue"), FloatValue));
CHECK(FMath::IsNearlyEqual(FloatValue, 1.5f));
CHECK(TryGetData(TEXT("StringValue"), StringValue));
CHECK(StringValue == TEXT("foobar"));
}
SECTION("Missing Data")
{
bool bBoolValue = false;
int32 IntValue = 0;
float FloatValue = 0;
FString StringValue;
CHECK(TryGetData(TEXT("Gobble"), bBoolValue) == false);
CHECK(bBoolValue == false);
CHECK(TryGetData(TEXT("Gooble"), IntValue) == false);
CHECK(IntValue == 0);
CHECK(TryGetData(TEXT("Gooooo"), FloatValue) == false);
CHECK(FloatValue == 0);
CHECK(TryGetData(TEXT("Gowowow"), StringValue) == false);
CHECK(StringValue.IsEmpty());
}
SECTION("Default Data")
{
CHECK(GetDataWithDefault(TEXT("BoolTrueValue"), false) == true);
CHECK(GetDataWithDefault(TEXT("BoolFalseValue"), true) == false);
CHECK(GetDataWithDefault<int32>(TEXT("IntValue"), 0) == 1);
CHECK(FMath::IsNearlyEqual(GetDataWithDefault(TEXT("FloatValue"), 0.f), 1.5f));
CHECK(GetDataWithDefault<FString>(TEXT("StringValue"), {}) == TEXT("foobar"));
CHECK(GetDataWithDefault(TEXT("Garbage"), false) == false);
CHECK(GetDataWithDefault(TEXT("Garbage"), true) == true);
CHECK(GetDataWithDefault<int32>(TEXT("Garbage"), 123) == 123);
CHECK(FMath::IsNearlyEqual(GetDataWithDefault(TEXT("Garbage"), 5.f), 5.f));
CHECK(GetDataWithDefault<FString>(TEXT("Garbage"), {}) == FString());
}
SECTION("Data Conversions")
{
CHECK(GetDataWithDefault(TEXT("IntValue"), false) == true);
CHECK(FMath::IsNearlyEqual(GetDataWithDefault(TEXT("IntValue"), 0.f), 1.f));
}
TestRouter.AddValue(TEXT("ObjectValue"), TEXT("{\"bBoolValue\":true,\"IntValue\":5,\"IntValueArray\":[1,2,3]}"));
SECTION("UStructs")
{
FGlobalConfigurationTestStruct TestStruct;
CHECK(TryGetData(TEXT("ObjectValue"), TestStruct));
CHECK(TestStruct.bBoolValue == true);
CHECK(TestStruct.IntValue == 5);
CHECK(TestStruct.IntValueArray.Num() == 3);
if (TestStruct.IntValueArray.Num() == 3)
{
CHECK(TestStruct.IntValueArray[0] == 1);
CHECK(TestStruct.IntValueArray[1] == 2);
CHECK(TestStruct.IntValueArray[2] == 3);
}
}
SECTION("UObjects")
{
UGlobalConfigurationTestObject* TestObject = NewObject<UGlobalConfigurationTestObject>();
CHECK(TryGetData(TEXT("ObjectValue"), TestObject));
CHECK(TestObject->bBoolValue == true);
CHECK(TestObject->IntValue == 5);
CHECK(TestObject->IntValueArray.Num() == 3);
if (TestObject->IntValueArray.Num() == 3)
{
CHECK(TestObject->IntValueArray[0] == 1);
CHECK(TestObject->IntValueArray[1] == 2);
CHECK(TestObject->IntValueArray[2] == 3);
}
}
SECTION("SubProperties")
{
CHECK(GetDataWithDefault(TEXT("ObjectValue.bBoolValue"), false) == true);
CHECK(GetDataWithDefault(TEXT("ObjectValue.IntValue"), 0) == 5);
}
}