New assertion macros

2002-11-26
2002-11-26
  • Johan Nilsson
    Johan Nilsson
    2002-11-26

    Hi,

    I've found extensive use for macros dealing with exceptions, e.g.:

    void testVector()
    {
       std::vector<int> vec;
      CPPUNIT_ASSERT_EX("Succeded to get non-existing element", vec.at(0),
    std::exception);

    vec.push_back(2);
    CPPUNIT_ASSERT_NOEX(vec.at(0));
    CPPUNIT_ASSERT_EQUAL(2, vec.at(0));
    }

    Did I miss something, or does this already exist? Basic macro definitions
    included at end of message.

    Regards // Johan

    ---------------------

    #ifndef CPPUNIT_ASSERT_EXCEPTION
    #define CPPUNIT_ASSERT_EXCEPTION(ErrorMsg, Statement, ExpectedExceptionType)
    \ {                 \ bool __exceptionCaught = false;  \ try                \ {                 \      Statement;           \ }                 \ catch (ExpectedExceptionType&)  \ {                 \   __exceptionCaught = true;    \ }                 \ CPPUNIT_ASSERT_MESSAGE(#ErrorMsg, __exceptionCaught); \ }
    #define CPPUNIT_ASSERT_EX CPPUNIT_ASSERT_EXCEPTION
    #endif // CPPUNIT_ASSERT_EXCEPTION

    #ifndef CPPUNIT_ASSERT_NOEXCEPTION
    #define CPPUNIT_ASSERT_NOEXCEPTION(expr)                 \ try                                   \ {                                    \   expr;                                 \ }                                    \ catch(std::exception& e)                        \ {                                    \   CPPUNIT_ASSERT_MESSAGE(#expr + std::string(", ") + e.what(), false); \ }                                    \ catch (...)                               \ {                                    \   CPPUNIT_ASSERT_MESSAGE("Exception from &#039;"###expr##"&#039;", false);    \ }
    #define CPPUNIT_ASSERT_NOEX CPPUNIT_ASSERT_NOEXCEPTION
    #endif // CPPUNIT_ASSERT_NOEXCEPTION