C++ Library containing a lot of needful things: Stack Trace, Command Line Parser, Resource Handling, Configuration Files, Unix Command Execution, Directories, Regular Expressions, Tokenizer, Function Trace, Standard Extensions.
98 lines
2.8 KiB
98 lines
2.8 KiB
/** @file |
|
|
|
$Id$ |
|
|
|
$Date$ |
|
$Author$ |
|
|
|
@copy © Marc Wä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() { |
|
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; |
|
}
|
|
|