Salome HOME
additional information about failed tests
authorasl <asl@opencascade.com>
Thu, 7 Sep 2017 06:13:31 +0000 (09:13 +0300)
committerasl <asl@opencascade.com>
Fri, 22 Sep 2017 12:13:26 +0000 (15:13 +0300)
src/HYDRO_tests/TestLib_Listener.cxx
src/HYDRO_tests/TestLib_Listener.h
src/HYDRO_tests/test_HYDROData_Main.cxx

index 593c8d6e29b3404c4531c09bbf312c39fb9692e8..7c79e858d763a15bd30a16b5719844002e3920ab 100644 (file)
 
 #include <TestLib_Listener.h>
 #include <cppunit/Test.h>
+#include <cppunit/TestFailure.h>
+#include <cppunit/SourceLine.h>
 #include <iostream>
+#include <QStringList>
 
 #ifdef WIN32
   #include <windows.h>
@@ -69,7 +72,7 @@ INT64 GetTimeForCurrentThreadInMs()
   \brief Constructor
 */
 TestLib_Listener::TestLib_Listener()
-: myStart( 0 ), myComplete( 0 )
+: myStart( 0 ), myComplete( 0 ), myNbTests( 0 ), myNbSuites( 0 )
 {
 }
 
@@ -122,6 +125,18 @@ void TestLib_Listener::endTest( CppUnit::Test* theTest )
   INT64 anExecTimeMS = aCurTime - myStart;
   myComplete += anExecTimeMS;
   std::cout << " " << anExecTimeMS << " ms" << std::endl;
+
+  myNbTests++;
+}
+
+int TestLib_Listener::GetNbTests() const
+{
+  return myNbTests;
+}
+
+int TestLib_Listener::GetNbSuites() const
+{
+  return myNbSuites;
 }
 
 /**
@@ -138,6 +153,7 @@ void TestLib_Listener::startSuite( CppUnit::Test* theTest )
 */
 void TestLib_Listener::endSuite( CppUnit::Test* theTest )
 {
+  myNbSuites++;
 }
 
 /**
@@ -146,5 +162,27 @@ void TestLib_Listener::endSuite( CppUnit::Test* theTest )
 */
 void TestLib_Listener::addFailure( const CppUnit::TestFailure& theFailure )
 {
+  std::string failedTest = theFailure.failedTest()->getName();
+  CppUnit::SourceLine failedLocation = theFailure.sourceLine();
+
+  QString aFile = QString::fromStdString( failedLocation.fileName() );
+  aFile.replace( '\\', '/' );
+  QStringList parts = aFile.split( '/' );
+  aFile = parts.last();
+  std::string cFile = aFile.toStdString();
+
+  int aLine = failedLocation.lineNumber();
+
+  static char aBuf[1024];
+  sprintf( aBuf, "Failed %s: %s : %i", failedTest.c_str(), cFile.c_str(), aLine );
+
+  myFailures.push_back( aBuf );
 }
 
+void TestLib_Listener::DumpFailures()
+{
+  int n = (int)myFailures.size();
+  printf( "FAILED TESTS: %i\n", n );
+  for( int i=0; i<n; i++ )
+    printf( "  %s\n", myFailures[i].c_str() );
+}
index 8953a29d7e1b4ea21c18987cd047ed0bd4105ccf..5bb456e67ac0de670e5e8a497511f233a775533c 100644 (file)
@@ -19,6 +19,8 @@
 #pragma once
 
 #include <cppunit/TestListener.h>
+#include <vector>
+#include <string>
 
 typedef long long INT64;   ///< the cross-platform type definition for 64-bits integer
 
@@ -34,6 +36,9 @@ public:
 
   void Clear();
   INT64 GetCompleteTimeInMS() const;
+  int GetNbTests() const;
+  int GetNbSuites() const;
+  void DumpFailures();
     
   virtual void startTest( CppUnit::Test* );
   virtual void endTest( CppUnit::Test* );
@@ -46,5 +51,8 @@ public:
 private:
   INT64 myStart; ///< start time in milliseconds
   INT64 myComplete; ///< complete time of all tests execution in milliseconds
+  int myNbTests;
+  int myNbSuites;
+  std::vector<std::string> myFailures;
 };
 
index fe430bfd81b4adc37c7563918399081407e70e58..ac9ded2336357681bdc69eac3d344bba2323f6b7 100644 (file)
@@ -90,14 +90,24 @@ int main( int argc, char* argv[] )
     return 0;
   }
   bool isOK = result.wasSuccessful();
+
+#ifndef WIN32
   DEBTRACE("End of tests");
+#endif
+
   aWindow->close();
   aSession.closeSession();
   anApp.exit(!isOK);
+
+#ifndef WIN32
   DEBTRACE("--- TODO: exception on exit..."); // TODO: exception on exit...
+#endif
 
   int ms = progress.GetCompleteTimeInMS();
+  printf( "\n\n" );
+  printf( "%i TESTS in %i SUITES\n", progress.GetNbTests(), progress.GetNbSuites() );
   printf( "COMPLETE TESTS TIME: %i ms\n", ms );
+  progress.DumpFailures();
 
   return result.wasSuccessful() ? 0 : 1;
 }