Move QgsCompositionChecker to core, speeds up compilation with

tests enabled
This commit is contained in:
Nyall Dawson 2016-01-24 21:14:26 +11:00
parent df22d565f5
commit eb31e01a2f
23 changed files with 126 additions and 150 deletions

View File

@ -322,6 +322,7 @@ SET(ENABLE_MODELTEST FALSE CACHE BOOL "Enable QT ModelTest (not for production)"
IF (ENABLE_TESTS)
SET( QT_USE_QTTEST TRUE )
ADD_DEFINITIONS(-DENABLE_TESTS)
ENABLE_TESTING()
# Adds some testing specific build targets e.g. make Experimental
INCLUDE(Dart)

View File

@ -14,7 +14,7 @@
***************************************************************************/
#include "qgsmultirenderchecker.h"
#include "qgscomposition.h"
#include <QDebug>
QgsMultiRenderChecker::QgsMultiRenderChecker()
@ -102,3 +102,84 @@ QString QgsMultiRenderChecker::controlImagePath() const
QDir::separator() + mControlPathPrefix + QDir::separator() + mControlName + QDir::separator();
return myControlImageDir;
}
#ifdef ENABLE_TESTS
//
// QgsCompositionChecker
//
///@cond PRIVATE
QgsCompositionChecker::QgsCompositionChecker( const QString& testName, QgsComposition* composition )
: QgsMultiRenderChecker()
, mTestName( testName )
, mComposition( composition )
, mSize( 1122, 794 )
, mDotsPerMeter( 96 / 25.4 * 1000 )
{
// The composer has some slight render inconsistencies on the whole image sometimes
setColorTolerance( 5 );
}
QgsCompositionChecker::QgsCompositionChecker()
: mComposition( nullptr )
, mDotsPerMeter( 96 / 25.4 * 1000 )
{
}
QgsCompositionChecker::~QgsCompositionChecker()
{
}
bool QgsCompositionChecker::testComposition( QString &theReport, int page, int pixelDiff )
{
if ( !mComposition )
{
return false;
}
setControlName( "expected_" + mTestName );
#if 0
//fake mode to generate expected image
//assume 96 dpi and size of the control image 1122 * 794
QImage newImage( QSize( 1122, 794 ), QImage::Format_RGB32 );
mComposition->setPlotStyle( QgsComposition::Print );
newImage.setDotsPerMeterX( 96 / 25.4 * 1000 );
newImage.setDotsPerMeterY( 96 / 25.4 * 1000 );
drawBackground( &newImage );
QPainter expectedPainter( &newImage );
//QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
//QRectF targetArea( 0, 0, 3507, 2480 );
mComposition->renderPage( &expectedPainter, page );
expectedPainter.end();
newImage.save( mExpectedImageFile, "PNG" );
return true;
#endif //0
QImage outputImage( mSize, QImage::Format_RGB32 );
mComposition->setPlotStyle( QgsComposition::Print );
outputImage.setDotsPerMeterX( mDotsPerMeter );
outputImage.setDotsPerMeterY( mDotsPerMeter );
drawBackground( &outputImage );
QPainter p( &outputImage );
mComposition->renderPage( &p, page );
p.end();
QString renderedFilePath = QDir::tempPath() + '/' + QFileInfo( mTestName ).baseName() + "_rendered.png";
outputImage.save( renderedFilePath, "PNG" );
setRenderedImage( renderedFilePath );
bool testResult = runTest( mTestName, pixelDiff );
theReport += report();
return testResult;
}
///@endcond
#endif

View File

@ -128,4 +128,29 @@ class CORE_EXPORT QgsMultiRenderChecker
QgsMapSettings mMapSettings;
};
#ifdef ENABLE_TESTS
// Renders a composition to an image and compares with an expected output
///@cond PRIVATE
class CORE_EXPORT QgsCompositionChecker : public QgsMultiRenderChecker
{
public:
QgsCompositionChecker( const QString& testName, QgsComposition* composition );
~QgsCompositionChecker();
void setSize( QSize size ) { mSize = size; }
bool testComposition( QString &theReport, int page = 0, int pixelDiff = 0 );
private:
QgsCompositionChecker(); //forbidden
QString mTestName;
QgsComposition* mComposition;
QSize mSize;
int mDotsPerMeter;
};
///@endcond
#endif
#endif // QGSMULTIRENDERCHECKER_H

View File

@ -1,5 +1,5 @@
# Standard includes and utils to compile into all tests.
SET (util_SRCS qgscompositionchecker.cpp)
#SET (util_SRCS qgscompositionchecker.cpp)
#####################################################

View File

