Skip to content

Commit 93e9204

Browse files
committedSep 8, 2015
Add test for rulebased renderer else rule
1 parent 72665e0 commit 93e9204

File tree

10 files changed

+147
-34
lines changed

10 files changed

+147
-34
lines changed
 

‎python/core/symbology-ng/qgsrulebasedrendererv2.sip

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,13 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2
101101
void setFilterExpression( QString filterExp );
102102
void setDescription( QString description );
103103
//! @note added in 2.6
104+
//! @deprecated use setActive instead
104105
void setCheckState( bool state );
106+
/**
107+
* Sets if this rule is active
108+
* @param state Determines if the rule should be activated or deactivated
109+
*/
110+
void setActive( bool state );
105111

106112
//! clone this rule, return new instance
107113
QgsRuleBasedRendererV2::Rule* clone() const /Factory/;

‎tests/src/python/CMakeLists.txt

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,55 +7,56 @@ IF (WITH_SERVER)
77
ADD_PYTHON_TEST(PyQgsLocalServer test_qgis_local_server.py)
88
ENDIF (WITH_SERVER)
99

10+
ADD_PYTHON_TEST(PyQgsAnalysis test_qgsanalysis.py)
1011
ADD_PYTHON_TEST(PyQgsApplication test_qgsapplication.py)
11-
ADD_PYTHON_TEST(PyQgsFontUtils test_qgsfontutils.py)
12-
ADD_PYTHON_TEST(PyQgsFeature test_qgsfeature.py)
13-
ADD_PYTHON_TEST(PyQgsFeatureIterator test_qgsfeatureiterator.py)
14-
ADD_PYTHON_TEST(PyQgsGeometryTest test_qgsgeometry.py)
15-
ADD_PYTHON_TEST(PyQgsGeometryAvoidIntersections test_qgsgeometry_avoid_intersections.py)
16-
ADD_PYTHON_TEST(PyQgsVectorLayer test_qgsvectorlayer.py)
17-
ADD_PYTHON_TEST(PyQgsRasterLayer test_qgsrasterlayer.py)
12+
ADD_PYTHON_TEST(PyQgsAtlasComposition test_qgsatlascomposition.py)
13+
ADD_PYTHON_TEST(PyQgsAttributeTableModel test_qgsattributetablemodel.py)
1814
ADD_PYTHON_TEST(PyQgsBlendModes test_qgsblendmodes.py)
19-
ADD_PYTHON_TEST(PyQgsRasterFileWriter test_qgsrasterfilewriter.py)
20-
ADD_PYTHON_TEST(PyQgsDelimitedTextProvider test_qgsdelimitedtextprovider.py)
21-
ADD_PYTHON_TEST(PyQgsCoordinateTransform test_qgscoordinatetransform.py)
22-
ADD_PYTHON_TEST(PyQgsRectangle test_qgsrectangle.py)
23-
ADD_PYTHON_TEST(PyQgsRelation test_qgsrelation.py)
24-
ADD_PYTHON_TEST(PyQgsSpatialIndex test_qgsspatialindex.py)
25-
ADD_PYTHON_TEST(PyQgsConditionalStyle test_qgsconditionalstyle.py)
26-
ADD_PYTHON_TEST(PyQgsComposerHtml test_qgscomposerhtml.py)
27-
ADD_PYTHON_TEST(PyQgsComposition test_qgscomposition.py)
28-
ADD_PYTHON_TEST(PyQgsAnalysis test_qgsanalysis.py)
2915
ADD_PYTHON_TEST(PyQgsColorScheme test_qgscolorscheme.py)
3016
ADD_PYTHON_TEST(PyQgsColorSchemeRegistry test_qgscolorschemeregistry.py)
17+
ADD_PYTHON_TEST(PyQgsComposerEffects test_qgscomposereffects.py)
18+
ADD_PYTHON_TEST(PyQgsComposerHtml test_qgscomposerhtml.py)
19+
ADD_PYTHON_TEST(PyQgsComposerLabel test_qgscomposerlabel.py)
3120
ADD_PYTHON_TEST(PyQgsComposerMap test_qgscomposermap.py)
3221
ADD_PYTHON_TEST(PyQgsComposerMapGrid test_qgscomposermapgrid.py)
33-
ADD_PYTHON_TEST(PyQgsComposerEffects test_qgscomposereffects.py)
34-
ADD_PYTHON_TEST(PyQgsComposerShapes test_qgscomposershapes.py)
3522
ADD_PYTHON_TEST(PyQgsComposerPicture test_qgscomposerpicture.py)
36-
ADD_PYTHON_TEST(PyQgsSymbolLayerV2 test_qgssymbollayerv2.py)
37-
ADD_PYTHON_TEST(PyQgsPoint test_qgspoint.py)
38-
ADD_PYTHON_TEST(PyQgsAtlasComposition test_qgsatlascomposition.py)
39-
ADD_PYTHON_TEST(PyQgsComposerLabel test_qgscomposerlabel.py)
23+
ADD_PYTHON_TEST(PyQgsComposerShapes test_qgscomposershapes.py)
24+
ADD_PYTHON_TEST(PyQgsComposition test_qgscomposition.py)
25+
ADD_PYTHON_TEST(PyQgsConditionalStyle test_qgsconditionalstyle.py)
26+
ADD_PYTHON_TEST(PyQgsCoordinateTransform test_qgscoordinatetransform.py)
27+
ADD_PYTHON_TEST(PyQgsDelimitedTextProvider test_qgsdelimitedtextprovider.py)
28+
ADD_PYTHON_TEST(PyQgsDistanceArea test_qgsdistancearea.py)
29+
ADD_PYTHON_TEST(PyQgsEditWidgets test_qgseditwidgets.py)
4030
ADD_PYTHON_TEST(PyQgsExpression test_qgsexpression.py)
31+
ADD_PYTHON_TEST(PyQgsFeature test_qgsfeature.py)
32+
ADD_PYTHON_TEST(PyQgsFeatureIterator test_qgsfeatureiterator.py)
33+
ADD_PYTHON_TEST(PyQgsField test_qgsfield.py)
34+
ADD_PYTHON_TEST(PyQgsFontUtils test_qgsfontutils.py)
35+
ADD_PYTHON_TEST(PyQgsGeometryAvoidIntersections test_qgsgeometry_avoid_intersections.py)
36+
ADD_PYTHON_TEST(PyQgsGeometryTest test_qgsgeometry.py)
37+
ADD_PYTHON_TEST(PyQgsGraduatedSymbolRendererV2 test_qgsgraduatedsymbolrendererv2.py)
38+
ADD_PYTHON_TEST(PyQgsMemoryProvider test_provider_memory.py)
39+
ADD_PYTHON_TEST(PyQgsNetworkContentFetcher test_qgsnetworkcontentfetcher.py)
4140
ADD_PYTHON_TEST(PyQgsPalLabelingBase test_qgspallabeling_base.py)
4241
ADD_PYTHON_TEST(PyQgsPalLabelingCanvas test_qgspallabeling_canvas.py)
4342
ADD_PYTHON_TEST(PyQgsPalLabelingComposer test_qgspallabeling_composer.py)
4443
ADD_PYTHON_TEST(PyQgsPalLabelingPlacement test_qgspallabeling_placement.py)
45-
ADD_PYTHON_TEST(PyQgsVectorFileWriter test_qgsvectorfilewriter.py)
46-
ADD_PYTHON_TEST(PyQgsZonalStatistics test_qgszonalstatistics.py)
47-
ADD_PYTHON_TEST(PyQgsDistanceArea test_qgsdistancearea.py)
48-
ADD_PYTHON_TEST(PyQgsGraduatedSymbolRendererV2 test_qgsgraduatedsymbolrendererv2.py)
49-
ADD_PYTHON_TEST(PyQgsNetworkContentFetcher test_qgsnetworkcontentfetcher.py)
50-
ADD_PYTHON_TEST(PyQgsEditWidgets test_qgseditwidgets.py)
44+
ADD_PYTHON_TEST(PyQgsPoint test_qgspoint.py)
5145
ADD_PYTHON_TEST(PyQgsRangeWidgets test_qgsrangewidgets.py)
52-
ADD_PYTHON_TEST(PyQgsAttributeTableModel test_qgsattributetablemodel.py)
53-
ADD_PYTHON_TEST(PyQgsSpatialiteProvider test_provider_spatialite.py)
46+
ADD_PYTHON_TEST(PyQgsRasterFileWriter test_qgsrasterfilewriter.py)
47+
ADD_PYTHON_TEST(PyQgsRasterLayer test_qgsrasterlayer.py)
48+
ADD_PYTHON_TEST(PyQgsRectangle test_qgsrectangle.py)
49+
ADD_PYTHON_TEST(PyQgsRelation test_qgsrelation.py)
50+
ADD_PYTHON_TEST(PyQgsRulebasedRenderer test_qgsrulebasedrenderer.py)
5451
ADD_PYTHON_TEST(PyQgsShapefileProvider test_provider_shapefile.py)
55-
ADD_PYTHON_TEST(PyQgsMemoryProvider test_provider_memory.py)
56-
ADD_PYTHON_TEST(PyQgsVectorColorRamp test_qgsvectorcolorramp.py)
52+
ADD_PYTHON_TEST(PyQgsSpatialIndex test_qgsspatialindex.py)
53+
ADD_PYTHON_TEST(PyQgsSpatialiteProvider test_provider_spatialite.py)
54+
ADD_PYTHON_TEST(PyQgsSymbolLayerV2 test_qgssymbollayerv2.py)
5755
ADD_PYTHON_TEST(PyQgsSyntacticSugar test_syntactic_sugar.py)
58-
ADD_PYTHON_TEST(PyQgsField test_qgsfield.py)
56+
ADD_PYTHON_TEST(PyQgsVectorColorRamp test_qgsvectorcolorramp.py)
57+
ADD_PYTHON_TEST(PyQgsVectorFileWriter test_qgsvectorfilewriter.py)
58+
ADD_PYTHON_TEST(PyQgsVectorLayer test_qgsvectorlayer.py)
59+
ADD_PYTHON_TEST(PyQgsZonalStatistics test_qgszonalstatistics.py)
5960

