Quick Links:

bal | bbl | bdl | bsl

Classes | Namespaces | Defines

bsls_asserttest.h File Reference

Provide a test facility for assertion macros. More...

Go to the source code of this file.

Classes

struct  bsls::AssertTest
class  bsls::AssertTestHandlerGuard

Namespaces

namespace  bsls

Defines

#define BSLS_ASSERTTEST_SAFE_2_BUILD_FLAG   false
#define BSLS_ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG   false
#define BSLS_ASSERTTEST_ASSERT_ACTIVE_FLAG   false
#define BSLS_ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG   false
#define BSLS_ASSERTTEST_IS_ACTIVE(TYPE)
#define BSLS_ASSERTTEST_CAN_CHECK_LEVELS
#define BSLS_ASSERTTEST_CHECK_LEVEL_ARG   false
#define BSLS_ASSERTTEST_BRUTE_FORCE_IMP(RESULT, LVL, EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_VALIDATE_DISABLED_MACROS
#define BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)   if (false) { EXPRESSION_UNDER_TEST ; } else {}
#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_PASS(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_OPT_PASS(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS_RAW(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_PASS_RAW(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_OPT_PASS_RAW(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS_RAW(EXPRESSION_UNDER_TEST)   { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_FAIL(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_OPT_FAIL(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL_RAW(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_FAIL_RAW(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_OPT_FAIL_RAW(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL_RAW(EXPRESSION_UNDER_TEST)   BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_RECURSIVELY_INCLUDED_TESTDRIVER_GUARD

Detailed Description


Define Documentation

#define BSLS_ASSERTTEST_SAFE_2_BUILD_FLAG   false
#define BSLS_ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG   false
#define BSLS_ASSERTTEST_ASSERT_ACTIVE_FLAG   false
#define BSLS_ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG   false
#define BSLS_ASSERTTEST_IS_ACTIVE (   TYPE  ) 
Value:
(                                     \
    (   '\0' == TYPE[1]                                                       \
     || BSLS_ASSERTTEST_SAFE_2_BUILD_FLAG                                     \
    )                                                                         \
    &&                                                                        \
    (   ('S' == TYPE[0] && BSLS_ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG)           \
     || ('A' == TYPE[0] && BSLS_ASSERTTEST_ASSERT_ACTIVE_FLAG)                \
     || ('O' == TYPE[0] && BSLS_ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG)            \
    )                                                                         \
)
#define BSLS_ASSERTTEST_CAN_CHECK_LEVELS
#define BSLS_ASSERTTEST_CHECK_LEVEL_ARG   false
#define BSLS_ASSERTTEST_BRUTE_FORCE_IMP (   RESULT,
  LVL,
  EXPRESSION_UNDER_TEST 
)
Value:
{ \
    try {                                                                     \
        EXPRESSION_UNDER_TEST;                                                \
                                                                              \
        ASSERT(BloombergLP::bsls::AssertTest::tryProbe(RESULT, LVL));         \
    }                                                                         \
    catch (const BloombergLP::bsls::AssertTestException& e) {                 \
        ASSERT(BloombergLP::bsls::AssertTest::catchProbe(                     \
                                            RESULT,                           \
                                            BSLS_ASSERTTEST_CHECK_LEVEL_ARG,  \
                                            LVL,                              \
                                            e,                                \
                                            __FILE__));                       \
    }                                                                         \
}
#define BSLS_ASSERTTEST_VALIDATE_DISABLED_MACROS
#define BSLS_ASSERTTEST_DISABLED_IMP (   EXPRESSION_UNDER_TEST  )     if (false) { EXPRESSION_UNDER_TEST ; } else {}

In non-exception enabled builds there is no way to safely use the ASSERT_FAIL macros as they require installing an assert-handler that throws a specific exception. ASSERT_FAIL negative tests require calling a method under test with out-of-contract values; running those tests without a functioning assert-handler would trigger undefined behavior with no protection so we choose to simple not execute the test calls that are designed to fail by expanding the test macros to an empty statement, { }. All of the ASSERT_PASS macros are expanded however, as such tests call methods with in-contract values, and they may still be needed to guarantee stateful side-effects required by the test-driver.

#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_PASS (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_OPT_PASS (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS_RAW (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_PASS_RAW (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_OPT_PASS_RAW (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS_RAW (   EXPRESSION_UNDER_TEST  )     { EXPRESSION_UNDER_TEST; }
#define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_FAIL (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_OPT_FAIL (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL_RAW (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_FAIL_RAW (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_OPT_FAIL_RAW (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL_RAW (   EXPRESSION_UNDER_TEST  )     BSLS_ASSERTTEST_DISABLED_IMP(EXPRESSION_UNDER_TEST)
#define BSLS_ASSERTTEST_RECURSIVELY_INCLUDED_TESTDRIVER_GUARD