Add new plugins, refactor exp, introduce stat forge to replace GAS
This commit is contained in:
124
Plugins/SUDS/Source/SUDSTest/Private/TestUserMetadata.cpp
Normal file
124
Plugins/SUDS/Source/SUDSTest/Private/TestUserMetadata.cpp
Normal file
@@ -0,0 +1,124 @@
|
||||
#include "SUDSDialogue.h"
|
||||
#include "SUDSLibrary.h"
|
||||
#include "SUDSMessageLogger.h"
|
||||
#include "SUDSScript.h"
|
||||
#include "SUDSScriptImporter.h"
|
||||
#include "TestUtils.h"
|
||||
#include "Misc/AutomationTest.h"
|
||||
|
||||
UE_DISABLE_OPTIMIZATION
|
||||
|
||||
// Assign known keys to the strings so we can detect
|
||||
const FString UserMetadataInput = R"RAWSUD(
|
||||
# No metadata
|
||||
Player: Good day sir
|
||||
#% IsGreeting = true
|
||||
NPC: Salutations to you too
|
||||
#% IntValue = 1
|
||||
#% Politeness 3.142
|
||||
Player: What are we doing today?
|
||||
# Test a variable-derived, expression metadata
|
||||
[set IntVariable 2]
|
||||
#% IntValue = {IntVariable} + 3
|
||||
#% LookMumNoEquals `OK_Dear`
|
||||
NPC: Looks like we're doing some testing. How about a choice?
|
||||
#% RequirePoshness = 10
|
||||
* Choice 1
|
||||
Player: Capital, old chap
|
||||
#% RequirePoshness = 15
|
||||
#% RequireTopHat = true
|
||||
* Choice 2
|
||||
Player: Top hole, dear boy
|
||||
* Choice 3
|
||||
Player: OK then
|
||||
)RAWSUD";
|
||||
|
||||
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FTestUserMetadata,
|
||||
"SUDSTest.TestUserMetadata",
|
||||
EAutomationTestFlags::EditorContext |
|
||||
EAutomationTestFlags::ClientContext |
|
||||
EAutomationTestFlags::ProductFilter)
|
||||
|
||||
|
||||
|
||||
bool FTestUserMetadata::RunTest(const FString& Parameters)
|
||||
{
|
||||
FSUDSMessageLogger Logger(false);
|
||||
FSUDSScriptImporter Importer;
|
||||
TestTrue("Import should succeed", Importer.ImportFromBuffer(GetData(UserMetadataInput), UserMetadataInput.Len(), "UserMetadataInput", &Logger, true));
|
||||
|
||||
auto Script = NewObject<USUDSScript>(GetTransientPackage(), "Test");
|
||||
const ScopedStringTableHolder StringTableHolder;
|
||||
Importer.PopulateAsset(Script, StringTableHolder.StringTable);
|
||||
|
||||
// Script shouldn't be the owner of the dialogue but it's the only UObject we've got right now so why not
|
||||
auto Dlg = USUDSLibrary::CreateDialogue(Script, Script);
|
||||
|
||||
Dlg->Start();
|
||||
|
||||
TestDialogueText(this, "First node", Dlg, "Player", "Good day sir");
|
||||
TestEqual("Check metadata empty", Dlg->GetAllSpeakerLineUserMetadata().Num(), 0);
|
||||
|
||||
Dlg->Continue();
|
||||
TestDialogueText(this, "Next", Dlg, "NPC", "Salutations to you too");
|
||||
FSUDSValue Actual = Dlg->GetSpeakerLineUserMetadata(FName("IsGreeting"));
|
||||
if (TestTrue("Boolean test", Actual.GetType() == ESUDSValueType::Boolean))
|
||||
{
|
||||
TestEqual("Boolean test", Actual.GetBooleanValue(), true);
|
||||
}
|
||||
|
||||
Dlg->Continue();
|
||||
TestDialogueText(this, "Next", Dlg, "Player", "What are we doing today?");
|
||||
Actual = Dlg->GetSpeakerLineUserMetadata(FName("IntValue"));
|
||||
if (TestTrue("Int test", Actual.GetType() == ESUDSValueType::Int))
|
||||
{
|
||||
TestEqual("Int test", Actual.GetIntValue(), 1);
|
||||
}
|
||||
Actual = Dlg->GetSpeakerLineUserMetadata(FName("Politeness"));
|
||||
if (TestTrue("Float test", Actual.GetType() == ESUDSValueType::Float))
|
||||
{
|
||||
TestEqual("Float test", Actual.GetFloatValue(), 3.142f);
|
||||
}
|
||||
Dlg->Continue();
|
||||
TestDialogueText(this, "Next", Dlg, "NPC", "Looks like we're doing some testing. How about a choice?");
|
||||
Actual = Dlg->GetSpeakerLineUserMetadata(FName("IntValue"));
|
||||
if (TestTrue("Expression test", Actual.GetType() == ESUDSValueType::Int))
|
||||
{
|
||||
TestEqual("Expression test", Actual.GetIntValue(), 5);
|
||||
}
|
||||
Actual = Dlg->GetSpeakerLineUserMetadata(FName("LookMumNoEquals"));
|
||||
if (TestTrue("Name & no equals test", Actual.GetType() == ESUDSValueType::Name))
|
||||
{
|
||||
TestEqual("Name & no equals test", Actual.GetNameValue(), FName("OK_Dear"));
|
||||
}
|
||||
|
||||
if (TestEqual("Choice count", Dlg->GetNumberOfChoices(), 3))
|
||||
{
|
||||
Actual = Dlg->GetChoiceUserMetadata(0, FName("RequirePoshness"));
|
||||
if (TestTrue("Choice 0 test", Actual.GetType() == ESUDSValueType::Int))
|
||||
{
|
||||
TestEqual("Choice 0 test", Actual.GetIntValue(), 10);
|
||||
}
|
||||
Actual = Dlg->GetChoiceUserMetadata(1, FName("RequirePoshness"));
|
||||
if (TestTrue("Choice 1 test A", Actual.GetType() == ESUDSValueType::Int))
|
||||
{
|
||||
TestEqual("Choice 1 test A", Actual.GetIntValue(), 15);
|
||||
}
|
||||
Actual = Dlg->GetChoiceUserMetadata(1, FName("RequireTopHat"));
|
||||
if (TestTrue("Choice 1 test B", Actual.GetType() == ESUDSValueType::Boolean))
|
||||
{
|
||||
TestEqual("Choice 1 test B", Actual.GetBooleanValue(), true);
|
||||
}
|
||||
auto Choice1All = Dlg->GetAllChoiceUserMetadata(1);
|
||||
TestEqual("Choice 1 test count", Choice1All.Num(), 2);
|
||||
TestEqual("Choice 2 test", Dlg->GetAllChoiceUserMetadata(2).Num(), 0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Script->MarkAsGarbage();
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
UE_ENABLE_OPTIMIZATION
|
||||
Reference in New Issue
Block a user