diff options
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/test/TestToolsTracker.h')
-rw-r--r-- | Src/external_dependencies/openmpt-trunk/test/TestToolsTracker.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/test/TestToolsTracker.h b/Src/external_dependencies/openmpt-trunk/test/TestToolsTracker.h new file mode 100644 index 00000000..91d36dec --- /dev/null +++ b/Src/external_dependencies/openmpt-trunk/test/TestToolsTracker.h @@ -0,0 +1,92 @@ +/* + * TestToolsTracker.h + * ------------------ + * Purpose: Unit test framework for OpenMPT. + * Notes : Really basic functionality that relies on a debugger that catches + * exceptions and breaks right at the spot where it gets thrown. + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#pragma once + +#include "openmpt/all/BuildSettings.hpp" + + +#ifdef ENABLE_TESTS +#ifdef MODPLUG_TRACKER + + +#include "mpt/test/test.hpp" + + +OPENMPT_NAMESPACE_BEGIN + + +namespace Test { + + +#if MPT_COMPILER_MSVC +// With MSVC, break directly using __debugbreak intrinsic instead of calling DebugBreak which breaks one stackframe deeper than we want +#define MyDebugBreak() __debugbreak() +#else +#define MyDebugBreak() DebugBreak() +#endif + + +class mpt_test_reporter + : public mpt::test::silent_reporter +{ +public: + mpt_test_reporter() = default; + ~mpt_test_reporter() override = default; +public: + inline void immediate_breakpoint() override { + MyDebugBreak(); + } +}; + + +// Verify that given parameters are 'equal'. Break directly into the debugger if not. +// The exact meaning of equality is based on operator== of the compared types. +#define VERIFY_EQUAL(x,y) \ + do { \ + if(!((x) == (y))) { \ + MyDebugBreak(); \ + } \ + } while(0) \ +/**/ + +// Like VERIFY_EQUAL, only differs for libopenmpt +#define VERIFY_EQUAL_NONCONT VERIFY_EQUAL + +// Like VERIFY_EQUAL, only differs for libopenmpt +#define VERIFY_EQUAL_QUIET_NONCONT VERIFY_EQUAL + +#define VERIFY_EQUAL_EPS(x,y,eps) \ + do { \ + if(std::abs((x) - (y)) > (eps)) { \ + MyDebugBreak(); \ + } \ + } while(0) \ +/**/ + + +#define DO_TEST(func) \ + do { \ + if(IsDebuggerPresent()) { \ + func(); \ + } \ + } while(0) \ +/**/ + + +} // namespace Test + + +OPENMPT_NAMESPACE_END + + +#endif // MODPLUG_TRACKER +#endif // ENABLE_TESTS |