// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #if WITH_TESTS #include "UObject/Object.h" #include "UObject/ObjectPtr.h" #include "Templates/NonNullPointer.h" #include "Templates/SubclassOf.h" #include "ObjectPtrTestClass.generated.h" //simple test class for testing TObjectPtr resolve behavior UCLASS(meta=(LoadBehavior=LazyOnDemand)) class UObjectPtrTestClass : public UObject { GENERATED_BODY() }; //abstract test class for testing TObjectPtr resolve behavior UCLASS(Abstract, meta=(LoadBehavior=LazyOnDemand)) class UObjectPtrAbstractTestClass : public UObject { GENERATED_BODY() }; //derived-from-abstract test class for testing TObjectPtr resolve behavior UCLASS(meta=(LoadBehavior=LazyOnDemand)) class UObjectPtrAbstractDerivedTestClass : public UObjectPtrAbstractTestClass { GENERATED_BODY() }; //test class with typed reference to another class UCLASS(meta=(LoadBehavior=LazyOnDemand)) class UObjectPtrTestClassWithRef : public UObject { GENERATED_BODY() public: UPROPERTY() TObjectPtr ObjectPtr; UPROPERTY() TObjectPtr ObjectPtrNonNullable; UPROPERTY() TObjectPtr ObjectPtrAbstractNonNullable; UPROPERTY() TArray> ArrayObjPtr; }; //test class with typed reference to another class UCLASS(meta=(LoadBehavior=LazyOnDemand)) class UObjectWithClassProperty : public UObject { GENERATED_BODY() public: UPROPERTY() TObjectPtr ClassPtr; UPROPERTY() TSubclassOf SubClass; UPROPERTY() UClass* ClassRaw; }; //test class with raw pointer UCLASS(meta=(LoadBehavior=LazyOnDemand)) class UObjectWithRawProperty : public UObject { GENERATED_BODY() public: UPROPERTY() UObjectPtrTestClass* ObjectPtr; UPROPERTY() UObjectPtrTestClass* ObjectPtrNonNullable; }; //derived test class UCLASS(meta=(LoadBehavior=LazyOnDemand)) class UObjectPtrDerrivedTestClass : public UObjectPtrTestClass { GENERATED_BODY() }; //non lazy test class UCLASS() class UObjectPtrNotLazyTestClass : public UObject { GENERATED_BODY() }; //stress testing class UCLASS(meta=(LoadBehavior=LazyOnDemand)) class UObjectPtrStressTestClass : public UObject { GENERATED_BODY() public: uint8 Data[PLATFORM_CACHE_LINE_SIZE]; }; class FTestBaseClass { public: virtual ~FTestBaseClass() = default; virtual void VirtFunc() { }; }; UCLASS() class UMiddleClass : public UObject, public FTestBaseClass { GENERATED_BODY() public: virtual void VirtFunc() override { }; }; class FAnotherBaseClass { public: virtual ~FAnotherBaseClass() = default; virtual void AnotherVirtFunc() { }; }; UCLASS() class UDerrivedClass : public UMiddleClass, public FAnotherBaseClass { GENERATED_BODY() public: virtual void AnotherVirtFunc() override { }; }; #endif