Skip to content

Commit f4cddb4

Browse files
committedAug 17, 2019
More tests
1 parent c23b1c6 commit f4cddb4

File tree

2 files changed

+94
-2
lines changed

2 files changed

+94
-2
lines changed
 

‎src/core/qgsabstractgeopdfexporter.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,11 @@ class CORE_EXPORT QgsAbstractGeoPdfExporter
131131
/**
132132
* To be called after the rendering operation is complete.
133133
*
134-
* Will export the list of PDF layer \a components to a new PDF file at \a destinationFile. Any features
135-
* previously collected by calls to pushRenderedFeature() will be included automatically in the GeoPDF
134+
* Will export the list of PDF layer \a components to a new PDF file at \a destinationFile. The \a components
135+
* argument gives a list of additional layers to include in the generated PDF file. These must have already
136+
* been created, e.g. as a result of rendering layers to seperate PDF source files.
137+
*
138+
* Any features previously collected by calls to pushRenderedFeature() will be included automatically in the GeoPDF
136139
* export.
137140
*
138141
* Returns TRUE if the operation was successful, or FALSE if an error occurred. If an error occurred, it

‎tests/src/core/testqgsgeopdfexport.cpp

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class TestQgsGeoPdfExport : public QObject
5555
void init();// will be called before each testfunction is executed.
5656
void cleanup();// will be called after every testfunction.
5757
void testCollectingFeatures();
58+
void testComposition();
5859

5960
private:
6061

@@ -174,5 +175,93 @@ void TestQgsGeoPdfExport::testCollectingFeatures()
174175
QCOMPARE( f.geometry().asWkt(), QStringLiteral( "LineString (1 1, 2 2)" ) );
175176
}
176177

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+
177266
QGSTEST_MAIN( TestQgsGeoPdfExport )
178267
#include "testqgsgeopdfexport.moc"

0 commit comments

Comments
 (0)
Please sign in to comment.