summaryrefslogtreecommitdiff
path: root/src/cppunit/TestCase.cpp
blob: f2379c5f4632e2654e3b67d0a6895323e27bde5c (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
#include <cppunit/Portability.h>
#include <typeinfo>
#include <stdexcept>

#include <cppunit/TestCase.h>
#include <cppunit/Exception.h>
#include <cppunit/TestResult.h>


CPPUNIT_NS_BEGIN


/** Constructs a test case.
 *  \param name the name of the TestCase.
 **/
TestCase::TestCase( const std::string &name )
    : m_name(name)
{
}


/// Run the test and catch any exceptions that are triggered by it 
void 
TestCase::run( TestResult *result )
{
  result->startTest(this);

  try {
    setUp();

    try {
      runTest();
    }
    catch ( Exception &e ) {
      Exception *copy = e.clone();
      result->addFailure( this, copy );
    }
    catch ( std::exception &e ) {
      result->addError( this, new Exception( Message( "uncaught std::exception", 
                                                      e.what() ) ) );
    }
    catch (...) {
      Exception *e = new Exception( Message( "uncaught unknown exception" ) );
      result->addError( this, e );
    }

    try {
      tearDown();
    }
    catch (...) {
      result->addError( this, new Exception( Message( "tearDown() failed" ) ) );
    }
  }
  catch (...) {
    result->addError( this, new Exception( Message( "setUp() failed" ) ) );
  }
  
  result->endTest( this );
}


/// All the work for runTest is deferred to subclasses 
void 
TestCase::runTest()
{
}


/** Constructs a test case for a suite.
 * \deprecated This constructor was used by fixture when TestFixture did not exist.
 *             Have your fixture inherits TestFixture instead of TestCase.
 * \internal
 *  This TestCase was intended for use by the TestCaller and should not
 *  be used by a test case for which run() is called.
 **/
TestCase::TestCase()
    : m_name( "" )
{
}


/// Destructs a test case
TestCase::~TestCase()
{
}


/// Returns the name of the test case
std::string 
TestCase::getName() const
{ 
  return m_name; 
}
  

CPPUNIT_NS_END