104 virtual void initialise();
123 void beginTest (
const String& testName);
144 void expect (
bool testResult,
const String& failureMessage =
String());
150 template <
class ValueType>
154 expectResultAndPrint (actual, expected, result,
"", failureMessage);
160 template <
class ValueType>
164 expectResultAndPrint (value, valueToCompareTo, result,
"unequal to", failureMessage);
170 template <
class ValueType>
173 bool result = value > valueToCompareTo;
174 expectResultAndPrint (value, valueToCompareTo, result,
"greater than", failureMessage);
180 template <
class ValueType>
183 bool result = value < valueToCompareTo;
184 expectResultAndPrint (value, valueToCompareTo, result,
"less than", failureMessage);
190 template <
class ValueType>
193 bool result = value >= valueToCompareTo;
194 expectResultAndPrint (value, valueToCompareTo, result,
"greater or equal to", failureMessage);
200 template <
class ValueType>
203 bool result = value <= valueToCompareTo;
204 expectResultAndPrint (value, valueToCompareTo, result,
"less or equal to", failureMessage);
211 template <
class ValueType>
214 const ValueType diff = std::abs (actual - expected);
215 const bool result = diff <= maxAbsoluteError;
217 expectResultAndPrint (actual, expected, result,
" within " +
String (maxAbsoluteError) +
" of" , failureMessage);
222 #define expectDoesNotThrow(expr) \
230 expect (false, "Expected: does not throw an exception, Actual: throws."); \
234 #define expectThrows(expr) \
238 expect (false, "Expected: throws an exception, Actual: does not throw."); \
246 #define expectThrowsType(expr, type) \
250 expect (false, "Expected: throws an exception of type " #type ", Actual: does not throw."); \
258 expect (false, "Expected: throws an exception of type " #type ", Actual: throws another type."); \
265 void logMessage (
const String& message);
281 Random getRandom()
const;
285 template <
class ValueType>
286 void expectResultAndPrint (ValueType value, ValueType valueToCompareTo,
bool result,
287 String compDescription, String failureMessage)
291 if (failureMessage.isNotEmpty())
292 failureMessage <<
" -- ";
294 failureMessage <<
"Expected value" << (compDescription.isEmpty() ?
"" :
" ")
295 << compDescription <<
": " << valueToCompareTo
296 <<
", Actual value: " << value;
299 expect (result, failureMessage);
303 const String name, category;
304 UnitTestRunner* runner =
nullptr;
350 void runAllTests (
int64 randomSeed = 0);
358 void runTestsInCategory (
const String& category,
int64 randomSeed = 0);
363 void setAssertOnFailure (
bool shouldAssert)
noexcept;
368 void setPassesAreLogged (
bool shouldDisplayPasses)
noexcept;
382 : unitTestName (name),
383 subcategoryName (subCategory)
401 Time startTime = Time::getCurrentTime();
409 int getNumResults() const noexcept;
414 const
TestResult* getResult (
int index) const noexcept;
420 virtual
void resultsUpdated();
426 virtual
void logMessage (const
String& message);
431 virtual
bool shouldAbortTests();
438 String currentSubCategory;
440 bool assertOnFailure = true, logPasses = false;
447 void addFail (const
String& failureMessage);
Holds a resizable array of primitive or copy-by-value objects.
An array designed for holding objects.
A random number generator.
A special array for holding a list of strings.
Holds an absolute date and time.
Runs a set of unit tests.
This is a base class for classes that perform a unit test.
const String & getName() const noexcept
Returns the name of the test.
const String & getCategory() const noexcept
Returns the category of the test.
void expectEquals(ValueType actual, ValueType expected, String failureMessage=String())
Compares a value to an expected value.
void expectGreaterThan(ValueType value, ValueType valueToCompareTo, String failureMessage=String())
Checks whether a value is greater than a comparison value.
void expectWithinAbsoluteError(ValueType actual, ValueType expected, ValueType maxAbsoluteError, String failureMessage=String())
Computes the difference between a value and a comparison value, and if it is larger than a specified ...
virtual void runTest()=0
Implement this method in your subclass to actually run your tests.
void expectLessThan(ValueType value, ValueType valueToCompareTo, String failureMessage=String())
Checks whether a value is less than a comparison value.
void expectLessOrEqual(ValueType value, ValueType valueToCompareTo, String failureMessage=String())
Checks whether a value is less or equal to a comparison value.
void expectNotEquals(ValueType value, ValueType valueToCompareTo, String failureMessage=String())
Checks whether a value is not equal to a comparison value.
void expectGreaterOrEqual(ValueType value, ValueType valueToCompareTo, String failureMessage=String())
Checks whether a value is greater or equal to a comparison value.
constexpr bool exactlyEqual(Type a, Type b)
Equivalent to operator==, but suppresses float-equality warnings.
long long int64
A platform-independent 64-bit integer type.
Contains the results of a test.
Time endTime
The time at which this test ended.
StringArray messages
A list of messages describing the failed tests.
String unitTestName
The main name of this test (i.e.
String subcategoryName
The name of the current subcategory (i.e.