[Cppunit-cvs] cppunit2/src/cpput assert.cpp,1.5,1.6 cpput.vcproj,1.22,1.23 properties.cpp,1.3,1.4 te
Brought to you by:
blep
Update of /cvsroot/cppunit/cppunit2/src/cpput In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18083/src/cpput Modified Files: assert.cpp cpput.vcproj properties.cpp testcase.cpp testcontext.cpp testfailureguard.cpp testinfo.cpp testrunner.cpp Log Message: * TestContext: no longer rely on exception to retrieve failure * TestContext: removed TestListener support since everything is handled by TestInfo * TestFailureGuard: modified to report fault using TestInfo instead of exception * TestListener, TestResult, TestRunResult: removed, replaced by TestInfo * TextTestDriver: fixed bug in result merging (not prefixed with "/result"). Still need work to handle assertion and fault reporting. Index: assert.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/assert.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** assert.cpp 20 Nov 2004 12:17:51 -0000 1.5 --- assert.cpp 20 Nov 2004 15:07:00 -0000 1.6 *************** *** 1,5 **** # include <cpput/assert.h> - # include <cpput/resultexception.h> - # include <cpput/location.h> # include <cpput/message.h> # include <cpput/stringize.h> --- 1,3 ---- Index: testrunner.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/testrunner.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** testrunner.cpp 20 Nov 2004 12:17:51 -0000 1.4 --- testrunner.cpp 20 Nov 2004 15:07:00 -0000 1.5 *************** *** 4,9 **** #include <cpput/testcontext.h> #include <cpput/testinfo.h> - #include <cpput/testlistener.h> - #include <cpput/testresult.h> #include <cpput/testsuite.h> #include <cpput/testvisitor.h> --- 4,7 ---- *************** *** 52,56 **** ! class TestRunner::TestTrackerListener : public TestListener { --- 50,54 ---- ! /* class TestRunner::TestTrackerListener : public TestListener { *************** *** 98,102 **** const OpenTest::TestPlanEntry *testEntry_; }; ! --- 96,100 ---- const OpenTest::TestPlanEntry *testEntry_; }; ! */ *************** *** 138,144 **** const OpenTest::Properties &configuration ) { - TestTrackerListener listener( tracker ); TestContext testContext; - testContext.add( listener ); tracker.startTestRun(); --- 136,140 ---- *************** *** 150,154 **** OpenTest::TestId id = entry.test(); DeclaredTests::const_iterator itTest = tests_.find( id ); - listener.setTestPlanEntry( entry ); tracker.startTest( entry ); TestInfo::startNewTest(); --- 146,149 ---- *************** *** 177,180 **** --- 172,176 ---- } } + sendTestStatus( entry, tracker ); tracker.endTest( entry ); } *************** *** 184,187 **** --- 180,197 ---- + void + TestRunner::sendTestStatus( const OpenTest::TestPlanEntry &entry, + OpenTest::TestRunTracker &tracker ) + { + TestInfo::updateTestStatistics(); + OpenTest::Properties result; + bool success = !TestInfo::testHasFailed(); + result["result/status/success"] = success; + if ( TestInfo::testHasFailed() ) + result["result/status/type"] = TestInfo::faultCount() ? "fault" : "assertion"; + tracker.mergeInTestResult( entry, result ); + } + + } // namespace CppUT Index: cpput.vcproj =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/cpput.vcproj,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** cpput.vcproj 20 Nov 2004 12:17:51 -0000 1.22 --- cpput.vcproj 20 Nov 2004 15:07:00 -0000 1.23 *************** *** 347,353 **** </File> <File - RelativePath="..\..\include\cpput\location.h"> - </File> - <File RelativePath="..\..\include\cpput\message.h"> </File> --- 347,350 ---- *************** *** 365,371 **** </File> <File - RelativePath="..\..\include\cpput\resultexception.h"> - </File> - <File RelativePath="..\..\include\cpput\stringize.h"> </File> --- 362,365 ---- *************** *** 401,410 **** </File> <File - RelativePath="..\..\include\cpput\testlistener.h"> - </File> - <File - RelativePath="..\..\include\cpput\testresult.h"> - </File> - <File RelativePath=".\testrunner.cpp"> </File> --- 395,398 ---- *************** *** 413,419 **** </File> <File - RelativePath="..\..\include\cpput\testrunresult.h"> - </File> - <File RelativePath=".\testsuite.cpp"> </File> --- 401,404 ---- Index: testcontext.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/testcontext.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** testcontext.cpp 17 Nov 2004 21:47:10 -0000 1.9 --- testcontext.cpp 20 Nov 2004 15:07:00 -0000 1.10 *************** *** 1,12 **** #include <cpput/testcontext.h> - #include <cpput/resultexception.h> #include <cpput/testcase.h> ! #include <cpput/testlistener.h> ! #include <cpput/testresult.h> ! #include <cpput/testsuite.h> ! #include <cpput/testvisitor.h> ! #include <cpput/message.h> ! #include <cpput/typehelper.h> ! #include <algorithm> --- 1,5 ---- #include <cpput/testcontext.h> #include <cpput/testcase.h> ! #include <cpput/testinfo.h> *************** *** 14,69 **** ! TestContext::TestContext() ! : testSucceeded_( true ) ! { ! } ! ! ! void TestContext::run( AbstractTestCase &test ) { ! testSucceeded_ = true; ! ! bool initialized = protect( test, makeMemFn0( &test, ! &AbstractTestCase::setUp ) ); if ( initialized ) { ! protect( test, makeMemFn0( &test, &AbstractTestCase::run ) ); ! protect( test, makeMemFn0( &test, &AbstractTestCase::tearDown) ); } ! if ( testSucceeded_ ) ! dispatchTestSuccessResult( test ); } bool ! TestContext::protect( Test &test, ! const Functor0 &functor ) ! { ! return guardsChain_.protect( *this, functor, test ); ! } ! ! ! void ! TestContext::add( TestListener &listener ) ! { ! listeners_.push_back( &listener ); ! } ! ! ! void ! TestContext::remove( TestListener &listener ) { ! while ( true ) ! { ! Listeners::iterator it = std::find( listeners_.begin(), ! listeners_.end(), ! &listener ); ! if ( it == listeners_.end() ) ! break; ! listeners_.erase( it ); ! } } --- 7,29 ---- ! bool TestContext::run( AbstractTestCase &test ) { ! bool initialized = protect( makeMemFn0( &test, &AbstractTestCase::setUp ) ); if ( initialized ) { ! protect( makeMemFn0( &test, &AbstractTestCase::run ) ); ! protect( makeMemFn0( &test, &AbstractTestCase::tearDown) ); } ! return !TestInfo::testHasFailed(); } bool ! TestContext::protect( const Functor0 &functor ) { ! return guardsChain_.protect( functor ); } *************** *** 76,116 **** void ! TestContext::removeGuard() ! { ! guardsChain_.removeGuard(); ! } ! ! ! void ! TestContext::dispatchTestResult( TestResult &result ) ! { ! if ( result.failed() ) ! testSucceeded_ = false; ! ! Listeners::const_iterator it = listeners_.begin(); ! Listeners::const_iterator itEnd = listeners_.end(); ! while ( it != itEnd ) ! { ! TestListener &listener = **it++; ! listener.processTestResult( result, *this ); ! } ! } ! ! ! void ! TestContext::dispatchTestSuccessResult( Test &test ) ! { ! Message message; ! message.setStatus( true ); ! TestResult result( test, message ); ! dispatchTestResult( result ); ! } ! ! ! void ! TestContext::handleResultException( Test &test, const ResultException &e ) { ! TestResult result( test, e.message(), e.location() ); ! dispatchTestResult( result ); } --- 36,42 ---- void ! TestContext::removeLastGuard() { ! guardsChain_.removeLastGuard(); } Index: testfailureguard.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/testfailureguard.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** testfailureguard.cpp 4 Aug 2004 19:57:33 -0000 1.10 --- testfailureguard.cpp 20 Nov 2004 15:07:00 -0000 1.11 *************** *** 1,4 **** #include <cpput/testfailureguard.h> ! #include <cpput/resultexception.h> #include <cpput/typehelper.h> --- 1,4 ---- #include <cpput/testfailureguard.h> ! #include <cpput/testinfo.h> #include <cpput/typehelper.h> *************** *** 36,63 **** return callNextInChain( context ); } ! catch ( const TestResultsPropagationException &e ) { ! e.handleFailures( context.exceptionHandler_ ); } ! catch ( const ResultException &e ) { ! context.exceptionHandler_.handleResultException( context.protectedTest_, e ); } catch ( const std::exception &e ) { ! Message message( "unexpected exception caught" ); ! message.add( "Type: " + extractObjectType( e, "std::exception" ) ); ! message.add( std::string("What: ") + e.what() ); ! ! FaultException fault( message ); ! context.exceptionHandler_.handleResultException( context.protectedTest_, fault ); ! } catch ( ... ) { ! Message message( "unexpected unknown exception caught" ); ! FaultException fault( message ); ! context.exceptionHandler_.handleResultException( context.protectedTest_, fault ); } return false; } }; --- 36,81 ---- return callNextInChain( context ); } ! catch ( const AbortingAssertionException & ) { ! // Already injected into result } ! #ifndef CPPTL_NO_RTTI ! catch ( const std::exception &e ) { ! addFault( extractObjectType( e, "std::exception" ), e.what() ); ! } ! #else // @todo Need to add catch for all standard derived classes. ! // Warning: => they don't always exist on all platforms. ! catch ( const std::runtime_error &e ) ! { ! addFault( extractObjectType( e, "std::runtime_error" ), e.what() ); } catch ( const std::exception &e ) { ! addFault( extractObjectType( e, "std::exception" ), e.what() ); ! } ! #endif ! catch ( ... ) ! { ! OpenTest::Properties fault; ! fault["type"] = "unexpected exception"; ! fault["message"].append( "caught unexpected exception of unknown type." ); ! TestInfo::appendFaultToResult( fault ); } return false; } + + private: + void addFault( const std::string &exceptionType, + const char *what ) + { + OpenTest::Properties fault; + fault["type"] = "unexpected exception"; + fault["exception_type"] = exceptionType; + fault["message"].append( "caught unexpected exception." ); + fault["message"].append( what ); + TestInfo::appendFaultToResult( fault ); + } }; *************** *** 106,110 **** void ! TestExceptionGuardChain::removeGuard() { if ( guards_.size() <= 2 ) // should we throw an exception ? --- 124,128 ---- void ! TestExceptionGuardChain::removeLastGuard() { if ( guards_.size() <= 2 ) // should we throw an exception ? *************** *** 117,125 **** bool ! TestExceptionGuardChain::protect( TestExceptionHandler &exceptionHandler, ! Functor0 test, ! Test &protectedTest ) { ! TestExceptionGuard::Context context( exceptionHandler, test, protectedTest ); return guards_.front()->protect( context ); } --- 135,141 ---- bool ! TestExceptionGuardChain::protect( Functor0 test ) { ! TestExceptionGuard::Context context( test ); return guards_.front()->protect( context ); } *************** *** 137,167 **** - - // class TestResultsPropagationException - // ////////////////////////////////////////////////////////////////// - TestResultsPropagationException::TestResultsPropagationException() - : std::exception( "propagating multiple test failures" ) - { - } - - - void - TestResultsPropagationException::addResult( Test &test, - const ResultException &e ) - { - results_.push_back( ResultData( test, e ) ); - } - - - void - TestResultsPropagationException::handleFailures( TestExceptionHandler &handler ) const - { - for ( unsigned int index = 0; index < results_.size(); ++index ) - { - const ResultData &data = results_[index]; - handler.handleResultException( data.test_, data.exception_ ); - } - } - - } // namespace CppUT --- 153,155 ---- Index: testinfo.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/testinfo.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** testinfo.cpp 20 Nov 2004 12:17:51 -0000 1.4 --- testinfo.cpp 20 Nov 2004 15:07:00 -0000 1.5 *************** *** 56,59 **** --- 56,64 ---- } + void updateTestStatistics() + { + TestInfo::mergeInResult( "statistics/assertions", assertionCount_ ); + } + void newAssertion() { *************** *** 139,142 **** --- 144,152 ---- } + void updateTestStatistics() + { + data().updateTestStatistics(); + } + OpenTest::PropertiesAccessor result() { *************** *** 176,189 **** } ! unsigned int CPPUT_API assertionCount() { return data().assertionCount_; } ! unsigned int CPPUT_API failedAssertionCount() { ! return data().failedAssertionCount_; } void mergeInResult( const OpenTest::Properties &result ) { --- 186,219 ---- } ! unsigned int assertionCount() { return data().assertionCount_; } ! unsigned int failedAssertionCount() { ! return result()["assertions"].listSize(); ! } ! ! unsigned int faultCount() ! { ! return result()["faults"].listSize(); ! } ! ! bool testHasFailed() ! { ! const OpenTest::PropertiesAccessor &accessor = result(); ! return accessor["assertions"].hasList() ! || accessor["faults"].hasList(); } + + + void appendFaultToResult( const OpenTest::Properties &fault ) + { + appendToResult( "faults", fault ); + } + + void mergeInResult( const OpenTest::Properties &result ) { Index: properties.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/properties.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** properties.cpp 20 Nov 2004 12:12:01 -0000 1.3 --- properties.cpp 20 Nov 2004 15:07:00 -0000 1.4 *************** *** 697,700 **** --- 697,714 ---- + unsigned int + PropertiesAccessor::listSize() const + { + return properties_ ? properties_->listSize() : 0; + } + + + bool + PropertiesAccessor::hasList() const + { + return properties_ ? properties_->hasList() : false; + } + + // ////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////// Index: testcase.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/cpput/testcase.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** testcase.cpp 17 Nov 2004 21:47:10 -0000 1.4 --- testcase.cpp 20 Nov 2004 15:07:00 -0000 1.5 *************** *** 1,4 **** --- 1,6 ---- #include <cpput/testcase.h> + #include <cpput/assert.h> #include <cpput/functor.h> + #include <cpput/message.h> #include <cpput/testcontext.h> #include <cpput/testvisitor.h> *************** *** 124,128 **** void run() { ! throw CppUT::AssertException( message_ ); } --- 126,130 ---- void run() { ! CPPUT_FAIL( message_ ); } |