summaryrefslogtreecommitdiff
path: root/src/cppunit/Asserter.cpp
blob: b6e5015d6bc39982c2378285a3a62ec1b37c9c03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <cppunit/Asserter.h>
#include <cppunit/NotEqualException.h>


namespace CppUnit
{


/*! Asserter creates and throws failure exception.
 *
 * The following example show how to create an assertion that
 * checks if two XML strings are equivalent (extract from
 * XmlUniformiser.cpp of CppUnit test suite):
 *
 * \code
 * // Asserts that two XML strings are equivalent.
 * #define CPPUNITTEST_ASSERT_XML_EQUAL( expected, actual ) \
 *     ::CppUnitTest::checkXmlEqual( expected, actual,      \
 *                                  CPPUNIT_SOURCELINE() )
 * void 
 * checkXmlEqual( std::string expectedXml,
 *                std::string actualXml,
 *                CppUnit::SourceLine sourceLine )
 * {
 *   std::string expected = XmlUniformiser( expectedXml ).stripped();
 *   std::string actual = XmlUniformiser( actualXml ).stripped();
 * 
 *   if ( expected == actual )
 *     return;
 * 
 *   int index = notEqualIndex( expected, actual );
 *   CppUnit::OStringStream message;
 *   message  <<  "differ at index: "  <<  index  << "\n"
 *           <<  "expected: "  <<  expected.substr(index) << "\n"
 *           <<  "but was : "  <<  actual.substr( index );
 *   ::CppUnit::Asserter::failNotEqual( expected,
 *                                      actual,
 *                                      sourceLine,
 *                                      message.str() );
 * }
 *
 *
 * int 
 * notEqualIndex( std::string expectedXml,
 *                std::string actualXml )
 * {
 *   int index = 0;
 *   while ( index < actualXml.length()  &&  
 *           index < expectedXml.length()  &&
 *           actualXml[index] == expectedXml[index] )
 *     ++index;
 * 
 *   return index;
 * }
 * \endcode
 */
namespace Asserter
{


void 
fail( std::string message, 
      SourceLine sourceLine )
{
  throw Exception( message, sourceLine );
}


void 
failIf( bool shouldFail, 
        std::string message, 
        SourceLine location )
{
  if ( shouldFail )
    fail( message, location );
}


void 
failNotEqual( std::string expected, 
              std::string actual, 
              SourceLine sourceLine,
              std::string additionalMessage )
{
  throw NotEqualException( expected, 
                           actual, 
                           sourceLine, 
                           additionalMessage );
}


void 
failNotEqualIf( bool shouldFail,
                std::string expected, 
                std::string actual, 
                SourceLine sourceLine,
                std::string additionalMessage )
{
  if ( shouldFail )
    failNotEqual( expected, actual, sourceLine, additionalMessage );
}


} // namespace Asserter
} // namespace CppUnit