@@ -125,6 +125,42 @@ def testWillRenderFeature(self):
125
125
renderer .stopRender (ctx )
126
126
assert rendered == True
127
127
128
+ def testWillRenderFeatureNestedElse (self ):
129
+ vl = self .mapsettings .layers ()[0 ]
130
+ ft = vl .getFeature (0 ) # 'id' = 1
131
+
132
+ ctx = QgsRenderContext .fromMapSettings (self .mapsettings )
133
+ ctx .expressionContext ().setFeature (ft )
134
+
135
+ # Create rulebased style
136
+ sym1 = QgsFillSymbol .createSimple ({'color' : '#fdbf6f' , 'outline_color' : 'black' })
137
+ sym2 = QgsFillSymbol .createSimple ({'color' : '#71bd6c' , 'outline_color' : 'black' })
138
+ sym3 = QgsFillSymbol .createSimple ({'color' : '#1f78b4' , 'outline_color' : 'black' })
139
+
140
+ self .rx1 = QgsRuleBasedRenderer .Rule (sym1 , 0 , 0 , '"id" = 1' )
141
+ self .rx2 = QgsRuleBasedRenderer .Rule (sym2 , 0 , 0 , '"id" = 2' )
142
+ self .rx3 = QgsRuleBasedRenderer .Rule (sym3 , 0 , 0 , 'ELSE' )
143
+
144
+ self .rx3 .appendChild (self .rx1 )
145
+
146
+ rootrule = QgsRuleBasedRenderer .Rule (None )
147
+ rootrule .appendChild (self .rx2 )
148
+ rootrule .appendChild (self .rx3 )
149
+
150
+ vl .setRenderer (QgsRuleBasedRenderer (rootrule ))
151
+ renderer = vl .renderer ()
152
+
153
+ # Reunder with else rule and all activated
154
+ renderer .startRender (ctx , vl .fields ())
155
+ self .assertTrue (renderer .willRenderFeature (ft , ctx ))
156
+ renderer .stopRender (ctx )
157
+
158
+ # Reunder with else rule where else is deactivated
159
+ renderer .rootRule ().children ()[1 ].setActive (False )
160
+ renderer .startRender (ctx , vl .fields ())
161
+ self .assertFalse (renderer .willRenderFeature (ft , ctx ))
162
+ renderer .stopRender (ctx )
163
+
128
164
def testFeatureCount (self ):
129
165
vl = self .mapsettings .layers ()[0 ]
130
166
ft = vl .getFeature (2 ) # 'id' = 3 => ELSE
0 commit comments