summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
Diffstat (limited to 'sal')
-rw-r--r--sal/cppunittester/cppunittester.cxx41
1 files changed, 40 insertions, 1 deletions
diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx
index 68858febcbb8..0888d1bd7836 100644
--- a/sal/cppunittester/cppunittester.cxx
+++ b/sal/cppunittester/cppunittester.cxx
@@ -37,6 +37,8 @@
#include "sal/main.h"
#include "cppunit/CompilerOutputter.h"
+#include "cppunit/Exception.h"
+#include "cppunit/TestFailure.h"
#include "cppunit/TestResult.h"
#include "cppunit/TestResultCollector.h"
#include "cppunit/TestRunner.h"
@@ -130,6 +132,37 @@ public:
};
#endif
+class LogFailuresAsTheyHappen : public CppUnit::TestListener
+{
+public:
+ virtual void addFailure( const CppUnit::TestFailure &failure ) SAL_OVERRIDE
+ {
+ printFailureLocation( failure.sourceLine() );
+ printFailedTestName( failure );
+ printFailureMessage( failure );
+ }
+
+private:
+ void printFailureLocation( const CppUnit::SourceLine &sourceLine )
+ {
+ if ( !sourceLine.isValid() )
+ std::cerr << "unknown:0:";
+ else
+ std::cerr << sourceLine.fileName() << ":" << sourceLine.lineNumber() << ":";
+ }
+
+ void printFailedTestName( const CppUnit::TestFailure &failure )
+ {
+ std::cerr << failure.failedTestName() << std::endl;
+ }
+
+ void printFailureMessage( const CppUnit::TestFailure &failure )
+ {
+ std::cerr << failure.thrownException()->message().shortDescription() << std::endl;
+ std::cerr << failure.thrownException()->message().details() << std::endl;
+ }
+};
+
//Allow the whole uniting testing framework to be run inside a "Protector"
//which knows about uno exceptions, so it can print the content of the
//exception before falling over and dying
@@ -182,6 +215,9 @@ public:
CppUnit::TestResultCollector collector;
result.addListener(&collector);
+ LogFailuresAsTheyHappen logger;
+ result.addListener(&logger);
+
#ifdef TIMETESTS
TimingListener timer;
result.addListener(&timer);
@@ -199,7 +235,10 @@ public:
for (size_t i = 0; i < protectors.size(); ++i)
result.popProtector();
- CppUnit::CompilerOutputter(&collector, CppUnit::stdCErr()).write();
+ if (collector.wasSuccessful())
+ CppUnit::CompilerOutputter(&collector, CppUnit::stdCErr()).printSuccess();
+ else
+ CppUnit::CompilerOutputter(&collector, CppUnit::stdCErr()).printStatistics();
return collector.wasSuccessful();
}
virtual bool operator()() const SAL_OVERRIDE