Skip to content

Commit ad1adf9

Browse files
pull in the qassert-meta library.
Use it to print additional information on any recognized QP asserts encountered during unit testing.
1 parent 1ba3078 commit ad1adf9

File tree

6 files changed

+52
-2
lines changed

6 files changed

+52
-2
lines changed

CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ add_compile_options(-Wall -Wextra -Werror)
99

1010
set(CMS_EXTERNALS_TOP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/externals)
1111
set(CMS_CMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cpputest-for-qpc-lib/cmake CACHE INTERNAL "")
12+
set(CMS_QASSERT_META_TOP_DIR ${CMS_EXTERNALS_TOP_DIR}/qassert-meta)
1213

1314
if(NOT DEFINED CMS_QPC_TOP_DIR)
1415
set(CMS_QPC_TOP_DIR ${CMS_EXTERNALS_TOP_DIR}/qpc)
@@ -21,5 +22,13 @@ if(NOT DEFINED CMS_QPC_TOP_DIR)
2122
FetchContent_MakeAvailable(qpc)
2223
endif(NOT DEFINED CMS_QPC_TOP_DIR)
2324

25+
FetchContent_Declare(qassert-meta
26+
GIT_REPOSITORY https://github.com/covemountainsoftware/qassert-meta.git
27+
GIT_TAG a53c87e1a351f9c0444fcd2c68bb0583e2109b11
28+
SOURCE_DIR ${CMS_QASSERT_META_TOP_DIR}
29+
)
30+
message("Fetching qassert-meta git repository")
31+
FetchContent_MakeAvailable(qassert-meta)
32+
2433
include(${CMS_CMAKE_DIR}/qpcCMakeSupport.cmake)
2534
add_subdirectory(cpputest-for-qpc-lib)

cpputest-for-qpc-lib/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ add_library(cpputest-for-qpc-lib
1111
src/cms_cpputest_qf_onCleanup.cpp
1212
src/cpputestMain.cpp
1313
${CMS_QPC_QF_SRCS})
14-
14+
target_link_libraries(cpputest-for-qpc-lib qassert-meta-lib)
1515
add_subdirectory(tests)
1616

1717
target_include_directories(cpputest-for-qpc-lib PUBLIC

cpputest-for-qpc-lib/include/cmsQAssertMockSupport.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,26 @@ namespace test {
3434
static constexpr const char* QASSERT_MOCK_NAME = "QASSERT";
3535
static constexpr const char* ONERROR_FUNC_NAME = "Q_onError";
3636

37+
void QAssertMetaOutputEnable();
38+
void QAssertMetaOutputDisable();
39+
3740
inline void MockExpectQAssert()
3841
{
42+
//if we are formally expecting an assert,
43+
//then disable the meta output.
44+
QAssertMetaOutputDisable();
45+
3946
mock(QASSERT_MOCK_NAME)
4047
.expectOneCall(ONERROR_FUNC_NAME)
4148
.ignoreOtherParameters();
4249
}
4350

4451
inline void MockExpectQAssert(const char* module, int id)
4552
{
53+
//if we are formally expecting an assert,
54+
//then disable the meta output.
55+
QAssertMetaOutputDisable();
56+
4657
mock(QASSERT_MOCK_NAME)
4758
.expectOneCall(ONERROR_FUNC_NAME)
4859
.withParameter("module", module)

cpputest-for-qpc-lib/src/cms_cpputest_q_onAssert.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,34 @@
3030
#include "qp_port.h" //required for Q_NORETURN definition, needed by qsafe.h
3131
#include "qsafe.h"
3232
#include "cmsQAssertMockSupport.hpp"
33+
#include "qassert-meta.h"
34+
35+
static bool m_printAssertMeta = true;
36+
37+
void cms::test::QAssertMetaOutputEnable()
38+
{
39+
m_printAssertMeta = true;
40+
}
41+
42+
void cms::test::QAssertMetaOutputDisable()
43+
{
44+
m_printAssertMeta = false;
45+
}
3346

3447
void Q_onError(char const* const module, int_t const id)
3548
{
36-
//fprintf(stderr, "%s(%s , %d)\n", __FUNCTION__ , module, id);
49+
if (m_printAssertMeta)
50+
{
51+
fprintf(stdout, "\n%s(%s:%d)\n", __FUNCTION__ , module, id);
52+
QAssertMetaDescription meta;
53+
bool found = QAssertMetaGetDescription(module, id, &meta);
54+
if (found)
55+
{
56+
fprintf(stdout, "Additional details on (%s:%d): %s\n", module, id, meta.brief);
57+
fprintf(stdout, "Tips/More:\n%s\n", meta.tips);
58+
fprintf(stdout, "URL: %s\n", meta.url);
59+
}
60+
}
3761

3862
// The TEST_EXIT macro used below is throwing an exception.
3963
// However, many of QP/QF methods are marked as 'noexcept'

cpputest-for-qpc-lib/src/cms_cpputest_qf_ctrl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
#include <cassert>
3030
#include <vector>
3131
#include "CppUTest/TestHarness.h"
32+
#include "qassert-meta.h"
33+
#include "cmsQAssertMockSupport.hpp"
3234

3335
namespace cms {
3436
namespace test {
@@ -80,6 +82,9 @@ void Setup(enum_t const maxPubSubSignalValue, uint32_t ticksPerSecond,
8082
CreatePoolConfigsFromArg(pubSubEventMemPoolConfigs);
8183
}
8284

85+
QAssertMetaInit();
86+
QAssertMetaOutputEnable();
87+
8388
QF_init();
8489
QF_psInit(l_subscriberStorage->data(), maxPubSubSignalValue);
8590

externals/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
qpc/
2+
qassert-meta/

0 commit comments

Comments
 (0)