4#include "../Foundation/Result.h"
5#include "../Foundation/StringPath.h"
6#include "../Foundation/StringSpan.h"
31 virtual void print(
StringSpan text,
size_t p0) = 0;
32 virtual void print(
StringSpan text,
size_t p0,
size_t p1) = 0;
35 template <
typename ConsoleType>
39 Output(ConsoleType& console) : console(console) {}
41 virtual void printLine(
StringSpan text)
override { console.printLine(text); }
42 virtual void print(
StringSpan text)
override { console.print(text); }
45 virtual void print(
StringSpan text,
size_t p0)
override { console.print(text, p0); }
46 virtual void print(
StringSpan text,
size_t p0,
size_t p1)
override { console.print(text, p0, p1); }
70 template <
typename Statistics>
71 void runGlobalMemoryReport(Statistics stats,
bool reportFailure =
true)
73 TestReport::MemoryStatistics memStats;
74 memStats.numAllocate = stats.numAllocate;
75 memStats.numReallocate = stats.numReallocate;
76 memStats.numRelease = stats.numRelease;
77 internalRunGlobalMemoryReport(memStats, reportFailure);
81 struct MemoryStatistics
83 size_t numAllocate = 0;
84 size_t numReallocate = 0;
85 size_t numRelease = 0;
89 void internalRunGlobalMemoryReport(MemoryStatistics stats,
bool reportFailure);
91 [[nodiscard]]
bool isTestEnabled(StringSpan testName)
const;
92 [[nodiscard]]
bool isSectionEnabled(StringSpan sectionName)
const;
94 void testCaseFinished(TestCase& testCase);
95 void printSectionResult(TestCase& testCase);
97 friend struct TestCase;
100 StringSpan currentSection;
101 StringSpan firstFailedTest;
102 StringSpan testToRun;
103 StringSpan sectionToRun;
157#define SC_TEST_EXPECT(e) recordExpectation(StringSpan(#e), (e)) ? (void)0 : (TestCase::report.debugBreakOnFailedTest ? SC_COMPILER_DEBUG_BREAK : (void)0)
unsigned int uint32_t
Platform independent (4) bytes unsigned int.
Definition PrimitiveTypes.h:38
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition Result.h:12
Pre-sized char array holding enough space to represent a file system path.
Definition StringPath.h:42
An read-only view over a string (to avoid including Strings library when parsing is not needed).
Definition StringSpan.h:37
A test case that can be split into multiple sections.
Definition Testing.h:112
bool recordExpectation(StringSpan expression, Result status)
Records an expectation for a given expression.
Execute
Definition Testing.h:133
@ OnlyExplicit
Test is executed only if explicitly requested with –test-section.
@ Default
Test is executed if all tests are enabled or if this specific one matches –test-section.
TestCase(TestReport &report, StringSpan testName)
Adds this TestCase to a TestReport with a name.
TestReport & report
The TestReport object passed in the constructor.
Definition Testing.h:144
bool recordExpectation(StringSpan expression, bool status, StringSpan detailedError=StringSpan())
Records an expectation for a given expression.
bool test_section(StringSpan sectionName, Execute execution=Execute::Default)
Starts a new test section.
Collects multiple TestCase and reports their results.
Definition Testing.h:22
StringPath applicationRootDirectory
Path to application (on macOS is different from executable path)
Definition Testing.h:52
StringPath executableFile
Path to current executable.
Definition Testing.h:51
int getTestReturnCode() const
Gets return code for this process.
bool quietMode
If true will not print recaps at start or end of the test.
Definition Testing.h:57
bool abortOnFirstFailedTest
If true will abort after first failed test.
Definition Testing.h:55
StringPath libraryRootDirectory
Path to sources directory for library.
Definition Testing.h:50
bool debugBreakOnFailedTest
If true will issue a debugger halt when a test fails.
Definition Testing.h:56
TestReport(IOutput &console, int argc, const char **argv)
Build from a console and executable arguments.