diff options
author | Mattes D <github@xoft.cz> | 2019-01-23 20:54:29 +0100 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2019-08-05 21:42:54 +0200 |
commit | 3722a239bf1502606a3ef4f025021f23ac3fcb88 (patch) | |
tree | 037aaa22f1f132e54387f9a1c48d5c4333eb79e2 /tests/TestHelpers.h | |
parent | Check for nil in cWorld:SpawnSplitExperienceOrbs binding (#4354) (diff) | |
download | cuberite-3722a239bf1502606a3ef4f025021f23ac3fcb88.tar cuberite-3722a239bf1502606a3ef4f025021f23ac3fcb88.tar.gz cuberite-3722a239bf1502606a3ef4f025021f23ac3fcb88.tar.bz2 cuberite-3722a239bf1502606a3ef4f025021f23ac3fcb88.tar.lz cuberite-3722a239bf1502606a3ef4f025021f23ac3fcb88.tar.xz cuberite-3722a239bf1502606a3ef4f025021f23ac3fcb88.tar.zst cuberite-3722a239bf1502606a3ef4f025021f23ac3fcb88.zip |
Diffstat (limited to '')
-rw-r--r-- | tests/TestHelpers.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/TestHelpers.h b/tests/TestHelpers.h new file mode 100644 index 000000000..2e43e1e0d --- /dev/null +++ b/tests/TestHelpers.h @@ -0,0 +1,79 @@ +// Helper macros for writing exception-based tests + + + + +/** The exception that is thrown if a test fails. +It doesn't inherit from any type so that it is not possible to catch it by a mistake, +it needs to be caught explicitly (used in the TEST_THROWS). +It bears a single message that is to be displayed to stderr. */ +class TestException +{ +public: + TestException(const AString & aMessage): + mMessage(aMessage) + { + } + + AString mMessage; +}; + + + + + +/** Checks that the two values are equal; if not, throws a TestException. */ +#define TEST_EQUAL(VAL1, VAL2) \ + if (VAL1 != VAL2) \ + { \ + throw TestException(Printf("%s (line %d): Equality test failed: %s != %s", \ + __FUNCTION__, __LINE__, \ + #VAL1, #VAL2 \ + )); \ + } + + + +/** Checks that the two values are not equal; if they are, throws a TestException. */ +#define TEST_NOTEQUAL(VAL1, VAL2) \ + if (VAL1 == VAL2) \ + { \ + throw TestException(Printf("%s (line %d): Inequality test failed: %s == %s", \ + __FUNCTION__, __LINE__, \ + #VAL1, #VAL2 \ + )); \ + } + + + +/** Checks that the statement throws an exception of the specified class. */ +#define TEST_THROWS(Stmt, ExcClass) \ + try \ + { \ + Stmt; \ + throw TestException(Printf("%s (line %d): Failed to throw an exception of type %s", \ + __FUNCTION__, __LINE__, \ + #ExcClass \ + )); \ + } \ + catch (const ExcClass &) \ + { \ + /* This is the expected case. */ \ + } \ + catch (const std::exception & exc) \ + { \ + throw TestException(Printf("%s (line %d): An unexpected std::exception descendant was thrown, was expecting type %s. Message is: %s", \ + __FUNCTION__, __LINE__, \ + #ExcClass, exc.what() \ + )); \ + } \ + catch (...) \ + { \ + throw TestException(Printf("%s (line %d): An unexpected exception object was thrown, was expecting type %s", \ + __FUNCTION__, __LINE__, \ + #ExcClass \ + )); \ + } + + + |