summaryrefslogtreecommitdiff
path: root/src/cppunit/Protector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cppunit/Protector.cpp')
-rw-r--r--src/cppunit/Protector.cpp69
1 files changed, 57 insertions, 12 deletions
diff --git a/src/cppunit/Protector.cpp b/src/cppunit/Protector.cpp
index 626829c..5c171ec 100644
--- a/src/cppunit/Protector.cpp
+++ b/src/cppunit/Protector.cpp
@@ -3,6 +3,7 @@
#include <cppunit/Protector.h>
#include <cppunit/TestResult.h>
#include "ProtectorContext.h"
+#include <memory>
CPPUNIT_NS_BEGIN
@@ -17,24 +18,68 @@ Protector::~Protector()
void
-Protector::reportTestFailure( const Message &message,
- const ProtectorContext &context,
- bool isError )
+Protector::reportError( const ProtectorContext &context,
+ const Exception &error ) const
{
- Message actualMessage;
+ std::auto_ptr<Exception> actualError( error.clone() );
+ actualError->setMessage( actualMessage( actualError->message(), context ) );
+ context.m_result->addError( context.m_test,
+ actualError.release() );
+}
+
+
+
+void
+Protector::reportError( const ProtectorContext &context,
+ const Message &message,
+ const SourceLine &sourceLine ) const
+{
+ reportError( context, Exception( message, sourceLine ) );
+}
+
+
+void
+Protector::reportFailure( const ProtectorContext &context,
+ const Exception &failure ) const
+{
+ std::auto_ptr<Exception> actualFailure( failure.clone() );
+ actualFailure->setMessage( actualMessage( actualFailure->message(), context ) );
+ context.m_result->addFailure( context.m_test,
+ actualFailure.release() );
+}
+
+
+Message
+Protector::actualMessage( const Message &message,
+ const ProtectorContext &context ) const
+{
+ Message theActualMessage;
if ( context.m_shortDescription.empty() )
- actualMessage = message;
+ theActualMessage = message;
else
{
- actualMessage = Message( context.m_shortDescription,
- message.shortDescription() );
- actualMessage.addDetail( message );
+ theActualMessage = Message( context.m_shortDescription,
+ message.shortDescription() );
+ theActualMessage.addDetail( message );
}
- if ( isError )
- context.m_result->addError( context.m_test, new Exception( message ) );
- else
- context.m_result->addFailure( context.m_test, new Exception( message ) );
+ return theActualMessage;
+}
+
+
+
+
+ProtectorGuard::ProtectorGuard( TestResult *result,
+ Protector *protector )
+ : m_result( result )
+{
+ m_result->pushProtector( protector );
+}
+
+
+ProtectorGuard::~ProtectorGuard()
+{
+ m_result->popProtector();
}