Skip to content

Commit 07315bf

Browse files
committedJan 23, 2017
Add tests for data defined diagram properties
1 parent a4ef9ad commit 07315bf

15 files changed

+130
-7
lines changed
 

‎tests/src/core/testqgsdiagram.cpp

Lines changed: 130 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
//qgis includes...
2626
// #include <qgisapp.h>
2727
#include <diagram/qgspiediagram.h>
28+
#include <diagram/qgstextdiagram.h>
2829
#include <qgsdiagramrenderer.h>
2930
#include <qgsmaplayer.h>
3031
#include <qgsvectordataprovider.h>
3132
#include <qgsvectorlayer.h>
3233
#include <qgsapplication.h>
3334
#include <qgsproviderregistry.h>
3435
#include <qgsrenderer.h>
36+
#include "qgssinglesymbolrenderer.h"
3537
//qgis test includes
3638
#include "qgsmultirenderchecker.h"
3739
#include "qgspallabeling.h"
@@ -87,6 +89,14 @@ class TestQgsDiagram : public QObject
8789
mPointsLayer = new QgsVectorLayer( myPointFileInfo.filePath(),
8890
myPointFileInfo.completeBaseName(), QStringLiteral( "ogr" ) );
8991

92+
//we don't want to render the points themselves, just the diagrams
93+
QgsStringMap symbolProps;
94+
symbolProps.insert( "color", "0,0,0,0" );
95+
symbolProps.insert( "outline_style", "no" );
96+
QgsMarkerSymbol* symbol = QgsMarkerSymbol::createSimple( symbolProps );
97+
QgsSingleSymbolRenderer* symbolRenderer = new QgsSingleSymbolRenderer( symbol );
98+
mPointsLayer->setRenderer( symbolRenderer );
99+
90100
// Create map composition to draw on
91101
mMapSettings->setLayers( QList<QgsMapLayer*>() << mPointsLayer );
92102

@@ -204,6 +214,118 @@ class TestQgsDiagram : public QObject
204214
mPointsLayer->setDiagramRenderer( 0 );
205215
}
206216

