bool QgsRenderChecker::isKnownAnomaly( QString theDiffImageFile ) { QString myControlImageDir = controlImagePath() + mControlName + QDir::separator(); QDir myDirectory = QDir( myControlImageDir ); QStringList myList; QString myFilename = "*"; myList = myDirectory.entryList( QStringList( myFilename ), QDir::Files | QDir::NoSymLinks ); //remove the control file from the list as the anomalies are //all files except the control file myList.removeAt( myList.indexOf( QFileInfo( mExpectedImageFile ).fileName() ) ); QString myImageHash = imageToHash( theDiffImageFile ); for ( int i = 0; i < myList.size(); ++i ) { QString myFile = myList.at( i ); mReport += "<tr><td colspan=3>" "Checking if " + myFile + " is a known anomaly."; mReport += "</td></tr>"; QString myAnomalyHash = imageToHash( controlImagePath() + mControlName + QDir::separator() + myFile ); QString myHashMessage = QString( "Checking if anomaly %1 (hash %2)<br>" ) .arg( myFile ) .arg( myAnomalyHash ); myHashMessage += QString( " matches %1 (hash %2)" ) .arg( theDiffImageFile ) .arg( myImageHash ); //foo CDash QString myMeasureMessage = "<DartMeasurement name=\"Anomaly check" "\" type=\"text/text\">" + myHashMessage + "</DartMeasurement>"; qDebug() << myMeasureMessage; mReport += "<tr><td colspan=3>" + myHashMessage + "</td></tr>"; if ( myImageHash == myAnomalyHash ) { mReport += "<tr><td colspan=3>" "Anomaly found! " + myFile; mReport += "</td></tr>"; return true; } } mReport += "<tr><td colspan=3>" "No anomaly found! "; mReport += "</td></tr>"; return false; }
bool QgsMultiRenderChecker::runTest( const QString &testName, unsigned int mismatchCount ) { bool successful = false; const QString baseDir = controlImagePath(); QStringList subDirs = QDir( baseDir ).entryList( QDir::Dirs | QDir::NoDotAndDotDot ); if ( subDirs.isEmpty() ) { subDirs << QLatin1String( "" ); } QVector<QgsDartMeasurement> dartMeasurements; Q_FOREACH ( const QString &suffix, subDirs ) { qDebug() << "Checking subdir " << suffix; bool result; QgsRenderChecker checker; checker.enableDashBuffering( true ); checker.setColorTolerance( mColorTolerance ); checker.setControlPathPrefix( mControlPathPrefix ); checker.setControlPathSuffix( suffix ); checker.setControlName( mControlName ); checker.setMapSettings( mMapSettings ); if ( !mRenderedImage.isNull() ) { checker.setRenderedImage( mRenderedImage ); result = checker.compareImages( testName, mismatchCount, mRenderedImage ); } else { result = checker.runTest( testName, mismatchCount ); mRenderedImage = checker.renderedImage(); } successful |= result; dartMeasurements << checker.dartMeasurements(); mReport += checker.report(); }
void QgsRenderChecker::setControlName( const QString theName ) { mControlName = theName; mExpectedImageFile = controlImagePath() + theName + QDir::separator() + theName + ".png"; }