5#if !WITH_LOW_LEVEL_TESTS
22 std::ostringstream Result;
24 auto Iter = Args.
begin();
30 if (Iter == Args.end())
34 else if (Iter != Args.begin())
38 Result << std::string(
TCHAR_TO_UTF8(*Expression.TrimStartAndEnd())) <<
" = " << *Iter++;
47 return FString(Result.str().c_str());
51#define IMPLEMENT_SIMPLE_AUTOMATION_TEST_PRIVATE_LLT( TClass, PrettyName, TFlagsOrTags, FileName, LineNumber ) \
52 class TClass : public FAutomationTestBase \
55 TClass( const FString& InName) \
56 : FAutomationTestBase( InName, false ) \
58 TestFlags = ExtractAutomationTestFlags(TFlagsOrTags); \
59 PrettyNameDotNotation = FString(PrettyName).Replace(TEXT("::"), TEXT(".")); \
60 if (!(TestFlags & EAutomationTestFlags_ApplicationContextMask)) \
62 TestFlags |= EAutomationTestFlags_ApplicationContextMask; \
64 if (!(TestFlags & EAutomationTestFlags_FilterMask)) \
66 TestFlags |= EAutomationTestFlags::EngineFilter; \
68 FAutomationTestFramework::Get().RegisterAutomationTestTags(GetBeautifiedTestName(), TFlagsOrTags); \
70 virtual EAutomationTestFlags GetTestFlags() const override { return TestFlags; } \
71 virtual bool IsStressTest() const { return false; } \
72 virtual uint32 GetRequiredDeviceNum() const override { return 1; } \
73 virtual FString GetTestSourceFileName() const override { return FileName; } \
74 virtual int32 GetTestSourceFileLine() const override { return LineNumber; } \
76 virtual void GetTests(TArray<FString>& OutBeautifiedNames, TArray <FString>& OutTestCommands) const override \
78 OutBeautifiedNames.Add(PrettyNameDotNotation); \
79 OutTestCommands.Add(FString());\
81 void TestBody(const FString& Parameters); \
82 virtual bool RunTest(const FString& Parameters) { \
83 TestBody(Parameters); \
84 return !HasAnyErrors(); \
86 virtual FString GetBeautifiedTestName() const override { return PrettyNameDotNotation; } \
88 EAutomationTestFlags TestFlags; \
89 FString PrettyNameDotNotation; \
92#define LLT_JOIN(Prefix, Counter) LLT_JOIN_INNER(Prefix, Counter)
93#define LLT_JOIN_INNER(Prefix, Counter) Prefix##Counter
95#define TEST_CASE_NAMED_STR(TClass, StrName, PrettyName, TFlagsOrTags) \
96 IMPLEMENT_SIMPLE_AUTOMATION_TEST_PRIVATE_LLT(TClass, PrettyName, TFlagsOrTags, __FILE__, __LINE__) \
99 TClass LLT_JOIN(TClass, Instance)(TEXT(StrName)); \
101 void TClass::TestBody(const FString& Parameters)
104#define TEST_CASE_GENERATED_NAME_UNIQUE LLT_JOIN(FLLTAdaptedTest, __COUNTER__)
105#define LLT_STR(Macro) #Macro
106#define LLT_STR_EXPAND(Macro) LLT_STR(Macro)
107#define TEST_CASE_GENERATED_NAME_UNIQUE_STR LLT_STR_EXPAND(TEST_CASE_GENERATED_NAME_UNIQUE)
109#define TEST_CASE(PrettyName, TFlagsOrTags) TEST_CASE_NAMED_STR(TEST_CASE_GENERATED_NAME_UNIQUE, TEST_CASE_GENERATED_NAME_UNIQUE_STR, PrettyName, TFlagsOrTags)
110#define TEST_CASE_NAMED(ClassName, PrettyName, TFlagsOrTags) TEST_CASE_NAMED_STR(ClassName, #ClassName, PrettyName, TFlagsOrTags)
114#define MAKE_UNIQUE_IDENT(str) LLT_JOIN(str, __COUNTER__)
116#define MAKE_UNIQUE_IDENT(str) LLT_JOIN(str, __LINE__)
120#define DISABLED_TEST_CASE(...) static void MAKE_UNIQUE_IDENT(disabled_test_()
121#define DISABLED_TEST_CASE_NAMED(ClassName, ...) static void MAKE_UNIQUE_IDENT(disabled_test_)()
122#define DISABLED_SCENARIO(...) static void MAKE_UNIQUE_IDENT(disabled_scenario_)()
123#define DISABLED_SECTION(...) auto MAKE_UNIQUE_IDENT(disabled_section_) = []()
126#define CHECK(...) if (!(__VA_ARGS__)) { FAutomationTestFramework::Get().GetCurrentTest()->AddError(TEXT("Condition failed")); }
128#define CHECK_FALSE(...) if (!!(__VA_ARGS__)) { FAutomationTestFramework::Get().GetCurrentTest()->AddError(TEXT("Condition expected to return false but returned true")); }
129#define CHECKED_IF(...) if (!!(__VA_ARGS__))
130#define CHECKED_ELSE(...) if (!(__VA_ARGS__))
132#define CHECK_MESSAGE(Message, ...) if (!(__VA_ARGS__)) { FAutomationTestFramework::Get().GetCurrentTest()->AddError(Message); }
134#define CHECK_FALSE_MESSAGE(Message, ...) if (!!(__VA_ARGS__)) { FAutomationTestFramework::Get().GetCurrentTest()->AddError(Message); }
136#define REQUIRE(...) if (!(__VA_ARGS__)) { FAutomationTestFramework::Get().GetCurrentTest()->AddError(TEXT("Required condition failed, interrupting test")); return; }
138#define REQUIRE_MESSAGE(Message, ...) if (!(__VA_ARGS__)) { FAutomationTestFramework::Get().GetCurrentTest()->AddError(Message); return; }
139#define STATIC_REQUIRE(...) static_assert(__VA_ARGS__, #__VA_ARGS__);
140#define STATIC_CHECK(...) static_assert(__VA_ARGS__, #__VA_ARGS__);
141#define STATIC_CHECK_FALSE(...) static_assert(!(__VA_ARGS__), "!(" #__VA_ARGS__ ")");
143#define CHECK_EQUALS(What, X, Y) FAutomationTestFramework::Get().GetCurrentTest()->TestEqual(What, X, Y);
144#define CHECK_EQUALS_SENSITIVE(What, X, Y) FAutomationTestFramework::Get().GetCurrentTest()->TestEqualSensitive(What, X, Y);
145#define CHECK_NOT_EQUALS(What, X, Y) FAutomationTestFramework::Get().GetCurrentTest()->TestNotEqual(What, X, Y);
146#define CHECK_NOT_EQUALS_SENSITIVE(What, X, Y) FAutomationTestFramework::Get().GetCurrentTest()->TestNotEqualSensitive(What, X, Y);
148#define SECTION(Text) FAutomationTestFramework::Get().GetCurrentTest()->AddInfo(TEXT(Text));
149#define FAIL_CHECK(Message) FAutomationTestFramework::Get().GetCurrentTest()->AddError(Message);
151#define CAPTURE(...) FAutomationTestFramework::Get().GetCurrentTest()->AddInfo(CaptureExpressionsAndValues(#__VA_ARGS__, __VA_ARGS__));
152#define INFO(Message) FAutomationTestFramework::Get().GetCurrentTest()->AddInfo(Message);
153#define WARN(Message) FAutomationTestFramework::Get().GetCurrentTest()->AddWarning(Message);
154#define ADD_WARNING(Message) FAutomationTestFramework::Get().GetCurrentTest()->AddWarning(Message);
155#define ADD_ERROR(Message) FAutomationTestFramework::Get().GetCurrentTest()->AddError(Message);
156#define FAIL_ON_MESSAGE(Message) FAutomationTestFramework::Get().GetCurrentTest()->AddExpectedError(Message);
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FString CaptureExpressionsAndValues(const FString &InExpressions, ArgTypes &&... InExpressionsValues)
Captures expressions and their evaluated values. Internal use only for the low level tests adapter.
Definition LowLevelTestAdapter.h:20
#define TCHAR_TO_UTF8(str)
Definition StringConv.h:1021
UE_FORCEINLINE_HINT DataType::RangedForIteratorType begin()
Definition UnrealString.h.inl:301