libcryfs/test/cpp-utils/assert/assert_release_test.cpp

49 lines
1.2 KiB
C++
Raw Normal View History

#include <gtest/gtest.h>
#include <gmock/gmock.h>
2018-07-09 04:34:08 +02:00
#include <regex>
2015-07-22 13:38:36 +02:00
//Include the ASSERT macro for a release build
2016-07-10 22:15:48 +02:00
#ifndef NDEBUG
2015-07-22 13:38:36 +02:00
#define NDEBUG
2016-07-10 22:15:48 +02:00
#endif
2016-02-11 12:53:42 +01:00
#include "cpp-utils/assert/assert.h"
2015-07-22 13:38:36 +02:00
using testing::MatchesRegex;
using testing::HasSubstr;
2015-07-22 13:38:36 +02:00
TEST(AssertTest_ReleaseBuild, DoesntThrowIfTrue) {
ASSERT(true, "bla");
}
TEST(AssertTest_ReleaseBuild, ThrowsIfFalse) {
EXPECT_THROW(
ASSERT(false, "bla"),
cpputils::AssertFailed
);
}
TEST(AssertTest_ReleaseBuild, AssertMessage) {
try {
ASSERT(2==5, "my message");
FAIL();
} catch (const cpputils::AssertFailed &e) {
2018-07-09 04:34:08 +02:00
std::string msg = e.what();
// For some reason, the following doesn't seem to work in MSVC. Possibly because of the multiline string?
/*EXPECT_THAT(e.what(), MatchesRegex(
R"(Assertion \[2==5\] failed in .*assert_release_test.cpp:27: my message)"
));*/
EXPECT_TRUE(std::regex_search(e.what(), std::regex(R"(Assertion \[2==5\] failed in .*assert_release_test.cpp:27: my message)")));
2015-07-22 13:38:36 +02:00
}
}
TEST(AssertTest_ReleaseBuild, AssertMessageContainsBacktrace) {
try {
ASSERT(2==5, "my message");
FAIL();
} catch (const cpputils::AssertFailed &e) {
EXPECT_THAT(e.what(), HasSubstr(
"cpputils::backtrace"
));
}
}