diff --git a/alib2/test-src/main.cpp b/alib2/test-src/main.cpp index fdbbccd10a4fe8cc92d5204d2cd186b310040a4d..3fc603d66dd8d59871e3bc95a78b4cf6f5d263fd 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 © ); + + void operator =( const TestProgressListener © ); + +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(); }