Salome HOME
Merge branch 'BR_2017' of https://git.salome-platform.org/gitpub/modules/hydro.git...
[modules/hydro.git] / src / HYDRO_tests / TestViewer.cxx
index 3f971a4731980007408d8fb6b7b6db992093e663..82b05197249eff89d5a4d32b602b74da2da62cfa 100644 (file)
@@ -54,6 +54,7 @@
 #endif
 
 #include <cppunit/TestAssert.h>
+#include <QApplication>
 
 OCCViewer_ViewManager* TestViewer::myViewManager = 0;
 OCCViewer_ViewFrame* TestViewer::myViewWindow = 0;
@@ -134,6 +135,8 @@ void TestViewer::eraseAll( bool isUpdate, bool eraseStructures )
       GS->Erase();
     }
   }
+  viewer()->setTrihedronShown( false );
+  qApp->processEvents();
 }
 
 void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject,
@@ -143,7 +146,7 @@ void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject,
   if( !aNewKey.isEmpty() )
   {
     myKey = aNewKey;
-    eraseAll( false );
+    eraseAll( false, true );
   }
   
   if( theSelectionMode > 0 )
@@ -186,6 +189,7 @@ void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll,
   if( isFitAll )
     fitAll();
 }
+
 void TestViewer::show( const TopoDS_Shape& theShape, int theMode, bool isFitAll, const char* theKey,
                        int theUIANb, int theVIANb)
 {
@@ -277,6 +281,21 @@ bool AreImagesEqual( const QImage& theImage1, const QImage& theImage2, double th
   return true;
 }
 
+QImage TestViewer::diff( const QImage& theExpectedRefImage, const QImage& theActualImage )
+{
+  const QImage::Format aFormat = QImage::Format_RGB32;
+
+  QImage anExpectedRefImage = theExpectedRefImage.convertToFormat( aFormat );
+  QImage anActualImage = theActualImage.convertToFormat( aFormat );
+
+  QImage aDiff( anExpectedRefImage.width(), anExpectedRefImage.height(), aFormat );
+  QPainter aPainter( &aDiff );
+  aPainter.drawImage( 0, 0, anExpectedRefImage );
+  aPainter.setCompositionMode( QPainter::RasterOp_SourceXorDestination );
+  aPainter.drawImage( 0, 0, anActualImage );
+  return aDiff;
+}
+
 bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, const char* theCase, bool swapRGB )
 {
   QImage anActualImage;
@@ -299,7 +318,7 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons
   anExpectedRefFilePath += "/" + myKey + ".png";
   QImage anExpectedRefImage; 
   anExpectedRefImage.load( anExpectedRefFilePath );
-  std::cout << "Expected image loading: " << anExpectedRefFilePath.toStdString() << std::endl;
+  //std::cout << "Expected image loading: " << anExpectedRefFilePath.toStdString() << std::endl;
 
   if( AreImagesEqual( anActualImage, anExpectedRefImage, 0.001 ) )
   {
@@ -307,25 +326,28 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons
     return true;
   }
 
-  QString aPath = QDir::tempPath() + "/" + myKey + ".png";
+  QString temp = QDir::tempPath();
+#ifndef WIN32
+  temp += "/hydro";
+  if( !QDir().exists( temp ) )
+    QDir().mkpath( temp );
+#endif
+
+  QString aPath = temp + "/" + myKey + ".png";
   anActualImage.save( aPath );
-  std::cout << "Actual image: " << aPath.toStdString() << std::endl;
+  //std::cout << "Actual image: " << aPath.toStdString() << std::endl;
   
   //std::cout << anActualImage.width() << "x" << anActualImage.height() << std::endl;
   theMessage = "The viewer contents does not correspond to the reference image: " + myKey;
   
-  QImage aDiff( anExpectedRefImage.width(), anExpectedRefImage.height(), QImage::Format_ARGB32 );
-  QPainter aPainter( &aDiff );
-  aPainter.drawImage( 0, 0, anExpectedRefImage );
-  aPainter.setCompositionMode( QPainter::RasterOp_SourceXorDestination );
-  aPainter.drawImage( 0, 0, anActualImage );
+  QImage aDiff = diff( anExpectedRefImage, anActualImage );
 
-  QString aDiffFilePath = QDir::tempPath() + "/" + myKey + "_diff.png";
+  QString aDiffFilePath = temp + "/" + myKey + "_diff.png";
   aDiff.save( aDiffFilePath );
-  std::cout << "Diff image: " << aDiffFilePath.toStdString() << std::endl;
+  //std::cout << "Diff image: " << aDiffFilePath.toStdString() << std::endl;
 
-  QString anExpected = QDir::tempPath() + "/" + myKey + "_1.png";
-  std::cout << "Expected image: " << anExpected.toStdString() << std::endl;
+  QString anExpected = temp + "/" + myKey + "_1.png";
+  //std::cout << "Expected image: " << anExpected.toStdString() << std::endl;
   anExpectedRefImage.save( anExpected );
 
   return false;
@@ -408,7 +430,11 @@ bool TestViewer::areScriptsEqual( const QString& theBaseName,
   QString anExpectedRefFilePath = REF_DATA_PATH;
   anExpectedRefFilePath += "/" + theBaseName;
   
+#ifdef WIN32
   QString anActualFilePath = QDir::tempPath() + "/" + theBaseName;
+#else
+  QString anActualFilePath = QDir::tempPath() + "/hydro/" + theBaseName;
+#endif
 
   QFile anExpected( anExpectedRefFilePath );
   QFile anActual( anActualFilePath );