/** @file $Id$ $Date$ $Author$ @copy © Marc Wäckerlin @license LGPL, see file COPYING $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 - 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 #include #include #include #include #include #include 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: "<