This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AgrarianGameArchive/Source/AgrarianGame/AgrarianPersistenceAutomationTest.cpp

110 lines
2.7 KiB
C++

// Copyright Pacificao. All Rights Reserved.
#if WITH_EDITOR && WITH_DEV_AUTOMATION_TESTS
#include "AgrarianEditorAutomationLibrary.h"
#include "HAL/PlatformTime.h"
#include "Misc/AutomationTest.h"
#include "Tests/AutomationEditorCommon.h"
namespace
{
constexpr const TCHAR* ShelterClassPath = TEXT("/Game/Agrarian/Blueprints/Structures/BP_PrimitiveShelter.BP_PrimitiveShelter_C");
constexpr const TCHAR* PersistenceTestSlot = TEXT("AgrarianAutomationPersistence");
class FAgrarianCreateBlankMapCommand final : public IAutomationLatentCommand
{
public:
explicit FAgrarianCreateBlankMapCommand(FAutomationTestBase* InTest)
: Test(InTest)
{
}
virtual bool Update() override
{
UWorld* EditorWorld = FAutomationEditorCommonUtils::CreateNewMap();
if (!EditorWorld && Test)
{
Test->AddError(TEXT("Could not create blank editor map for persistence subsystem test"));
}
return true;
}
private:
FAutomationTestBase* Test = nullptr;
};
class FAgrarianWaitSecondsCommand final : public IAutomationLatentCommand
{
public:
explicit FAgrarianWaitSecondsCommand(const double InWaitSeconds)
: EndTime(FPlatformTime::Seconds() + InWaitSeconds)
{
}
virtual bool Update() override
{
return FPlatformTime::Seconds() >= EndTime;
}
private:
double EndTime = 0.0;
};
class FAgrarianRunPersistenceSubsystemCommand final : public IAutomationLatentCommand
{
public:
explicit FAgrarianRunPersistenceSubsystemCommand(FAutomationTestBase* InTest)
: Test(InTest)
{
}
virtual bool Update() override
{
if (!Test)
{
return true;
}
UClass* ShelterClass = StaticLoadClass(AActor::StaticClass(), nullptr, ShelterClassPath);
if (!ShelterClass)
{
Test->AddError(FString::Printf(TEXT("Could not load shelter class: %s"), ShelterClassPath));
return true;
}
const FString Result = UAgrarianEditorAutomationLibrary::RunPersistenceSubsystemSmokeTest(ShelterClass, PersistenceTestSlot);
if (!Result.StartsWith(TEXT("PASS:")))
{
Test->AddError(Result);
return true;
}
Test->AddInfo(Result);
return true;
}
private:
FAutomationTestBase* Test = nullptr;
};
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FAgrarianPersistenceSubsystemAutomationTest,
"Agrarian.PersistenceSubsystem.LiveGameInstance",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter)
bool FAgrarianPersistenceSubsystemAutomationTest::RunTest(const FString& Parameters)
{
ADD_LATENT_AUTOMATION_COMMAND(FAgrarianCreateBlankMapCommand(this));
ADD_LATENT_AUTOMATION_COMMAND(FStartPIECommand(true));
ADD_LATENT_AUTOMATION_COMMAND(FAgrarianWaitSecondsCommand(1.0));
ADD_LATENT_AUTOMATION_COMMAND(FAgrarianRunPersistenceSubsystemCommand(this));
ADD_LATENT_AUTOMATION_COMMAND(FEndPlayMapCommand());
return true;
}
#endif