217+
void testDataDefinedPosition()
218+
{
219+
QgsDiagramSettings ds;
220+
QColor col1 = Qt::red;
221+
QColor col2 = Qt::yellow;
222+
col1.setAlphaF( 0.5 );
223+
col2.setAlphaF( 0.5 );
224+
ds.categoryColors = QList<QColor>() << col1 << col2;
225+
ds.categoryAttributes = QList<QString>() << "\"Pilots\"" << "\"Cabin Crew\"";
226+
ds.maxScaleDenominator = -1;
227+
ds.minScaleDenominator = -1;
228+
ds.minimumSize = 0;
229+
ds.penColor = Qt::green;
230+
ds.penWidth = .5;
231+
ds.scaleByArea = true;
232+
ds.sizeType = QgsUnitTypes::RenderMillimeters;
233+
ds.size = QSizeF( 15, 15 );
234+
ds.angleOffset = 0;
235+
236+
QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
237+
dr->setDiagram( new QgsPieDiagram() );
238+
dr->setDiagramSettings( ds );
239+
mPointsLayer->setDiagramRenderer( dr );
240+
241+
QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
242+
dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
243+
dls.setShowAllDiagrams( true );
244+
245+
//Set data defined position
246+
dls.properties().setProperty( QgsDiagramLayerSettings::PositionX, new QgsExpressionBasedProperty( "$x + -5", true ) );
247+
dls.properties().setProperty( QgsDiagramLayerSettings::PositionY, new QgsExpressionBasedProperty( "$y + 5", true ) );
248+
249+
mPointsLayer->setDiagramLayerSettings( dls );
250+
251+
QVERIFY( imageCheck( "piediagram_datadefined_position" ) );
252+
}
253+
254+
void testDataDefinedOutline()
255+
{
256+
QgsDiagramSettings ds;
257+
QColor col1 = Qt::red;
258+
QColor col2 = Qt::yellow;
259+
col1.setAlphaF( 0.5 );
260+
col2.setAlphaF( 0.5 );
261+
ds.categoryColors = QList<QColor>() << col1 << col2;
262+
ds.categoryAttributes = QList<QString>() << "\"Pilots\"" << "\"Cabin Crew\"";
263+
ds.maxScaleDenominator = -1;
264+
ds.minScaleDenominator = -1;
265+
ds.minimumSize = 0;
266+
ds.penColor = Qt::green;
267+
ds.penWidth = .5;
268+
ds.scaleByArea = true;
269+
ds.sizeType = QgsUnitTypes::RenderMillimeters;
270+
ds.size = QSizeF( 15, 15 );
271+
ds.angleOffset = 0;
272+
273+
QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
274+
dr->setDiagram( new QgsPieDiagram() );
275+
dr->setDiagramSettings( ds );
276+
mPointsLayer->setDiagramRenderer( dr );
277+
278+
QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
279+
dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
280+
dls.setShowAllDiagrams( true );
281+
282+
//setup data defined outline
283+
dls.properties().setProperty( QgsDiagramLayerSettings::OutlineColor, new QgsExpressionBasedProperty( "if(\"Pilots\">1,'0,0,0,255','255,0,0,255')", true ) );
284+
dls.properties().setProperty( QgsDiagramLayerSettings::OutlineWidth, new QgsExpressionBasedProperty( "\"Staff\" / 2.0", true ) );
285+
286+
mPointsLayer->setDiagramLayerSettings( dls );
287+
288+
QVERIFY( imageCheck( "piediagram_datadefined_outline" ) );
289+
}
290+
291+
292+
void testDataDefinedBackgroundColor()
293+
{
294+
QgsDiagramSettings ds;
295+
QColor col1 = Qt::red;
296+
QColor col2 = Qt::yellow;
297+
//hide the text so we are just testing the background color
298+
col1.setAlphaF( 0 );
299+
col2.setAlphaF( 0 );
300+
ds.categoryColors = QList<QColor>() << col1 << col2;
301+
ds.categoryAttributes = QList<QString>() << "\"Pilots\"" << "\"Cabin Crew\"";
302+
ds.maxScaleDenominator = -1;
303+
ds.minScaleDenominator = -1;
304+
ds.minimumSize = 0;
305+
ds.penColor = Qt::green;
306+
ds.penWidth = .5;
307+
ds.scaleByArea = true;
308+
ds.sizeType = QgsUnitTypes::RenderMillimeters;
309+
ds.size = QSizeF( 15, 15 );
310+
ds.angleOffset = 0;
311+
312+
QgsSingleCategoryDiagramRenderer *dr = new QgsSingleCategoryDiagramRenderer();
313+
dr->setDiagram( new QgsTextDiagram() );
314+
dr->setDiagramSettings( ds );
315+
mPointsLayer->setDiagramRenderer( dr );
316+
317+
QgsDiagramLayerSettings dls = QgsDiagramLayerSettings();
318+
dls.setPlacement( QgsDiagramLayerSettings::OverPoint );
319+
dls.setShowAllDiagrams( true );
320+
321+
//setup data defined outline
322+
dls.properties().setProperty( QgsDiagramLayerSettings::BackgroundColor, new QgsExpressionBasedProperty( "if(\"Pilots\">1,'0,0,255,150','255,0,0,150')", true ) );
323+
324+
mPointsLayer->setDiagramLayerSettings( dls );
325+
326+
QVERIFY( imageCheck( "textdiagram_datadefined_background" ) );
327+
}
328+
207329
};
208330

209331
bool TestQgsDiagram::imageCheck( const QString& theTestType )
@@ -215,13 +337,14 @@ bool TestQgsDiagram::imageCheck( const QString& theTestType )
215337
mMapSettings->setExtent( extent );
216338
mMapSettings->setFlag( QgsMapSettings::ForceVectorOutput );
217339
mMapSettings->setOutputDpi( 96 );
218-
QgsMultiRenderChecker myChecker;
219-
myChecker.setControlName( "expected_" + theTestType );
220-
myChecker.setMapSettings( *mMapSettings );
221-
myChecker.setColorTolerance( 15 );
222-
bool myResultFlag = myChecker.runTest( theTestType, 200 );
223-
mReport += myChecker.report();
224-
return myResultFlag;
340+
QgsMultiRenderChecker checker;
341+
checker.setControlPathPrefix( "diagrams" );
342+
checker.setControlName( "expected_" + theTestType );
343+
checker.setMapSettings( *mMapSettings );
344+
checker.setColorTolerance( 15 );
345+
bool resultFlag = checker.runTest( theTestType, 200 );
346+
mReport += checker.report();
347+
return resultFlag;
225348
}
226349

227350
QGSTEST_MAIN( TestQgsDiagram )
Loading
Loading
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)
Please sign in to comment.