2424#include " qgsmultibandcolorrenderer.h"
2525#include " qgsrasterlayer.h"
2626#include " qgsvectorlayer.h"
27+ #include " qgsproject.h"
28+ #include " qgsvisibilitypresetcollection.h"
2729#include < QObject>
2830#include < QtTest/QtTest>
2931
@@ -49,6 +51,7 @@ class TestQgsComposerMap : public QObject
4951 void worldFileGeneration (); // test world file generation
5052 void mapPolygonVertices (); // test mapPolygon function with no map rotation
5153 void dataDefinedLayers (); // test data defined layer string
54+ void dataDefinedStyles (); // test data defined styles
5255
5356 private:
5457 QgsComposition *mComposition ;
@@ -279,5 +282,60 @@ void TestQgsComposerMap::dataDefinedLayers()
279282 QVERIFY ( checker.testComposition ( mReport , 0 , 0 ) );
280283}
281284
285+ void TestQgsComposerMap::dataDefinedStyles ()
286+ {
287+ delete mComposition ;
288+ QgsMapSettings ms;
289+ ms.setLayers ( QStringList () << mRasterLayer ->id () << mPolysLayer ->id () << mPointsLayer ->id () << mLinesLayer ->id () );
290+ ms.setCrsTransformEnabled ( true );
291+
292+ mComposition = new QgsComposition ( ms );
293+ mComposition ->setPaperSize ( 297 , 210 ); // A4 landscape
294+ mComposerMap = new QgsComposerMap ( mComposition , 20 , 20 , 200 , 100 );
295+ mComposerMap ->setFrameEnabled ( true );
296+ mComposition ->addComposerMap ( mComposerMap );
297+
298+ QgsVisibilityPresetCollection::PresetRecord rec;
299+ rec.mVisibleLayerIDs .insert ( mPointsLayer ->id () );
300+ rec.mVisibleLayerIDs .insert ( mLinesLayer ->id () );
301+
302+ QgsProject::instance ()->visibilityPresetCollection ()->insert ( " test preset" , rec );
303+
304+ // test malformed style string
305+ mComposerMap ->setDataDefinedProperty ( QgsComposerObject::MapStylePreset, true , true , " 5" , QString () );
306+ QSet<QString> result = mComposerMap ->layersToRender ().toSet ();
307+ QCOMPARE ( result, ms.layers ().toSet () );
308+
309+ // test valid preset
310+ mComposerMap ->setDataDefinedProperty ( QgsComposerObject::MapStylePreset, true , true , QString ( " 'test preset'" ), QString () );
311+ result = mComposerMap ->layersToRender ().toSet ();
312+ QCOMPARE ( result.count (), 2 );
313+ QVERIFY ( result.contains ( mLinesLayer ->id () ) );
314+ QVERIFY ( result.contains ( mPointsLayer ->id () ) );
315+
316+ // test non-existant preset
317+ mComposerMap ->setDataDefinedProperty ( QgsComposerObject::MapStylePreset, true , true ,
318+ QString ( " 'bad preset'" ), QString () );
319+ result = mComposerMap ->layersToRender ().toSet ();
320+ QCOMPARE ( result, ms.layers ().toSet () );
321+
322+ // test that dd layer set overrides style layers
323+ mComposerMap ->setDataDefinedProperty ( QgsComposerObject::MapStylePreset, true , true , QString ( " 'test preset'" ), QString () );
324+ mComposerMap ->setDataDefinedProperty ( QgsComposerObject::MapLayers, true , true ,
325+ QString ( " '%1'" ).arg ( mPolysLayer ->name () ), QString () );
326+ result = mComposerMap ->layersToRender ().toSet ();
327+ QCOMPARE ( result.count (), 1 );
328+ QVERIFY ( result.contains ( mPolysLayer ->id () ) );
329+ mComposerMap ->setDataDefinedProperty ( QgsComposerObject::MapLayers, false , true , QString (), QString () );
330+
331+ // render test
332+ mComposerMap ->setDataDefinedProperty ( QgsComposerObject::MapStylePreset, true , true ,
333+ QString ( " 'test preset'" ), QString () );
334+ mComposerMap ->setNewExtent ( QgsRectangle ( -110.0 , 25.0 , -90 , 40.0 ) );
335+
336+ QgsCompositionChecker checker ( " composermap_ddstyles" , mComposition );
337+ QVERIFY ( checker.testComposition ( mReport , 0 , 0 ) );
338+ }
339+
282340QTEST_MAIN ( TestQgsComposerMap )
283341#include " testqgscomposermap.moc"
0 commit comments