1#ifndef CPPUNIT_EXCEPTION_H
2#define CPPUNIT_EXCEPTION_H
3
4#include <cppunit/Portability.h>
5#include <cppunit/SourceLine.h>
6#include <exception>
7#include <string>
8
9namespace CppUnit {
10
11/*! \brief Exceptions thrown by failed assertions.
12 * \ingroup BrowsingCollectedTestResult
13 *
14 * Exception is an exception that serves
15 * descriptive strings through its what() method
16 */
17class CPPUNIT_API Exception : public std::exception
18{
19public:
20
21    class Type
22    {
23    public:
24        Type( std::string type ) : m_type ( type ) {}
25
26        bool operator ==( const Type &other ) const
27        {
28	    return m_type == other.m_type;
29        }
30    private:
31        const std::string m_type;
32    };
33
34
35    Exception( std::string  message = "",
36	       SourceLine sourceLine = SourceLine() );
37
38#ifdef CPPUNIT_ENABLE_SOURCELINE_DEPRECATED
39    Exception( std::string  message,
40	       long lineNumber,
41	       std::string fileName );
42#endif
43
44    Exception (const Exception& other);
45
46    virtual ~Exception () throw();
47
48    Exception& operator= (const Exception& other);
49
50    const char *what() const throw ();
51
52    SourceLine sourceLine() const;
53
54#ifdef CPPUNIT_ENABLE_SOURCELINE_DEPRECATED
55    long lineNumber() const;
56    string fileName() const;
57
58    static const std::string UNKNOWNFILENAME;
59    static const long UNKNOWNLINENUMBER;
60#endif
61
62    virtual Exception *clone() const;
63
64    virtual bool isInstanceOf( const Type &type ) const;
65
66    static Type type();
67
68private:
69    // VC++ does not recognize call to parent class when prefixed
70    // with a namespace. This is a workaround.
71    typedef std::exception SuperClass;
72
73    std::string m_message;
74    SourceLine m_sourceLine;
75};
76
77
78} // namespace CppUnit
79
80#endif // CPPUNIT_EXCEPTION_H
81
82