Files
rougeGame/Source/ueRouge/Private/Tests/IronsPerformanceLayoutTests.cpp

25 lines
1.8 KiB
C++

#include "IronsPerformanceOverlay.h"
#include "Misc/AutomationTest.h"
#if WITH_DEV_AUTOMATION_TESTS
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FIronsPerformanceLayoutTest,"IRONSPORE.Performance.ViewportLayout",EAutomationTestFlags::EditorContext|EAutomationTestFlags::EngineFilter)
bool FIronsPerformanceLayoutTest::RunTest(const FString& Parameters)
{
for(const auto Size:{FVector2D(1280,720),FVector2D(1920,1080),FVector2D(2560,1440),FVector2D(3440,1440)})for(int32 Corner=0;Corner<4;++Corner){
const auto L=FIronsPerformanceLayout::Make(Size,true,Corner);
const FSlateRect Content(L.ContentOrigin.X,L.ContentOrigin.Y,L.ContentOrigin.X+1920*L.ContentScale,L.ContentOrigin.Y+1080*L.ContentScale);
TestTrue(TEXT("Panel remains in the actual viewport"),L.Panel.Left>=0&&L.Panel.Top>=0&&L.Panel.Right<=Size.X&&L.Panel.Bottom<=Size.Y);
TestTrue(TEXT("Existing content never intersects the panel band"),Content.Bottom<=L.Panel.Top||Content.Top>=L.Panel.Bottom);
const FVector2D Source(1730,610),Screen=Source*L.ContentScale+L.ContentOrigin;
TestTrue(TEXT("Grid pointer coordinates survive safe-band projection"),((Screen-L.ContentOrigin)/L.ContentScale).Equals(Source,.001));
const FVector2D Aim=(Size*.5-L.ContentOrigin)/L.ContentScale;
TestTrue(TEXT("Crosshair remains at actual viewport center"),(Aim*L.ContentScale+L.ContentOrigin).Equals(Size*.5,.001));
const float Margin=16*L.PanelScale;
TestTrue(TEXT("Wide-screen right anchor uses real viewport edge"),Corner==1||Corner==3||FMath::IsNearlyEqual(L.Panel.Right,static_cast<float>(Size.X)-Margin,.01f));
}
const auto Hidden=FIronsPerformanceLayout::Make(FVector2D(1920,1080),false,0);
TestTrue(TEXT("Hidden panel releases the reserved band"),Hidden.ContentOrigin.IsNearlyZero()&&FMath::IsNearlyEqual(Hidden.ContentScale,1.f));
return true;
}
#endif