Salome HOME
debug of test_export_telemac
[modules/hydro.git] / src / HYDRO_tests / TestViewer.cxx
index 5c143368ade0c182cbc045e665ab7d637a4ca586..82b05197249eff89d5a4d32b602b74da2da62cfa 100644 (file)
 #endif
 
 #include <cppunit/TestAssert.h>
+#include <QApplication>
 
 OCCViewer_ViewManager* TestViewer::myViewManager = 0;
 OCCViewer_ViewFrame* TestViewer::myViewWindow = 0;
 QString TestViewer::myKey = "";
 
+extern QString REF_DATA_PATH;
+
 OCCViewer_ViewManager* TestViewer::viewManager()
 {
   if( myViewManager )
@@ -132,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,
@@ -141,7 +146,7 @@ void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject,
   if( !aNewKey.isEmpty() )
   {
     myKey = aNewKey;
-    eraseAll( false );
+    eraseAll( false, true );
   }
   
   if( theSelectionMode > 0 )
@@ -184,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)
 {
@@ -275,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;
@@ -293,10 +314,11 @@ bool TestViewer::AssertImages( QString& theMessage, const QImage* theImage, cons
   if( theCase )
     myKey = theCase;
 
-  QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO";
+  QString anExpectedRefFilePath = REF_DATA_PATH;
   anExpectedRefFilePath += "/" + myKey + ".png";
   QImage anExpectedRefImage; 
   anExpectedRefImage.load( anExpectedRefFilePath );
+  //std::cout << "Expected image loading: " << anExpectedRefFilePath.toStdString() << std::endl;
 
   if( AreImagesEqual( anActualImage, anExpectedRefImage, 0.001 ) )
   {
@@ -304,21 +326,29 @@ 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 << 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;
 
-  anExpectedRefImage.save( QDir::tempPath() + "/" + myKey + "_1.png");
+  QString anExpected = temp + "/" + myKey + "_1.png";
+  //std::cout << "Expected image: " << anExpected.toStdString() << std::endl;
+  anExpectedRefImage.save( anExpected );
 
   return false;
 }
@@ -397,10 +427,14 @@ bool TestViewer::areScriptsEqual( const QString& theBaseName,
                                   int theLinesToOmit,
                                   QString& theMsg )
 {
-  QString anExpectedRefFilePath = qgetenv( "HYDRO_ROOT_DIR" ) + "/bin/salome/test/HYDRO";
+  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 );