Skip to content
Snippets Groups Projects
Commit f0f8b3c2 authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

ASSERT now throws runtime_error instead of calling qFatal

parent a085133b
No related branches found
No related tags found
No related merge requests found
......@@ -26,11 +26,6 @@ target_include_directories(${lib}
)
target_link_libraries(${lib} ${GSL_LIBRARIES} ${FFTW3_LIBRARIES} ${Boost_LIBRARIES})
if(BORNAGAIN_GUI)
target_include_directories(${lib} PUBLIC ${Qt5Core_INCLUDE_DIRS})
target_link_libraries(${lib} ${Qt5Core_LIBRARIES})
endif()
if(BORNAGAIN_MPI)
add_definitions(-DBORNAGAIN_MPI)
include_directories(${MPI_INCLUDE_PATH})
......
......@@ -18,18 +18,14 @@
// ASSERT must be declared as a macro, not a function, in order for the error
// message to correctly report the source line where the assertion failed.
#ifdef HAVE_QT
// For an alternative implementation that calls qFatal, see Base/Utils/Assert.h < 29oct20.
#include <QtGlobal>
#define ASSERT(condition) \
if (!(condition)) \
qFatal("Assertion %s failed in %s, line %d", (#condition), __FILE__, __LINE__)
#include <stdexcept>
#include <sstream>
#else // HAVE_QT undefined
#include <cassert>
#define ASSERT(condition) assert(condition)
#endif // HAVE_QT
#define ASSERT(condition) if (!(condition)) { \
std::stringstream msg; \
msg << "Assertion " << (#condition) << " failed in " << __FILE__ << ", line " << __LINE__; \
throw std::runtime_error(msg.str()); }
#endif // BORNAGAIN_BASE_UTILS_ASSERT_H
#include "Base/Utils/Assert.h"
#include "Tests/GTestWrapper/google_test.h"
class TestAssert : public ::testing::Test
{
};
TEST_F(TestAssert, Assert)
{
EXPECT_NO_THROW(ASSERT(1));
#ifndef WIN32 // Win currently dies with msg '' -- TODO verify, repair, restore test
EXPECT_DEATH(ASSERT(0), "Assertion .* failed .*");
#endif
}
......@@ -7,6 +7,8 @@
#include <memory>
#include <stdexcept>
#define EXPECT_ASSERT_TRIGGERED(condition) EXPECT_THROW((condition), std::runtime_error)
class SampleBuilderNodeTest : public ::testing::Test
{
public:
......@@ -66,7 +68,7 @@ TEST_F(SampleBuilderNodeTest, builderParameters)
builderNode.reset();
EXPECT_EQ(builder.use_count(), 1);
EXPECT_EQ(builderNode.parameterPool()->size(), 0u);
EXPECT_DEATH(builderNode.createMultiLayer(), ".*");
EXPECT_ASSERT_TRIGGERED(builderNode.createMultiLayer());
}
//! Checks assignment operator.
......
......@@ -2,6 +2,8 @@
#include "GUI/coregui/utils/GUIHelpers.h"
#include "Tests/GTestWrapper/google_test.h"
#define EXPECT_ASSERT_TRIGGERED(condition) EXPECT_THROW((condition), std::runtime_error)
class TestSessionItem : public ::testing::Test
{
};
......@@ -25,7 +27,7 @@ TEST_F(TestSessionItem, defaultTag)
// insertion without tag is forbidden
SessionItem* child = new SessionItem(modelType);
EXPECT_DEATH(item->insertItem(0, child), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(0, child));
delete child;
EXPECT_EQ(item->numberOfChildren(), 0);
}
......@@ -55,7 +57,7 @@ TEST_F(TestSessionItem, singleTagAndItems)
SessionItem* child = new SessionItem(modelType);
EXPECT_TRUE(item->insertItem(0, child, tag1));
// double insertion is forbidden
EXPECT_DEATH(item->insertItem(0, child, tag1), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(0, child, tag1));
EXPECT_TRUE(child->parent() == item.get());
EXPECT_EQ(item->numberOfChildren(), 1);
......@@ -135,7 +137,7 @@ TEST_F(TestSessionItem, tagWithLimits)
EXPECT_TRUE(item->insertItem(-1, child, tag1));
}
auto extra = new SessionItem(modelType);
EXPECT_DEATH(item->insertItem(-1, extra, tag1), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(-1, extra, tag1));
}
TEST_F(TestSessionItem, tagsAndModelTypes)
......@@ -250,25 +252,25 @@ TEST_F(TestSessionItem, modelTypes)
EXPECT_TRUE(item->insertItem(0, new SessionItem(model2), "Tag1"));
auto child = new SessionItem(model3);
EXPECT_DEATH(item->insertItem(0, child, "Tag1"), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(0, child, "Tag1"));
delete child;
child = new SessionItem(model4);
EXPECT_DEATH(item->insertItem(0, child, "Tag1"), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(0, child, "Tag1"));
delete child;
child = new SessionItem(model5);
EXPECT_DEATH(item->insertItem(0, child, "Tag1"), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(0, child, "Tag1"));
delete child;
EXPECT_TRUE(item->registerTag("Tag2", 0, -1, QStringList() << model3 << model4 << model5));
child = new SessionItem(model1);
EXPECT_DEATH(item->insertItem(0, child, "Tag2"), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(0, child, "Tag2"));
delete child;
child = new SessionItem(model2);
EXPECT_DEATH(item->insertItem(0, child, "Tag2"), ".*");
EXPECT_ASSERT_TRIGGERED(item->insertItem(0, child, "Tag2"));
delete child;
EXPECT_TRUE(item->insertItem(0, new SessionItem(model3), "Tag2"));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment