// Copyright Epic Games, Inc. All Rights Reserved. #if WITH_LOW_LEVEL_TESTS #include "TestHarness.h" #include "TestMacros/Assertions.h" #include "ObjectPtrTestClass.h" #include "UObject/Package.h" #include "Misc/ScopeExit.h" #include "UObject/UnrealType.h" #include "UObject/LinkerPlaceholderExportObject.h" #include "UObject/LinkerPlaceholderClass.h" #include "UObject/ObjectHandleTracking.h" #include "LowLevelTestsRunner/WarnFilterScope.h" TEST_CASE("UE::CoreUObject::FClassProperty::Identical") { #if UE_WITH_OBJECT_HANDLE_TRACKING auto CallbackHandle = UE::CoreUObject::AddObjectHandleReferenceResolvedCallback([](const FObjectRef&, UPackage*, UObject*) { FAIL("Unexpected resolve during CheckValidObject"); }); ON_SCOPE_EXIT { UE::CoreUObject::RemoveObjectHandleReferenceResolvedCallback(CallbackHandle); }; #endif UClass* Class = UObjectWithClassProperty::StaticClass(); FObjectProperty* Property = CastField(Class->FindPropertyByName(TEXT("ClassPtr"))); REQUIRE(Property != nullptr); UPackage* TestPackage = NewObject(nullptr, TEXT("TestPackageName"), RF_Transient); TestPackage->AddToRoot(); ON_SCOPE_EXIT { TestPackage->RemoveFromRoot(); }; UObjectWithClassProperty* Obj = NewObject(TestPackage, TEXT("UObjectWithClassProperty")); CHECK(Property->Identical(Obj, Obj, 0u)); } #endif