// Copyright Epic Games, Inc. All Rights Reserved. #include "CoreTypes.h" #include "TestCommon/Expectations.h" #include "TestHarness.h" #include "TestObject.h" #include "UObject/Class.h" #include "UObject/Package.h" TEST_CASE("CoreUObject::UFunction::Basic", "[CoreUObject]") { FName PackageName = MakeUniqueObjectName(nullptr, UPackage::StaticClass(), FName("/Memory/UFunctionBasic")); UPackage* Package = NewObject(nullptr, UPackage::StaticClass(), PackageName); UTestObject* Obj = NewObject(Package, "TestObject"); int32 Value = Obj->GetBPOverrideableValue(); int32 Value2 = Obj->GetBPOverrideableValue_Implementation(); CHECK_EQUAL(Value, Value2); } TEST_CASE("CoreUObject::FProperty::Basic", "[CoreUObject]") { FProperty* StrongObjectProp = UTestObject::StaticClass()->FindPropertyByName("StrongObjectReference"); REQUIRE(StrongObjectProp != nullptr); CHECK_EQUAL(FName("OnRep_StrongObjectReference"), StrongObjectProp->RepNotifyFunc); } TEST_CASE("CoreUObject::Interface::Basic", "[CoreUObject]") { UClass* TestObjectClass = UTestObject::StaticClass(); CHECK(TestObjectClass->ImplementsInterface(UTestInterface::StaticClass())); FName PackageName = MakeUniqueObjectName(nullptr, UPackage::StaticClass(), FName("/Memory/InterfaceBasic")); UPackage* Package = NewObject(nullptr, UPackage::StaticClass(), PackageName); UTestObject* Obj = NewObject(Package, "TestObject"); ITestInterface* InterfaceObj = Cast(Obj); CHECK(InterfaceObj != nullptr); struct FParams { FName BaseName = "TestName"; int32 Number = 17; FName Result; } Params; CHECK_EQUALS("Native call", InterfaceObj->GetNumberedName(Params.BaseName, Params.Number), FName(Params.BaseName, Params.Number)); UFunction* Function = UTestInterface::StaticClass()->FindFunctionByName("GetNumberedName"); CHECK(Function != nullptr); Obj->ProcessEvent(Function, &Params); CHECK_EQUALS("BP call", Params.Result, FName(Params.BaseName, Params.Number)); } TEST_CASE("CoreUObject::Class::SuperStructIterator", "[CoreUObject]") { UClass* TestObjectClass = UTestObject::StaticClass(); TArray Supers; for (UStruct* Struct : TestObjectClass->GetSuperStructIterator()) { Supers.Add(CastChecked(Struct)); } REQUIRE_MESSAGE("Two supers", Supers.Num() == 2); CHECK_MESSAGE("Self first", Supers[0] == TestObjectClass); CHECK_MESSAGE("UObject second", Supers[1] == UObject::StaticClass()); }