From eb31e01a2f6e90bf003d589067e2c85579f64054 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Sun, 24 Jan 2016 21:14:26 +1100 Subject: [PATCH] Move QgsCompositionChecker to core, speeds up compilation with tests enabled --- CMakeLists.txt | 1 + src/core/qgsmultirenderchecker.cpp | 83 +++++++++++++++++- src/core/qgsmultirenderchecker.h | 25 ++++++ tests/src/core/CMakeLists.txt | 2 +- tests/src/core/qgscompositionchecker.cpp | 87 ------------------- tests/src/core/qgscompositionchecker.h | 44 ---------- tests/src/core/testqgsatlascomposition.cpp | 2 +- tests/src/core/testqgscomposereffects.cpp | 2 +- tests/src/core/testqgscomposergroup.cpp | 2 +- tests/src/core/testqgscomposerhtml.cpp | 2 +- tests/src/core/testqgscomposermap.cpp | 2 +- tests/src/core/testqgscomposermapgrid.cpp | 2 +- tests/src/core/testqgscomposermapoverview.cpp | 2 +- tests/src/core/testqgscomposermultiframe.cpp | 2 +- tests/src/core/testqgscomposerobject.cpp | 2 +- tests/src/core/testqgscomposerpaper.cpp | 2 +- tests/src/core/testqgscomposerpicture.cpp | 2 +- tests/src/core/testqgscomposerrotation.cpp | 2 +- tests/src/core/testqgscomposerscalebar.cpp | 2 +- tests/src/core/testqgscomposershapes.cpp | 2 +- tests/src/core/testqgscomposertablev2.cpp | 2 +- tests/src/core/testqgscomposerutils.cpp | 2 +- tests/src/core/testqgscomposition.cpp | 2 +- 23 files changed, 126 insertions(+), 150 deletions(-) delete mode 100644 tests/src/core/qgscompositionchecker.cpp delete mode 100644 tests/src/core/qgscompositionchecker.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fa94de34373..472e684dc4d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/src/core/qgsmultirenderchecker.cpp b/src/core/qgsmultirenderchecker.cpp index 2724baf4bb8b..100ad69b57f4 100644 --- a/src/core/qgsmultirenderchecker.cpp +++ b/src/core/qgsmultirenderchecker.cpp @@ -14,7 +14,7 @@ ***************************************************************************/ #include "qgsmultirenderchecker.h" - +#include "qgscomposition.h" #include 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 diff --git a/src/core/qgsmultirenderchecker.h b/src/core/qgsmultirenderchecker.h index a19d842dfd87..3c368c7caecb 100644 --- a/src/core/qgsmultirenderchecker.h +++ b/src/core/qgsmultirenderchecker.h @@ -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 diff --git a/tests/src/core/CMakeLists.txt b/tests/src/core/CMakeLists.txt index 724a54f3f916..218149dea2eb 100644 --- a/tests/src/core/CMakeLists.txt +++ b/tests/src/core/CMakeLists.txt @@ -1,5 +1,5 @@ # Standard includes and utils to compile into all tests. -SET (util_SRCS qgscompositionchecker.cpp) +#SET (util_SRCS qgscompositionchecker.cpp) ##################################################### diff --git a/tests/src/core/qgscompositionchecker.cpp b/tests/src/core/qgscompositionchecker.cpp deleted file mode 100644 index 2158c1b13f3c..000000000000 --- a/tests/src/core/qgscompositionchecker.cpp +++ /dev/null @@ -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 -#include -#include -#include -#include - -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; -} diff --git a/tests/src/core/qgscompositionchecker.h b/tests/src/core/qgscompositionchecker.h deleted file mode 100644 index 17489ec34a1c..000000000000 --- a/tests/src/core/qgscompositionchecker.h +++ /dev/null @@ -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 - -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 diff --git a/tests/src/core/testqgsatlascomposition.cpp b/tests/src/core/testqgsatlascomposition.cpp index 8041e6e906e5..b46b783cf22a 100644 --- a/tests/src/core/testqgsatlascomposition.cpp +++ b/tests/src/core/testqgsatlascomposition.cpp @@ -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" diff --git a/tests/src/core/testqgscomposereffects.cpp b/tests/src/core/testqgscomposereffects.cpp index c90e91df088f..a490cab8c1cb 100644 --- a/tests/src/core/testqgscomposereffects.cpp +++ b/tests/src/core/testqgscomposereffects.cpp @@ -17,7 +17,7 @@ #include "qgsapplication.h" #include "qgscomposition.h" -#include "qgscompositionchecker.h" +#include "qgsmultirenderchecker.h" #include "qgscomposershape.h" #include "qgsmaprenderer.h" #include diff --git a/tests/src/core/testqgscomposergroup.cpp b/tests/src/core/testqgscomposergroup.cpp index 4886375072b3..785071bb23a0 100644 --- a/tests/src/core/testqgscomposergroup.cpp +++ b/tests/src/core/testqgscomposergroup.cpp @@ -18,7 +18,7 @@ #include "qgscomposeritemgroup.h" #include "qgscomposerlabel.h" #include "qgscomposition.h" -#include "qgscompositionchecker.h" +#include "qgsmultirenderchecker.h" #include "qgsapplication.h" #include diff --git a/tests/src/core/testqgscomposerhtml.cpp b/tests/src/core/testqgscomposerhtml.cpp index 21c0879521f9..9578e37c3559 100644 --- a/tests/src/core/testqgscomposerhtml.cpp +++ b/tests/src/core/testqgscomposerhtml.cpp @@ -19,7 +19,7 @@ #include "qgscomposerhtml.h" #include "qgscomposerframe.h" #include "qgscomposition.h" -#include "qgscompositionchecker.h" +#include "qgsmultirenderchecker.h" #include "qgsfontutils.h" #include #include diff --git a/tests/src/core/testqgscomposermap.cpp b/tests/src/core/testqgscomposermap.cpp index 03dbcf55a212..9f0b9532092e 100644 --- a/tests/src/core/testqgscomposermap.cpp +++ b/tests/src/core/testqgscomposermap.cpp @@ -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" diff --git a/tests/src/core/testqgscomposermapgrid.cpp b/tests/src/core/testqgscomposermapgrid.cpp index 3bc413df7b1b..3981d4b93370 100644 --- a/tests/src/core/testqgscomposermapgrid.cpp +++ b/tests/src/core/testqgscomposermapgrid.cpp @@ -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" diff --git a/tests/src/core/testqgscomposermapoverview.cpp b/tests/src/core/testqgscomposermapoverview.cpp index dc4f999089c6..fca4087661ca 100644 --- a/tests/src/core/testqgscomposermapoverview.cpp +++ b/tests/src/core/testqgscomposermapoverview.cpp @@ -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" diff --git a/tests/src/core/testqgscomposermultiframe.cpp b/tests/src/core/testqgscomposermultiframe.cpp index 58d48e3dda33..921ebd7c7d23 100644 --- a/tests/src/core/testqgscomposermultiframe.cpp +++ b/tests/src/core/testqgscomposermultiframe.cpp @@ -19,7 +19,7 @@ #include "qgscomposerframe.h" #include "qgscomposerlabel.h" #include "qgscomposition.h" -#include "qgscompositionchecker.h" +#include "qgsmultirenderchecker.h" #include "qgsapplication.h" #include diff --git a/tests/src/core/testqgscomposerobject.cpp b/tests/src/core/testqgscomposerobject.cpp index 40ff28a87882..357b0e78cce7 100644 --- a/tests/src/core/testqgscomposerobject.cpp +++ b/tests/src/core/testqgscomposerobject.cpp @@ -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" diff --git a/tests/src/core/testqgscomposerpaper.cpp b/tests/src/core/testqgscomposerpaper.cpp index 43f49e3da4ad..d5bc27b01318 100644 --- a/tests/src/core/testqgscomposerpaper.cpp +++ b/tests/src/core/testqgscomposerpaper.cpp @@ -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" diff --git a/tests/src/core/testqgscomposerpicture.cpp b/tests/src/core/testqgscomposerpicture.cpp index 9e5fc778e4ea..28a89a4ba3e9 100644 --- a/tests/src/core/testqgscomposerpicture.cpp +++ b/tests/src/core/testqgscomposerpicture.cpp @@ -17,7 +17,7 @@ #include "qgsapplication.h" #include "qgscomposition.h" -#include "qgscompositionchecker.h" +#include "qgsmultirenderchecker.h" #include "qgscomposerpicture.h" #include #include diff --git a/tests/src/core/testqgscomposerrotation.cpp b/tests/src/core/testqgscomposerrotation.cpp index 667d6ff7a70e..e2f21ddd3127 100644 --- a/tests/src/core/testqgscomposerrotation.cpp +++ b/tests/src/core/testqgscomposerrotation.cpp @@ -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" diff --git a/tests/src/core/testqgscomposerscalebar.cpp b/tests/src/core/testqgscomposerscalebar.cpp index 7613cbccd51d..1715ebd4ef28 100644 --- a/tests/src/core/testqgscomposerscalebar.cpp +++ b/tests/src/core/testqgscomposerscalebar.cpp @@ -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" diff --git a/tests/src/core/testqgscomposershapes.cpp b/tests/src/core/testqgscomposershapes.cpp index 5c6052b73bcd..e7a4aa820453 100644 --- a/tests/src/core/testqgscomposershapes.cpp +++ b/tests/src/core/testqgscomposershapes.cpp @@ -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" diff --git a/tests/src/core/testqgscomposertablev2.cpp b/tests/src/core/testqgscomposertablev2.cpp index 9c7825bf7f42..fe684ed190e1 100644 --- a/tests/src/core/testqgscomposertablev2.cpp +++ b/tests/src/core/testqgscomposertablev2.cpp @@ -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" diff --git a/tests/src/core/testqgscomposerutils.cpp b/tests/src/core/testqgscomposerutils.cpp index e735df5e506e..2994777bb2e7 100644 --- a/tests/src/core/testqgscomposerutils.cpp +++ b/tests/src/core/testqgscomposerutils.cpp @@ -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 diff --git a/tests/src/core/testqgscomposition.cpp b/tests/src/core/testqgscomposition.cpp index f4041d2e0aaf..b5fcdf658407 100644 --- a/tests/src/core/testqgscomposition.cpp +++ b/tests/src/core/testqgscomposition.cpp @@ -23,7 +23,7 @@ #include "qgscomposerhtml.h" #include "qgscomposerframe.h" #include "qgsmapsettings.h" -#include "qgscompositionchecker.h" +#include "qgsmultirenderchecker.h" #include "qgsfillsymbollayerv2.h" #include