From f717d7a113969cc85b638f0bbdf7661323d8ad00 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sat, 24 May 2014 10:34:11 +0200
Subject: [PATCH] Better test result output

---
 alib2/test-src/main.cpp | 87 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 84 insertions(+), 3 deletions(-)

diff --git a/alib2/test-src/main.cpp b/alib2/test-src/main.cpp
index fdbbccd10a..3fc603d66d 100644
--- a/alib2/test-src/main.cpp
+++ b/alib2/test-src/main.cpp
@@ -2,10 +2,92 @@
 #include <cppunit/CompilerOutputter.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/ui/text/TestRunner.h>
+#include <cppunit/TestResultCollector.h>
+#include <cppunit/TestResult.h>
 
+#include <cppunit/Test.h>
+#include <cppunit/TestFailure.h>
+#include <cppunit/portability/Stream.h>
+#include <cppunit/TestListener.h>
+
+CPPUNIT_NS_BEGIN
+
+class CPPUNIT_API TestProgressListener : public TestListener
+{
+public:
+  TestProgressListener();
+
+  virtual ~TestProgressListener();
+
+  void startTest( Test *test );
+
+  void addFailure( const TestFailure &failure );
+
+  void endTest( Test *test );
+
+  int getResult() const;
+private:
+  TestProgressListener( const TestProgressListener &copy );
+
+  void operator =( const TestProgressListener &copy );
+
+private:
+  int m_Result;
+  bool m_lastTestFailed;
+};
+
+TestProgressListener::TestProgressListener() : m_Result( 0 ), m_lastTestFailed( false )
+{
+}
+
+TestProgressListener::~TestProgressListener()
+{
+}
+
+void TestProgressListener::startTest( Test * test )
+{
+	stdCOut() << test->getName() << ":\n";
+	stdCOut().flush();
+
+	m_lastTestFailed = false;
+}
+
+void TestProgressListener::addFailure( const TestFailure &failure )
+{
+	stdCOut() << " : " << (failure.isError() ? "error" : "assertion");
+
+	m_lastTestFailed = true;
+	m_Result++;
+}
+
+void TestProgressListener::endTest( Test * test)
+{
+	stdCOut() << "Result (" << test->getName() << "):";
+	stdCOut().flush();
+
+	if ( !m_lastTestFailed )
+		stdCOut() <<  " : OK";
+	else
+		stdCOut() << " : Fail";
+	stdCOut() << "\n\n";
+}
+
+int TestProgressListener::getResult() const {
+	return m_Result;
+}
+
+CPPUNIT_NS_END
 
 int main(int , char*[])
 {
+  CppUnit::TestResult controller;
+
+  CppUnit::TestResultCollector result;
+  controller.addListener( &result );
+
+  CppUnit::TestProgressListener progressListener;
+  controller.addListener( &progressListener );
+
   // Get the top level suite from the registry
   CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
 
@@ -17,8 +99,7 @@ int main(int , char*[])
   runner.setOutputter( new CppUnit::CompilerOutputter( &runner.result(),
                                                        std::cerr ) );
   // Run the tests.
-  bool wasSucessful = runner.run();
+  runner.run( controller );
 
-  // Return error code 1 if the one of test failed.
-  return wasSucessful ? 0 : 1;
+  return progressListener.getResult();
 }
-- 
GitLab