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
|