/** @file
$ Id $
$ Date $
$ Author $
@ copy & copy ; Marc W & auml ; ckerlin
@ license LGPL , see file < a href = " license.html " > COPYING < / a >
$ Log $
Revision 1.2 2004 / 08 / 28 16 : 21 : 25 marc
mrw - c + + - 0.92 ( mrw )
- new file : version . cxx
- new file header for all sources
- work around warning in mrw : : auto < T >
- possibility to compile without log4cxx
- work around bugs in demangle . h and libiberty . h
- corrections in documentation
- added simple tracing mechanism
- more warnings
- small corrections in Auto < > : : Free and a new test for it
- possibility to compile without stack trace
*/
# include <mrw/exception.hxx>
# include <cppunit/TestFixture.h>
# include <cppunit/ui/text/TestRunner.h>
# include <cppunit/extensions/HelperMacros.h>
# include <cppunit/extensions/TestFactoryRegistry.h>
# include <cppunit/XmlOutputter.h>
# include <fstream>
namespace mrw {
class AutoExcStderrTest : public CppUnit : : TestFixture {
private :
bool enter_unexpectedThrow ;
bool exit_unexpectedThrow ;
bool enter_passUnexpected ;
bool exit_passUnexpected ;
bool enter_catchUnexpected ;
bool exit_catchUnexpected ;
public :
void setUp ( ) {
enter_unexpectedThrow = false ;
exit_unexpectedThrow = false ;
enter_passUnexpected = false ;
exit_passUnexpected = false ;
enter_catchUnexpected = false ;
exit_catchUnexpected = false ;
}
void unexpectedThrow ( ) throw ( std : : bad_exception ) {
enter_unexpectedThrow = true ;
throw mrw : : exception ( ) ;
exit_unexpectedThrow = true ;
}
void passUnexpected ( ) throw ( std : : bad_exception ) {
enter_passUnexpected = true ;
unexpectedThrow ( ) ;
exit_passUnexpected = true ;
}
void catchUnexpected ( ) throw ( ) {
enter_catchUnexpected = true ;
bool caught ( false ) ;
try {
passUnexpected ( ) ;
} catch ( std : : bad_exception & ) {
caught = true ;
}
CPPUNIT_ASSERT ( caught ) ;
exit_catchUnexpected = true ;
}
void testcase ( ) {
std : : set_unexpected ( [ ] { throw std : : bad_exception ( ) ; } ) ;
catchUnexpected ( ) ;
CPPUNIT_ASSERT ( enter_catchUnexpected & &
enter_passUnexpected & &
enter_unexpectedThrow & &
exit_catchUnexpected & &
! exit_passUnexpected & &
! exit_unexpectedThrow ) ;
}
CPPUNIT_TEST_SUITE ( AutoExcStderrTest ) ;
CPPUNIT_TEST ( testcase ) ;
CPPUNIT_TEST_SUITE_END ( ) ;
} ;
CPPUNIT_TEST_SUITE_REGISTRATION ( AutoExcStderrTest ) ;
}
int main ( int argc , char * * argv ) try {
std : : ofstream ofs ( ( * argv + std : : string ( " .xml " ) ) . c_str ( ) ) ;
CppUnit : : TextUi : : TestRunner runner ;
runner . setOutputter ( new CppUnit : : XmlOutputter ( & runner . result ( ) , ofs ) ) ;
runner . addTest ( CppUnit : : TestFactoryRegistry : : getRegistry ( ) . makeTest ( ) ) ;
return runner . run ( ) ? 0 : 1 ;
} catch ( std : : exception & e ) {
std : : cerr < < " ***Exception: " < < e . what ( ) < < std : : endl ;
return 1 ;
}