27
27
// #include <qgisapp.h>
28
28
#include < diagram/qgspiediagram.h>
29
29
#include < qgsdiagramrendererv2.h>
30
- #include < qgscomposition.h>
31
- #include < qgscompositionchecker.h>
32
- #include < qgscomposermap.h>
33
30
#include < qgsmaprenderer.h>
34
31
#include < qgsmaplayer.h>
35
32
#include < qgsvectordataprovider.h>
39
36
#include < qgsmaplayerregistry.h>
40
37
#include < qgsrendererv2.h>
41
38
// qgis test includes
42
- #include " qgsrenderchecker .h"
39
+ #include " qgsmultirenderchecker .h"
43
40
#include " qgspallabeling.h"
44
41
#include " qgsproject.h"
45
42
46
43
/* * \ingroup UnitTests
47
- * This is a unit test for the vector layer class.
44
+ * Unit tests for the diagram renderer
48
45
*/
49
46
class TestQgsDiagram : public QObject
50
47
{
@@ -54,20 +51,16 @@ class TestQgsDiagram : public QObject
54
51
TestQgsDiagram ()
55
52
: mTestHasError ( false )
56
53
, mPointsLayer ( 0 )
57
- , mComposition ( 0 )
58
- , mPieDiagram ( 0 )
59
- , mComposerMap ( 0 )
60
54
{}
61
55
62
56
private:
63
57
bool mTestHasError ;
64
58
QgsMapSettings mMapSettings ;
65
59
QgsVectorLayer * mPointsLayer ;
66
- QgsComposition * mComposition ;
67
60
QString mTestDataDir ;
68
61
QString mReport ;
69
- QgsPieDiagram * mPieDiagram ;
70
- QgsComposerMap * mComposerMap ;
62
+
63
+ bool imageCheck ( QString theTestType ) ;
71
64
72
65
private slots:
73
66
@@ -100,25 +93,15 @@ class TestQgsDiagram : public QObject
100
93
QgsMapLayerRegistry::instance ()->addMapLayers (
101
94
QList<QgsMapLayer *>() << mPointsLayer );
102
95
103
- // Create diagrams
104
- mPieDiagram = new QgsPieDiagram ();
105
-
106
96
// Create map composition to draw on
107
97
mMapSettings .setLayers ( QStringList () << mPointsLayer ->id () );
108
- // TODO mMapSettings.setLabelingEngine( new QgsPalLabeling() );
109
- mComposition = new QgsComposition ( mMapSettings );
110
- mComposition ->setPaperSize ( 297 , 210 ); // A4 landscape
111
- mComposerMap = new QgsComposerMap ( mComposition , 20 , 20 , 200 , 100 );
112
- mComposerMap ->setFrameEnabled ( true );
113
- mComposition ->addComposerMap ( mComposerMap );
114
98
115
99
mReport += " <h1>Diagram Tests</h1>\n " ;
116
100
}
117
101
118
102
// will be called after the last testfunction was executed.
119
103
void cleanupTestCase ()
120
104
{
121
- delete mComposition ;
122
105
QgsApplication::exitQgis ();
123
106
QString myReportFile = QDir::tempPath () + QDir::separator () + " qgistest.html" ;
124
107
QFile myFile ( myReportFile );
@@ -130,8 +113,20 @@ class TestQgsDiagram : public QObject
130
113
// QDesktopServices::openUrl( "file:///" + myReportFile );
131
114
}
132
115
}
133
- void init () {};// will be called before each testfunction is executed.
134
- void cleanup () {};// will be called after every testfunction.
116
+
117
+ // will be called before each testfunction is executed
118
+ void init ()
119
+ {
120
+ mPointsLayer ->setDiagramRenderer ( 0 );
121
+ QgsDiagramLayerSettings dls;
122
+ mPointsLayer ->setDiagramLayerSettings ( dls );
123
+ }
124
+
125
+ // will be called after every testfunction.
126
+ void cleanup ()
127
+ {
128
+
129
+ }
135
130
136
131
void testPieDiagram ()
137
132
{
@@ -149,35 +144,87 @@ class TestQgsDiagram : public QObject
149
144
ds.penWidth = .5 ;
150
145
ds.scaleByArea = true ;
151
146
ds.sizeType = QgsDiagramSettings::MM;
152
- ds.size = QSizeF ( 15 , 15 );
147
+ ds.size = QSizeF ( 5 , 5 );
153
148
ds.angleOffset = 0 ;
154
149
155
-
156
150
QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer ();
157
151
dr->setLowerValue ( 0.0 );
158
152
dr->setLowerSize ( QSizeF ( 0.0 , 0.0 ) );
159
153
dr->setUpperValue ( 10 );
160
- dr->setUpperSize ( QSizeF ( 100 , 100 ) );
154
+ dr->setUpperSize ( QSizeF ( 40 , 40 ) );
161
155
dr->setClassificationAttribute ( 5 ); // Staff
162
- dr->setDiagram ( mPieDiagram );
156
+ dr->setDiagram ( new QgsPieDiagram () );
163
157
dr->setDiagramSettings ( ds );
164
158
mPointsLayer ->setDiagramRenderer ( dr );
165
159
166
160
QgsDiagramLayerSettings dls = QgsDiagramLayerSettings ();
167
161
dls.placement = QgsDiagramLayerSettings::OverPoint;
162
+ dls.showAll = true ;
163
+ mPointsLayer ->setDiagramLayerSettings ( dls );
168
164
169
- QgsProject::instance ()->writeEntry ( " PAL" , " /ShowingAllLabels" , true );
165
+ QVERIFY ( imageCheck ( " piediagram" ) );
166
+ }
170
167
171
- mPointsLayer ->setDiagramLayerSettings ( dls );
168
+ void testPieDiagramExpression ()
169
+ {
170
+ QgsDiagramSettings ds;
171
+ QColor col1 = Qt::red;
172
+ QColor col2 = Qt::yellow;
173
+ col1.setAlphaF ( 0.5 );
174
+ col2.setAlphaF ( 0.5 );
175
+ ds.categoryColors = QList<QColor>() << col1 << col2;
176
+ ds.categoryAttributes = QList<QString>() << " ln(Pilots + 1)" << " ln(\" Cabin Crew\" + 1)" ;
177
+ ds.maxScaleDenominator = -1 ;
178
+ ds.minScaleDenominator = -1 ;
179
+ ds.minimumSize = 0 ;
180
+ ds.penColor = Qt::green;
181
+ ds.penWidth = .5 ;
182
+ ds.scaleByArea = true ;
183
+ ds.sizeType = QgsDiagramSettings::MM;
184
+ ds.size = QSizeF ( 5 , 5 );
185
+ ds.angleOffset = 0 ;
186
+
187
+ QgsLinearlyInterpolatedDiagramRenderer *dr = new QgsLinearlyInterpolatedDiagramRenderer ();
188
+ dr->setLowerValue ( 0.0 );
189
+ dr->setLowerSize ( QSizeF ( 0.0 , 0.0 ) );
190
+ dr->setUpperValue ( 10 );
191
+ dr->setUpperSize ( QSizeF ( 40 , 40 ) );
192
+ dr->setClassificationAttributeIsExpression ( true );
193
+ dr->setClassificationAttributeExpression ( " ln(Staff + 1)" );
194
+ dr->setDiagram ( new QgsPieDiagram () );
195
+ dr->setDiagramSettings ( ds );
172
196
173
- mComposerMap ->setNewExtent ( QgsRectangle ( -122 , -79 , -70 , 47 ) );
174
- QgsCompositionChecker checker ( " piediagram" , mComposition );
197
+ QgsDiagramLayerSettings dls = QgsDiagramLayerSettings ();
198
+ dls.placement = QgsDiagramLayerSettings::OverPoint;
199
+ dls.showAll = true ;
200
+ // dls.setRenderer( dr );
175
201
176
- QVERIFY ( checker.testComposition ( mReport ) );
202
+ mPointsLayer ->setDiagramRenderer ( dr );
203
+ mPointsLayer ->setDiagramLayerSettings ( dls );
204
+
205
+ QVERIFY ( imageCheck ( " piediagram_expression" ) );
177
206
178
207
mPointsLayer ->setDiagramRenderer ( 0 );
179
208
}
209
+
180
210
};
181
211
212
+ bool TestQgsDiagram::imageCheck ( QString theTestType )
213
+ {
214
+ // use the QgsRenderChecker test utility class to
215
+ // ensure the rendered output matches our control image
216
+
217
+ QgsRectangle extent ( -126 , 23 , -70 , 47 );
218
+ mMapSettings .setExtent ( extent );
219
+ mMapSettings .setFlag ( QgsMapSettings::ForceVectorOutput );
220
+ QgsMultiRenderChecker myChecker;
221
+ myChecker.setControlName ( " expected_" + theTestType );
222
+ myChecker.setMapSettings ( mMapSettings );
223
+ myChecker.setColorTolerance ( 15 );
224
+ bool myResultFlag = myChecker.runTest ( theTestType, 200 );
225
+ mReport += myChecker.report ();
226
+ return myResultFlag;
227
+ }
228
+
182
229
QTEST_MAIN ( TestQgsDiagram )
183
230
#include " testqgsdiagram.moc"
0 commit comments