From a9c63968bf3fad45c34dc4e6845fae2422b6a6e6 Mon Sep 17 00:00:00 2001 From: Hugo Mercier Date: Fri, 19 Jun 2015 14:50:37 +0200 Subject: [PATCH] Add unit test for QgsLayerTreeModel::setLegendFilterByMap() --- tests/src/core/testqgslegendrenderer.cpp | 51 ++++++++++++++++++ .../expected_legend_filter_by_map.png | Bin 0 -> 10637 bytes 2 files changed, 51 insertions(+) create mode 100644 tests/testdata/control_images/expected_legend_filter_by_map/expected_legend_filter_by_map.png diff --git a/tests/src/core/testqgslegendrenderer.cpp b/tests/src/core/testqgslegendrenderer.cpp index e74b00c5cbc..eae47b2c0af 100644 --- a/tests/src/core/testqgslegendrenderer.cpp +++ b/tests/src/core/testqgslegendrenderer.cpp @@ -17,6 +17,8 @@ #include "qgsrenderchecker.h" #include "qgssinglesymbolrendererv2.h" #include "qgsvectorlayer.h" +#include "qgsvectordataprovider.h" +#include "qgsgeometry.h" @@ -85,6 +87,7 @@ class TestQgsLegendRenderer : public QObject void testBigMarker(); void testLongSymbolText(); void testThreeColumns(); + void testFilterByMap(); private: QgsLayerTreeGroup* mRoot; @@ -123,6 +126,29 @@ void TestQgsLegendRenderer::init() mVL2->setRendererV2( new QgsSingleSymbolRendererV2( sym2 ) ); mVL3 = new QgsVectorLayer( "Point", "Point Layer", "memory" ); + { + QgsVectorDataProvider* pr = mVL3->dataProvider(); + QList attrs; + attrs << QgsField("test_attr", QVariant::Int); + pr->addAttributes( attrs ); + + QgsFields fields; + fields.append( attrs.back() ); + + QList features; + QgsFeature f1(fields, 1); + f1.setAttribute(0, 1); + f1.setGeometry( QgsGeometry::fromPoint(QgsPoint(1.0, 1.0)) ); + QgsFeature f2(fields, 2); + f2.setAttribute(0, 2); + f2.setGeometry( QgsGeometry::fromPoint(QgsPoint(9.0, 1.0)) ); + QgsFeature f3(fields, 3); + f3.setAttribute(0, 3); + f3.setGeometry( QgsGeometry::fromPoint(QgsPoint(5.0, 5.0)) ); + features << f1 << f2 << f3; + pr->addFeatures( features ); + mVL3->updateFields(); + } QgsMapLayerRegistry::instance()->addMapLayer( mVL3 ); static char raster_array[] = { 1, 2, 2, 1 }; @@ -249,6 +275,31 @@ void TestQgsLegendRenderer::testThreeColumns() _verifyImage( testName ); } +void TestQgsLegendRenderer::testFilterByMap() +{ + QString testName = "legend_filter_by_map"; + + QgsLayerTreeModel legendModel( mRoot ); + + QgsMapSettings mapSettings; + // extent and size to include only the red and green points + mapSettings.setExtent( QgsRectangle( 0, 0, 10.0, 4.0 ) ); + mapSettings.setOutputSize( QSize(400,100) ); + mapSettings.setOutputDpi( 96 ); + QStringList ll; + foreach( auto l, QgsMapLayerRegistry::instance()->mapLayers() ) + { + ll << l->id(); + } + mapSettings.setLayers( ll ); + + legendModel.setLegendFilterByMap( &mapSettings ); + + QgsLegendSettings settings; + _setStandardTestFont( settings ); + _renderLegend( testName, &legendModel, settings ); + _verifyImage( testName ); +} QTEST_MAIN( TestQgsLegendRenderer ) #include "testqgslegendrenderer.moc" diff --git a/tests/testdata/control_images/expected_legend_filter_by_map/expected_legend_filter_by_map.png b/tests/testdata/control_images/expected_legend_filter_by_map/expected_legend_filter_by_map.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2e292f5205110555859d3dff634f30f00d5bb2 GIT binary patch literal 10637 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 literal 0 HcmV?d00001