@@ -55,6 +55,7 @@ class TestQgsGeoPdfExport : public QObject
55
55
void init ();// will be called before each testfunction is executed.
56
56
void cleanup ();// will be called after every testfunction.
57
57
void testCollectingFeatures ();
58
+ void testComposition ();
58
59
59
60
private:
60
61
@@ -174,5 +175,93 @@ void TestQgsGeoPdfExport::testCollectingFeatures()
174
175
QCOMPARE ( f.geometry ().asWkt (), QStringLiteral ( " LineString (1 1, 2 2)" ) );
175
176
}
176
177
178
+ void TestQgsGeoPdfExport::testComposition ()
179
+ {
180
+ if ( !QgsAbstractGeoPdfExporter::geoPDFCreationAvailable () )
181
+ {
182
+ QSKIP ( " This test requires GeoPDF creation abilities" , SkipSingle );
183
+ }
184
+
185
+ TestGeoPdfExporter geoPdfExporter;
186
+ // no features, no crash
187
+ QVERIFY ( geoPdfExporter.saveTemporaryLayers () );
188
+ QCOMPARE ( geoPdfExporter.mVectorComponents .count (), 0 );
189
+
190
+ QgsFields fields;
191
+ fields.append ( QgsField ( QStringLiteral ( " a1" ), QVariant::Int ) );
192
+ fields.append ( QgsField ( QStringLiteral ( " a2" ), QVariant::Int ) );
193
+ QgsFeature f ( fields );
194
+
195
+ f.setAttributes ( QgsAttributes () << 1 << 2 );
196
+ f.setGeometry ( QgsGeometry ( new QgsPoint ( 1 , 2 ) ) );
197
+ QgsGeometry renderedBounds ( QgsGeometry::fromRect ( QgsRectangle ( 1 , 10 , 6 , 20 ) ) );
198
+ geoPdfExporter.pushRenderedFeature ( QStringLiteral ( " layer1" ), QgsAbstractGeoPdfExporter::RenderedFeature ( f, renderedBounds ) );
199
+ f.setAttributes ( QgsAttributes () << 31 << 32 );
200
+ f.setGeometry ( QgsGeometry ( new QgsPoint ( 4 , 5 ) ) );
201
+ renderedBounds = QgsGeometry::fromWkt ( QStringLiteral ( " LineString(1 1, 2 2)" ) );
202
+ geoPdfExporter.pushRenderedFeature ( QStringLiteral ( " layer2" ), QgsAbstractGeoPdfExporter::RenderedFeature ( f, renderedBounds ) );
203
+
204
+ QVERIFY ( geoPdfExporter.saveTemporaryLayers () );
205
+ QgsAbstractGeoPdfExporter::VectorComponentDetail component;
206
+ QString layer1Path;
207
+ QString layer1Layer;
208
+ QString layer2Path;
209
+ QString layer2Layer;
210
+
211
+ for ( const auto &it : qgis::as_const ( geoPdfExporter.mVectorComponents ) )
212
+ {
213
+ if ( it.mapLayerId == QStringLiteral ( " layer1" ) )
214
+ {
215
+ layer1Path = it.sourceVectorPath ;
216
+ layer1Layer = it.sourceVectorLayer ;
217
+ }
218
+ else if ( it.mapLayerId == QStringLiteral ( " layer2" ) )
219
+ {
220
+ layer2Path = it.sourceVectorPath ;
221
+ layer2Layer = it.sourceVectorLayer ;
222
+ }
223
+ }
224
+
225
+ // test creation of the composition xml
226
+ QList< QgsAbstractGeoPdfExporter::ComponentLayerDetail > renderedLayers; // no extra layers for now
227
+ QString composition = geoPdfExporter.createCompositionXml ( renderedLayers );
228
+ QgsDebugMsg ( composition );
229
+ QDomDocument doc;
230
+ doc.setContent ( composition );
231
+ QDomNodeList ifLayerOnList = doc.elementsByTagName ( QStringLiteral ( " IfLayerOn" ) );
232
+ QCOMPARE ( ifLayerOnList.count (), 2 );
233
+
234
+ int layer1Idx = ifLayerOnList.at ( 0 ).toElement ().attribute ( QStringLiteral ( " layerId" ) ) == QStringLiteral ( " layer1" ) ? 0 : 1 ;
235
+ int layer2Idx = layer1Idx == 0 ? 1 : 0 ;
236
+ QCOMPARE ( ifLayerOnList.at ( layer1Idx ).toElement ().attribute ( QStringLiteral ( " layerId" ) ), QStringLiteral ( " layer1" ) );
237
+ QCOMPARE ( ifLayerOnList.at ( layer1Idx ).toElement ().elementsByTagName ( QStringLiteral ( " Vector" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " dataset" ) ), layer1Path );
238
+ QCOMPARE ( ifLayerOnList.at ( layer1Idx ).toElement ().elementsByTagName ( QStringLiteral ( " Vector" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " layer" ) ), layer1Layer );
239
+ QCOMPARE ( ifLayerOnList.at ( layer1Idx ).toElement ().elementsByTagName ( QStringLiteral ( " Vector" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " visible" ) ), QStringLiteral ( " false" ) );
240
+ QCOMPARE ( ifLayerOnList.at ( layer1Idx ).toElement ().elementsByTagName ( QStringLiteral ( " LogicalStructure" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " fieldToDisplay" ) ), QStringLiteral ( " attr layer1" ) );
241
+ QCOMPARE ( ifLayerOnList.at ( layer1Idx ).toElement ().elementsByTagName ( QStringLiteral ( " LogicalStructure" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " displayLayerName" ) ), QStringLiteral ( " name layer1" ) );
242
+
243
+ QCOMPARE ( ifLayerOnList.at ( layer2Idx ).toElement ().attribute ( QStringLiteral ( " layerId" ) ), QStringLiteral ( " layer2" ) );
244
+ QCOMPARE ( ifLayerOnList.at ( layer2Idx ).toElement ().elementsByTagName ( QStringLiteral ( " Vector" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " dataset" ) ), layer2Path );
245
+ QCOMPARE ( ifLayerOnList.at ( layer2Idx ).toElement ().elementsByTagName ( QStringLiteral ( " Vector" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " layer" ) ), layer2Layer );
246
+ QCOMPARE ( ifLayerOnList.at ( layer2Idx ).toElement ().elementsByTagName ( QStringLiteral ( " Vector" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " visible" ) ), QStringLiteral ( " false" ) );
247
+ QCOMPARE ( ifLayerOnList.at ( layer2Idx ).toElement ().elementsByTagName ( QStringLiteral ( " LogicalStructure" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " fieldToDisplay" ) ), QStringLiteral ( " attr layer2" ) );
248
+ QCOMPARE ( ifLayerOnList.at ( layer2Idx ).toElement ().elementsByTagName ( QStringLiteral ( " LogicalStructure" ) ).at ( 0 ).toElement ().attribute ( QStringLiteral ( " displayLayerName" ) ), QStringLiteral ( " name layer2" ) );
249
+
250
+
251
+ QDomNodeList layerTreeList = doc.elementsByTagName ( QStringLiteral ( " LayerTree" ) ).at ( 0 ).toElement ().childNodes ();
252
+ QCOMPARE ( layerTreeList.count (), 2 );
253
+
254
+ layer1Idx = layerTreeList.at ( 0 ).toElement ().attribute ( QStringLiteral ( " id" ) ) == QStringLiteral ( " layer1" ) ? 0 : 1 ;
255
+ layer2Idx = layer1Idx == 0 ? 1 : 0 ;
256
+ QCOMPARE ( layerTreeList.at ( layer1Idx ).toElement ().attribute ( QStringLiteral ( " id" ) ), QStringLiteral ( " layer1" ) );
257
+ QCOMPARE ( layerTreeList.at ( layer1Idx ).toElement ().attribute ( QStringLiteral ( " name" ) ), QStringLiteral ( " name layer1" ) );
258
+ QCOMPARE ( layerTreeList.at ( layer1Idx ).toElement ().attribute ( QStringLiteral ( " initiallyVisible" ) ), QStringLiteral ( " true" ) );
259
+
260
+ QCOMPARE ( layerTreeList.at ( layer2Idx ).toElement ().attribute ( QStringLiteral ( " id" ) ), QStringLiteral ( " layer2" ) );
261
+ QCOMPARE ( layerTreeList.at ( layer2Idx ).toElement ().attribute ( QStringLiteral ( " name" ) ), QStringLiteral ( " name layer2" ) );
262
+ QCOMPARE ( layerTreeList.at ( layer2Idx ).toElement ().attribute ( QStringLiteral ( " initiallyVisible" ) ), QStringLiteral ( " true" ) );
263
+
264
+ }
265
+
177
266
QGSTEST_MAIN ( TestQgsGeoPdfExport )
178
267
#include " testqgsgeopdfexport.moc"
0 commit comments