@@ -1179,6 +1179,70 @@ class TestQgsRuleBasedRenderer: public QgsTest
1179
1179
QCOMPARE ( renderer->legendKeys (), expected );
1180
1180
}
1181
1181
1182
+ void testLegendKeysForFeature ()
1183
+ {
1184
+ QgsRuleBasedRenderer::Rule *rootRule = new QgsRuleBasedRenderer::Rule ( nullptr );
1185
+ std::unique_ptr< QgsRuleBasedRenderer > renderer = std::make_unique< QgsRuleBasedRenderer >( rootRule );
1186
+ std::unique_ptr< QgsMarkerSymbol > symbol ( QgsMarkerSymbol::createSimple ( {} ) );
1187
+
1188
+ QgsRuleBasedRenderer::Rule *lessThanTwoRule = new QgsRuleBasedRenderer::Rule ( symbol->clone (), 0 , 0 , " \" Importance\" <= 2" );
1189
+ rootRule->appendChild ( lessThanTwoRule );
1190
+
1191
+ QgsRuleBasedRenderer::Rule *elseRule = new QgsRuleBasedRenderer::Rule ( nullptr , 0 , 0 , QString (), QString (), QString (), true );
1192
+ rootRule->appendChild ( elseRule );
1193
+
1194
+ QgsRuleBasedRenderer::Rule *oneRule = new QgsRuleBasedRenderer::Rule ( symbol->clone (), 0 , 0 , " \" Pilots\" = 1" );
1195
+ elseRule->appendChild ( oneRule );
1196
+
1197
+ QgsRuleBasedRenderer::Rule *twoRule = new QgsRuleBasedRenderer::Rule ( symbol->clone (), 0 , 0 , " \" Pilots\" = 2" );
1198
+ elseRule->appendChild ( twoRule );
1199
+
1200
+ QgsRuleBasedRenderer::Rule *threeRule = new QgsRuleBasedRenderer::Rule ( symbol->clone (), 0 , 0 , " \" Pilots\" = 3" );
1201
+ elseRule->appendChild ( threeRule );
1202
+
1203
+ QgsFields fields;
1204
+ fields.append ( QgsField ( QStringLiteral ( " Importance" ), QVariant::Int ) );
1205
+ fields.append ( QgsField ( QStringLiteral ( " Pilots" ), QVariant::Int ) );
1206
+
1207
+ QgsFeature feature ( fields );
1208
+ QgsExpressionContext expContext;
1209
+ expContext.setFields ( fields );
1210
+ QgsRenderContext rc;
1211
+ rc.setExpressionContext ( expContext );
1212
+
1213
+ renderer->startRender ( rc, fields );
1214
+
1215
+ QSet< QString > expected{rootRule->ruleKey (), elseRule->ruleKey () };
1216
+ QCOMPARE ( renderer->legendKeysForFeature ( feature, rc ), expected );
1217
+
1218
+ feature.setAttributes ( QgsAttributes () << 1 << 2 );
1219
+ expected = {rootRule->ruleKey (), lessThanTwoRule->ruleKey () };
1220
+ QCOMPARE ( renderer->legendKeysForFeature ( feature, rc ), expected );
1221
+
1222
+ feature.setAttributes ( QgsAttributes () << 2 << 2 );
1223
+ expected = {rootRule->ruleKey (), lessThanTwoRule->ruleKey () };
1224
+ QCOMPARE ( renderer->legendKeysForFeature ( feature, rc ), expected );
1225
+
1226
+ feature.setAttributes ( QgsAttributes () << 3 << 1 );
1227
+ expected = {rootRule->ruleKey (), elseRule->ruleKey (), oneRule->ruleKey () };
1228
+ QCOMPARE ( renderer->legendKeysForFeature ( feature, rc ), expected );
1229
+
1230
+ feature.setAttributes ( QgsAttributes () << 3 << 2 );
1231
+ expected = {rootRule->ruleKey (), elseRule->ruleKey (), twoRule->ruleKey () };
1232
+ QCOMPARE ( renderer->legendKeysForFeature ( feature, rc ), expected );
1233
+
1234
+ feature.setAttributes ( QgsAttributes () << 3 << 3 );
1235
+ expected = {rootRule->ruleKey (), elseRule->ruleKey (), threeRule->ruleKey () };
1236
+ QCOMPARE ( renderer->legendKeysForFeature ( feature, rc ), expected );
1237
+
1238
+ feature.setAttributes ( QgsAttributes () << 3 << 4 );
1239
+ expected = {rootRule->ruleKey (), elseRule->ruleKey () };
1240
+ QCOMPARE ( renderer->legendKeysForFeature ( feature, rc ), expected );
1241
+
1242
+ renderer->stopRender ( rc );
1243
+ }
1244
+
1245
+
1182
1246
void testLegendKeyToExpression ()
1183
1247
{
1184
1248
QgsRuleBasedRenderer::Rule *rootRule = new QgsRuleBasedRenderer::Rule ( nullptr );
0 commit comments