// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. #include "ScreenShotComparisonToolsPrivatePCH.h" #include "JsonObjectConverter.h" #include "ImageComparer.h" class FScreenshotComparisons { public: FString ApprovedFolder; FString UnapprovedFolder; TArray Existing; TArray New; TArray Missing; }; FScreenShotManager::FScreenShotManager( const IMessageBusRef& InMessageBus ) { MessageEndpoint = FMessageEndpoint::Builder("FScreenShotToolsModule", InMessageBus) .Handling(this, &FScreenShotManager::HandleScreenShotMessage); if (MessageEndpoint.IsValid()) { MessageEndpoint->Subscribe(); } ScreenshotApprovedFolder = FPaths::GameDir() / TEXT("Test/Screenshots/"); ScreenshotIncomingFolder = FPaths::GameSavedDir() / TEXT("Automation/Incoming/"); ScreenshotDeltaFolder = FPaths::GameSavedDir() / TEXT("Automation/Delta/"); ScreenshotResultsFolder = FPaths::GameSavedDir() / TEXT("Automation/"); } TSharedRef FScreenShotManager::GenerateFileList() const { TSharedRef Comparisons = MakeShareable(new FScreenshotComparisons()); Comparisons->ApprovedFolder = ScreenshotApprovedFolder; Comparisons->UnapprovedFolder = ScreenshotIncomingFolder; TArray UnapprovedShots; TArray ApprovedShots; { TArray UnapprovedShotList; IFileManager::Get().FindFilesRecursive(UnapprovedShotList, *ScreenshotIncomingFolder, TEXT("*.png"), true, false); TArray ApprovedShotList; IFileManager::Get().FindFilesRecursive(ApprovedShotList, *ScreenshotApprovedFolder, TEXT("*.png"), true, false); for ( FString UnapprovedPngFile : UnapprovedShotList ) { FPaths::MakePathRelativeTo(UnapprovedPngFile, *ScreenshotIncomingFolder); UnapprovedShots.AddUnique(FPaths::GetPath(UnapprovedPngFile)); } for ( FString ApprovedPngFile : ApprovedShotList ) { FPaths::MakePathRelativeTo(ApprovedPngFile, *ScreenshotApprovedFolder); ApprovedShots.AddUnique(FPaths::GetPath(ApprovedPngFile)); } } for ( int32 ShotIndex = 0; ShotIndex < UnapprovedShots.Num(); ShotIndex++ ) { const FString& UnapprovedShot = UnapprovedShots[ShotIndex]; // Look for an exact match first if ( ApprovedShots.Contains(UnapprovedShot) ) { Comparisons->Existing.Add(UnapprovedShot); ApprovedShots.Remove(UnapprovedShot); } else { Comparisons->New.Add(UnapprovedShot); } UnapprovedShots.RemoveAt(ShotIndex); ShotIndex--; } for ( int32 ShotIndex = 0; ShotIndex < ApprovedShots.Num(); ShotIndex++ ) { const FString& ApprovedShot = ApprovedShots[ShotIndex]; Comparisons->Missing.Add(ApprovedShot); } return Comparisons; } void FScreenShotManager::CreateData() { TSet TempPlatforms; // Clear existing data CachedPlatformList.Empty(); ScreenShotDataArray.Empty(); const FString RenderOutputValidation(TEXT("RenderOutputValidation")); const float AllowedPercentDifference = 0.02f; // //_/Project() Map() Time(