Exemple #1
0
void GraphicTest::imageTest()
{
	PhGraphicView view(64, 64);

	PhGraphicImage image("rgbPatternTest.expected.bmp");

	connect(&view, &PhGraphicView::paint, [&](int w, int h) {
	            image.setSize(w, h);
	            image.draw();
			});

	view.show();

	QImage resultImage(view.renderPixmap(64, 64).toImage());
	QString resultFile = QString("%1.result.bmp").arg(QTest::currentTestFunction());
	resultImage.save(resultFile);

	// The expected result should be the same than the input (rgbPatternTest.bmp)
	// but it turns out that image is altered when opened with IMG_Load()
	// (see PhGraphicImage::init())
	QString expectedFile = QString("%1.expected.bmp").arg(QTest::currentTestFunction());
	QImage expectedImage(expectedFile);

	unsigned int result = PhPictureTools::compare(resultImage, expectedImage);
	QVERIFY2(result == 0, PHNQ(QString("Comparison result=%1").arg(result)));
}
Exemple #2
0
void GraphicTest::rgbPatternTest()
{
	int w = 64;
	int h = 64;
	PhGraphicView view(w, h);

	PhGraphicTexturedRect rect(0, 0, w, h);


	connect(&view, &PhGraphicView::paint, [&](int w, int h) {
#warning /// @todo try to make it before (creating the texture on auto init)
	            unsigned char * buffer = PhPictureTools::generateRGBPattern(w, h);
	            rect.createTextureFromRGBBuffer(buffer, w, h);
	            delete buffer;
	            rect.draw();
			});

	view.show();

	QImage resultImage(view.renderPixmap(64, 64).toImage());
	QString resultFile = QString("%1.result.bmp").arg(QTest::currentTestFunction());
	resultImage.save(resultFile);
	QString expectedFile = QString("%1.expected.bmp").arg(QTest::currentTestFunction());
	QImage expectedImage(expectedFile);

	unsigned int result = PhPictureTools::compare(resultImage, expectedImage);
	QVERIFY2(result == 0, PHNQ(QString("Comparison result=%1").arg(result)));
}
Exemple #3
0
void GraphicTest::rectTest()
{
	PhGraphicView view(32, 32);

	PhGraphicSolidRect rect;
	rect.setColor(Qt::red);

	connect(&view, &PhGraphicView::paint, [&](int w, int h) {
	            rect.setSize(w / 2, h / 2);
	            rect.draw();
			});

	view.show();

	// Note: using view.grabFrameBuffer() causes timing issues.
	// There is no warranty that the scene has been fully rendered.
	// Use view.renderPixmap().toImage() instead.
	QImage resultImage(view.renderPixmap(32, 32).toImage());
	QString resultFile = QString("%1.result.bmp").arg(QTest::currentTestFunction());
	resultImage.save(resultFile);
	QString expectedFile = QString("%1.expected.bmp").arg(QTest::currentTestFunction());
	QImage expectedImage(expectedFile);

	unsigned int result = PhPictureTools::compare(resultImage, expectedImage);
	QVERIFY2(result == 0, PHNQ(QString("Comparison result=%1").arg(result)));
}
bool QgsCompositionChecker::testComposition( QString &report, int page )
{
  if ( !mComposition )
  {
    return false;
  }

#if 0
  //fake mode to generate expected image
  //assume 300 dpi and size of the control image 3507 * 2480
  QImage outputImage( QSize( 3507, 2480 ), QImage::Format_ARGB32 );
  mComposition->setPlotStyle( QgsComposition::Print );
  outputImage.setDotsPerMeterX( 300 / 25.4 * 1000 );
  outputImage.setDotsPerMeterY( 300 / 25.4 * 1000 );
  outputImage.fill( 0 );
  QPainter p( &outputImage );
  //QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
  //QRectF targetArea( 0, 0, 3507, 2480 );
  mComposition->renderPage( &p, page );
  p.end();
  outputImage.save( "/tmp/composerhtml_table_control.png", "PNG" );
  return false;
#endif //0

  //load expected image
  setControlName( "expected_" + mTestName );
  QImage expectedImage( mExpectedImageFile );

  //get width/height, create image and render the composition to it
  int width = expectedImage.width();
  int height = expectedImage.height();
  QImage outputImage( QSize( width, height ), QImage::Format_ARGB32 );

  mComposition->setPlotStyle( QgsComposition::Print );
  outputImage.setDotsPerMeterX( expectedImage.dotsPerMeterX() );
  outputImage.setDotsPerMeterY( expectedImage.dotsPerMeterX() );
  outputImage.fill( 0 );
  QPainter p( &outputImage );
  mComposition->renderPage( &p, page );
  p.end();

  QString renderedFilePath = QDir::tempPath() + QDir::separator() + QFileInfo( mTestName ).baseName() + "_rendered.png";
  outputImage.save( renderedFilePath, "PNG" );

  QString diffFilePath = QDir::tempPath() + QDir::separator() + QFileInfo( mTestName ).baseName() + "_result_diff.png";

  bool testResult = compareImages( mTestName, 0, renderedFilePath );

  QString myDashMessage = "<DartMeasurementFile name=\"Rendered Image " + mTestName + "\""
                          " type=\"image/png\">" + renderedFilePath +
                          "</DartMeasurementFile>"
                          "<DartMeasurementFile name=\"Expected Image " + mTestName + "\" type=\"image/png\">" +
                          mExpectedImageFile + "</DartMeasurementFile>"
                          "<DartMeasurementFile name=\"Difference Image " + mTestName + "\" type=\"image/png\">" +
                          diffFilePath + "</DartMeasurementFile>";
  qDebug( ) << myDashMessage;

  report += mReport;
  return testResult;
}
Exemple #5
0
int TestCreator::compareImageLists() {
    _progressBar->setMinimum(0);
    _progressBar->setMaximum(_expectedImagesFullFilenames.length() - 1);
    _progressBar->setValue(0);
    _progressBar->setVisible(true);

    // Loop over both lists and compare each pair of images
    // Quit loop if user has aborted due to a failed test.
    bool keepOn{ true };
    int numberOfFailures{ 0 };
    for (int i = 0; keepOn && i < _expectedImagesFullFilenames.length(); ++i) {
        // First check that images are the same size
        QImage resultImage(_resultImagesFullFilenames[i]);
        QImage expectedImage(_expectedImagesFullFilenames[i]);

        double similarityIndex;  // in [-1.0 .. 1.0], where 1.0 means images are identical
        double worstTileValue;   // in [-1.0 .. 1.0], where 1.0 means images are identical

        bool isInteractiveMode = (!_isRunningFromCommandLine && _checkBoxInteractiveMode->isChecked() && !_isRunningInAutomaticTestRun);
                                 
        // similarityIndex is set to -100.0 to indicate images are not the same size
        if (isInteractiveMode && (resultImage.width() != expectedImage.width() || resultImage.height() != expectedImage.height())) {
            QMessageBox::critical(0, "Internal error: " + QString(__FILE__) + ":" + QString::number(__LINE__), "Images are not the same size");
            similarityIndex = -100.0;
            worstTileValue = 0.0;
        } else {
            _imageComparer.compareImages(resultImage, expectedImage);
            similarityIndex = _imageComparer.getSSIMValue();
            worstTileValue = _imageComparer.getWorstTileValue();
        }

        TestResult testResult = TestResult{
            similarityIndex,
            worstTileValue,
            _expectedImagesFullFilenames[i].left(_expectedImagesFullFilenames[i].lastIndexOf("/") + 1),  // path to the test (including trailing /)
            QFileInfo(_expectedImagesFullFilenames[i].toStdString().c_str()).fileName(),                 // filename of expected image
            QFileInfo(_resultImagesFullFilenames[i].toStdString().c_str()).fileName(),                   // filename of result image
            _imageComparer.getSSIMResults()                                                              // results of SSIM algoritm
        };

        _mismatchWindow.setTestResult(testResult);
        
        if (similarityIndex < THRESHOLD_GLOBAL || worstTileValue < THRESHOLD_LOCAL) {
            if (!isInteractiveMode) {
                ++numberOfFailures;
                appendTestResultsToFile(testResult, _mismatchWindow.getComparisonImage(), _mismatchWindow.getSSIMResultsImage(testResult._ssimResults), true);
            } else {
                _mismatchWindow.exec();

                switch (_mismatchWindow.getUserResponse()) {
                    case USER_RESPONSE_PASS:
                        break;
                    case USE_RESPONSE_FAIL:
                        ++numberOfFailures;
                        appendTestResultsToFile(testResult, _mismatchWindow.getComparisonImage(), _mismatchWindow.getSSIMResultsImage(testResult._ssimResults), true);
                        break;
                    case USER_RESPONSE_ABORT:
                        keepOn = false;
                        break;
                    default:
                        assert(false);
                        break;
                }
            }
        } else {
            appendTestResultsToFile(testResult, _mismatchWindow.getComparisonImage(), _mismatchWindow.getSSIMResultsImage(testResult._ssimResults), false);
        }

        _progressBar->setValue(i);
    }

    _progressBar->setVisible(false);
    return numberOfFailures;
}