6061
IF (NOT WIN32)
6162
ADD_PYTHON_TEST(PyQgsLogger test_qgslogger.py)
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
test_qgsrulebasedrenderer.py
6+
---------------------
7+
Date : September 2015
8+
Copyright : (C) 2015 by Matthias Kuhn
9+
Email : matthias at opengis dot ch
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Matthias Kuhn'
21+
__date__ = 'September 2015'
22+
__copyright__ = '(C) 2015, Matthiasd Kuhn'
23+
# This will get replaced with a git SHA1 when you do a git archive
24+
__revision__ = '$Format:%H$'
25+
26+
import qgis
27+
import os
28+
29+
from PyQt4.QtCore import QSize
30+
31+
from qgis.core import (QgsVectorLayer,
32+
QgsMapLayerRegistry,
33+
QgsRectangle,
34+
QgsMultiRenderChecker,
35+
QgsRuleBasedRendererV2,
36+
QgsFillSymbolV2
37+
)
38+
from utilities import (unitTestDataPath,
39+
getQgisTestApp,
40+
TestCase,
41+
unittest
42+
)
43+
# Convenience instances in case you may need them
44+
# not used in this test
45+
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
46+
TEST_DATA_DIR = unitTestDataPath()
47+
48+
49+
class TestQgsRulebasedRenderer(TestCase):
50+
51+
def setUp(self):
52+
myShpFile = os.path.join(TEST_DATA_DIR, 'rectangles.shp')
53+
layer = QgsVectorLayer(myShpFile, 'Points', 'ogr')
54+
QgsMapLayerRegistry.instance().addMapLayer(layer)
55+
56+
# Create rulebased style
57+
sym1 = QgsFillSymbolV2.createSimple({'color': '#fdbf6f'})
58+
sym2 = QgsFillSymbolV2.createSimple({'color': '#71bd6c'})
59+
sym3 = QgsFillSymbolV2.createSimple({'color': '#1f78b4'})
60+
61+
self.r1 = QgsRuleBasedRendererV2.Rule(sym1, 0, 0, '"id" = 1')
62+
self.r2 = QgsRuleBasedRendererV2.Rule(sym2, 0, 0, '"id" = 2')
63+
self.r3 = QgsRuleBasedRendererV2.Rule(sym3, 0, 0, 'ELSE')
64+
65+
self.rootrule = QgsRuleBasedRendererV2.Rule(None)
66+
self.rootrule.appendChild(self.r1)
67+
self.rootrule.appendChild(self.r2)
68+
self.rootrule.appendChild(self.r3)
69+
70+
self.renderer = QgsRuleBasedRendererV2(self.rootrule)
71+
layer.setRendererV2(self.renderer)
72+
self.mapsettings = CANVAS.mapSettings()
73+
self.mapsettings.setOutputSize(QSize(400, 400))
74+
self.mapsettings.setOutputDpi(96)
75+
self.mapsettings.setExtent(QgsRectangle(-163, 22, -70, 52))
76+
77+
rendered_layers = [layer.id()]
78+
self.mapsettings.setLayers(rendered_layers)
79+
80+
def tearDown(self):
81+
QgsMapLayerRegistry.instance().removeAllMapLayers()
82+
83+
def testElse(self):
84+
# Setup rendering check
85+
renderchecker = QgsMultiRenderChecker()
86+
renderchecker.setMapSettings(self.mapsettings)
87+
renderchecker.setControlName('expected_rulebased_else')
88+
result = renderchecker.runTest('rulebased_else')
89+
90+
assert result
91+
92+
def testDisabledElse(self):
93+
# Disable a rule and assert that it's hidden not rendered with else
94+
self.r2.setActive(False)
95+
96+
renderchecker = QgsMultiRenderChecker()
97+
renderchecker.setMapSettings(self.mapsettings)
98+
renderchecker.setControlName('expected_rulebased_disabled_else')
99+
result = renderchecker.runTest('rulebased_disabled_else')
100+
101+
assert result
102+
103+
if __name__ == '__main__':
104+
unittest.main()

Error rendering embedded code

Invalid image source.

Error rendering embedded code

Invalid image source.

‎tests/testdata/rectangles.dbf

98 Bytes
Binary file not shown.

‎tests/testdata/rectangles.prj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]

‎tests/testdata/rectangles.qpj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]

‎tests/testdata/rectangles.shp

508 Bytes
Binary file not shown.

‎tests/testdata/rectangles.shx

124 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)
Please sign in to comment.