Salome HOME
debug of test_export_telemac
[modules/hydro.git] / src / HYDRO_tests / TestViewer.cxx
index 080f9b9ddd8ad042c2c3f28c2defc55f125a90e8..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 )
@@ -118,10 +121,22 @@ QColor TestViewer::GetColor(int i)
   }
 }
 
-void TestViewer::eraseAll( bool isUpdate )
+void TestViewer::eraseAll( bool isUpdate, bool eraseStructures )
 {
   context()->CloseLocalContext( -1, Standard_False );
   context()->EraseAll( isUpdate );
+  if( eraseStructures )
+  {    
+    Graphic3d_MapOfStructure GmapS;
+    viewer()->getViewer3d()->StructureManager()->DisplayedStructures(GmapS);
+    for (Graphic3d_MapOfStructure::Iterator it(GmapS); it.More(); it.Next())
+    {
+      Handle(Graphic3d_Structure) GS = it.Key();
+      GS->Erase();
+    }
+  }
+  viewer()->setTrihedronShown( false );
+  qApp->processEvents();
 }
 
 void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject,
@@ -131,7 +146,7 @@ void TestViewer::show( const Handle(AIS_InteractiveObject)& theObject,
   if( !aNewKey.isEmpty() )
   {
     myKey = aNewKey;
-    eraseAll( false );
+    eraseAll( false, true );
   }
   
   if( theSelectionMode > 0 )
@@ -174,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)
 {
@@ -265,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;
@@ -283,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 ) )
   {
@@ -294,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;
 }
@@ -367,6 +407,7 @@ void TestViewer::select( int theViewX, int theViewY )
   Handle(V3d_View) aView = myViewWindow->getViewPort()->getView();
   context()->MoveTo( theViewX, theViewY, aView );
   context()->Select();
+  // context()->CloseAllContexts();
 }
 
 QString GetLine( QFile& theFile, bool isUtf8 )
@@ -386,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 );