diff options
Diffstat (limited to 'test/unit/util/assert_white.h')
-rw-r--r-- | test/unit/util/assert_white.h | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/test/unit/util/assert_white.h b/test/unit/util/assert_white.h index 9425daa44..d001c5a84 100644 --- a/test/unit/util/assert_white.h +++ b/test/unit/util/assert_white.h @@ -15,6 +15,9 @@ #include <cxxtest/TestSuite.h> +#include <string> +#include <cstring> + #include "util/Assert.h" using namespace CVC4; @@ -39,9 +42,44 @@ public: TS_ASSERT_THROWS( Unimplemented(), UnimplementedOperationException ); TS_ASSERT_THROWS( IllegalArgument("x"), IllegalArgumentException ); TS_ASSERT_THROWS( CheckArgument(false, "x"), IllegalArgumentException ); - TS_ASSERT_THROWS( AlwaysAssertArgument(false, "x"), IllegalArgumentException ); + TS_ASSERT_THROWS( AlwaysAssertArgument(false, "x"), + IllegalArgumentException ); TS_ASSERT_THROWS_NOTHING( AssertArgument(true, "x") ); TS_ASSERT_THROWS_NOTHING( AssertArgument(true, "x") ); } + void testReallyLongAssert() { + string msg(1034, 'x'); + try { + AlwaysAssert(false, msg.c_str()); + TS_FAIL("Should have thrown an exception !"); + } catch(AssertionException& e) { + // we don't want to match on the entire string, because it may + // have an absolute path to the unit test binary, line number + // info, etc. + const char* theString = e.toString().c_str(); + const char* firstPart = + "Assertion failure\nvoid AssertWhite::testReallyLongAssert()\n"; + string lastPartStr = "\n\n false\n" + msg; + const char* lastPart = lastPartStr.c_str(); + TS_ASSERT(strncmp(theString, firstPart, strlen(firstPart)) == 0); + TS_ASSERT(strncmp(theString + strlen(theString) - strlen(lastPart), + lastPart, strlen(lastPart)) == 0); + } catch(...) { + TS_FAIL("Threw the wrong kind of exception !"); + } + } + + void testUnreachable() { + TS_ASSERT_THROWS( Unreachable(), UnreachableCodeException ); + TS_ASSERT_THROWS( Unreachable("hello"), UnreachableCodeException ); + TS_ASSERT_THROWS( Unreachable("hello %s", "world"), UnreachableCodeException ); + + int x = 5; + TS_ASSERT_THROWS( Unhandled(), UnhandledCaseException ); + TS_ASSERT_THROWS( Unhandled(x), UnhandledCaseException ); + TS_ASSERT_THROWS( Unhandled("foo"), UnhandledCaseException ); + TS_ASSERT_THROWS( Unhandled("foo %s baz", "bar"), UnhandledCaseException ); + } + }; |