@ -1,87 +0,0 @@
/***************************************************************************
qgscompositionchecker.cpp - check rendering of Qgscomposition against an expected image
--------------------------------------
Date : 5 Juli 2012
Copyright : (C) 2012 by Marco Hugentobler
email : marco@sourcepole.ch
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgscompositionchecker.h"
#include "qgscomposition.h"
#include <QDebug>
#include <QDir>
#include <QFileInfo>
#include <QImage>
#include <QPainter>
QgsCompositionChecker::QgsCompositionChecker( const QString& testName, QgsComposition* composition )
: QgsMultiRenderChecker()
, mTestName( testName )
, mComposition( composition )
, mSize( 1122, 794 )
, mDotsPerMeter( 96 / 25.4 * 1000 )
{
// The composer has some slight render inconsistencies on the whole image sometimes
setColorTolerance( 5 );
}
QgsCompositionChecker::QgsCompositionChecker()
: mComposition( nullptr )
, mDotsPerMeter( 96 / 25.4 * 1000 )
{
}
bool QgsCompositionChecker::testComposition( QString &theReport, int page, int pixelDiff )
{
if ( !mComposition )
{
return false;
}
setControlName( "expected_" + mTestName );
#if 0
//fake mode to generate expected image
//assume 96 dpi and size of the control image 1122 * 794
QImage newImage( QSize( 1122, 794 ), QImage::Format_RGB32 );
mComposition->setPlotStyle( QgsComposition::Print );
newImage.setDotsPerMeterX( 96 / 25.4 * 1000 );
newImage.setDotsPerMeterY( 96 / 25.4 * 1000 );
drawBackground( &newImage );
QPainter expectedPainter( &newImage );
//QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
//QRectF targetArea( 0, 0, 3507, 2480 );
mComposition->renderPage( &expectedPainter, page );
expectedPainter.end();
newImage.save( mExpectedImageFile, "PNG" );
return true;
#endif //0
QImage outputImage( mSize, QImage::Format_RGB32 );
mComposition->setPlotStyle( QgsComposition::Print );
outputImage.setDotsPerMeterX( mDotsPerMeter );
outputImage.setDotsPerMeterY( mDotsPerMeter );
drawBackground( &outputImage );
QPainter p( &outputImage );
mComposition->renderPage( &p, page );
p.end();
QString renderedFilePath = QDir::tempPath() + '/' + QFileInfo( mTestName ).baseName() + "_rendered.png";
outputImage.save( renderedFilePath, "PNG" );
setRenderedImage( renderedFilePath );
bool testResult = runTest( mTestName, pixelDiff );
theReport += report();
return testResult;
}

View File

@ -1,44 +0,0 @@
/***************************************************************************
qgscompositionchecker.h - check rendering of Qgscomposition against an expected image
--------------------------------------
Date : 5 Juli 2012
Copyright : (C) 2012 by Marco Hugentobler
email : marco@sourcepole.ch
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSCOMPOSITIONCHECKER_H
#define QGSCOMPOSITIONCHECKER_H
#include "qgsmultirenderchecker.h"
#include <QString>
class QgsComposition;
class QImage;
/** Renders a composition to an image and compares with an expected output*/
class QgsCompositionChecker : public QgsMultiRenderChecker
{
public:
QgsCompositionChecker( const QString& testName, QgsComposition* composition );
void setSize( QSize size ) { mSize = size; }
bool testComposition( QString &theReport, int page = 0, int pixelDiff = 0 );
private:
QgsCompositionChecker(); //forbidden
QString mTestName;
QgsComposition* mComposition;
QSize mSize;
int mDotsPerMeter;
};
#endif // QGSCOMPOSITIONCHECKER_H

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposermap.h"
#include "qgscomposermapoverview.h"
#include "qgsatlascomposition.h"

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposershape.h"
#include "qgsmaprenderer.h"
#include <QObject>

View File

@ -18,7 +18,7 @@
#include "qgscomposeritemgroup.h"
#include "qgscomposerlabel.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgsapplication.h"
#include <QObject>

View File

@ -19,7 +19,7 @@
#include "qgscomposerhtml.h"
#include "qgscomposerframe.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgsfontutils.h"
#include <QObject>
#include <QtTest/QtTest>

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposermap.h"
#include "qgsmaplayerregistry.h"
#include "qgsmaprenderer.h"

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposermap.h"
#include "qgscomposermapgrid.h"
#include "qgsmaplayerregistry.h"

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposermap.h"
#include "qgscomposermapoverview.h"
#include "qgsmaplayerregistry.h"

View File

@ -19,7 +19,7 @@
#include "qgscomposerframe.h"
#include "qgscomposerlabel.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgsapplication.h"
#include <QObject>

View File

@ -17,7 +17,7 @@
#include "qgscomposerobject.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgsdatadefined.h"
#include "qgsexpression.h"
#include "qgsapplication.h"

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposershape.h"
#include "qgssymbolv2.h"
#include "qgssinglesymbolrendererv2.h"

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposerpicture.h"
#include <QObject>
#include <QtTest/QtTest>

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposershape.h"
#include "qgscomposermap.h"
#include "qgscomposerlabel.h"

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposermap.h"
#include "qgscomposerscalebar.h"
#include "qgsmaplayerregistry.h"

View File

@ -17,7 +17,7 @@
#include "qgsapplication.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgscomposershape.h"
#include "qgsmapsettings.h"
#include "qgssymbolv2.h"

View File

@ -25,7 +25,7 @@
#include "qgsvectorlayer.h"
#include "qgsvectordataprovider.h"
#include "qgsfeature.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgsfontutils.h"
#include "qgsmaplayerregistry.h"
#include "qgsproject.h"

View File

@ -18,7 +18,7 @@
#include "qgsapplication.h" //for standard test font
#include "qgscomposerutils.h"
#include "qgscomposition.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgsdatadefined.h"
#include "qgsfontutils.h"
#include <QObject>

View File

@ -23,7 +23,7 @@
#include "qgscomposerhtml.h"
#include "qgscomposerframe.h"
#include "qgsmapsettings.h"
#include "qgscompositionchecker.h"
#include "qgsmultirenderchecker.h"
#include "qgsfillsymbollayerv2.h"
#include <QObject>