Skip to content

Commit f2638fd

Browse files
committed
Add unit tests for categorized renderer unchecked symbols
(cherry-picked from 7459539)
1 parent 1c3ae78 commit f2638fd

File tree

1 file changed

+142
-1
lines changed

1 file changed

+142
-1
lines changed

tests/src/python/test_qgscategorizedsymbolrenderer.py

Lines changed: 142 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919
QgsRendererCategory,
2020
QgsMarkerSymbol,
2121
QgsField,
22-
QgsFields
22+
QgsFields,
23+
QgsFeature,
24+
QgsRenderContext
2325
)
2426
from qgis.PyQt.QtCore import QVariant
27+
from qgis.PyQt.QtGui import QColor
2528

2629
start_app()
2730

@@ -171,6 +174,144 @@ def testFilterExpression(self):
171174
assert renderer.updateCategoryRenderState(1, False)
172175
self.assertEqual(renderer.filter(fields), "FALSE")
173176

177+
def testSymbolForValue(self):
178+
"""Test symbolForValue"""
179+
renderer = QgsCategorizedSymbolRenderer()
180+
renderer.setClassAttribute('field')
181+
182+
symbol_a = createMarkerSymbol()
183+
symbol_a.setColor(QColor(255, 0, 0))
184+
renderer.addCategory(QgsRendererCategory('a', symbol_a, 'a'))
185+
symbol_b = createMarkerSymbol()
186+
symbol_b.setColor(QColor(0, 255, 0))
187+
renderer.addCategory(QgsRendererCategory('b', symbol_b, 'b'))
188+
symbol_c = createMarkerSymbol()
189+
symbol_c.setColor(QColor(0, 0, 255))
190+
renderer.addCategory(QgsRendererCategory('c', symbol_c, 'c', False))
191+
# add default category
192+
default_symbol = createMarkerSymbol()
193+
default_symbol.setColor(QColor(255, 255, 255))
194+
renderer.addCategory(QgsRendererCategory('', default_symbol, 'default'))
195+
196+
context = QgsRenderContext()
197+
renderer.startRender(context, QgsFields())
198+
199+
symbol, ok = renderer.symbolForValue2('a')
200+
self.assertEqual(symbol.color(), QColor(255, 0, 0))
201+
self.assertTrue(ok)
202+
symbol, ok = renderer.symbolForValue2('b')
203+
self.assertEqual(symbol.color(), QColor(0, 255, 0))
204+
self.assertTrue(ok)
205+
206+
# hidden category
207+
symbol, ok = renderer.symbolForValue2('c')
208+
self.assertIsNone(symbol)
209+
self.assertTrue(ok)
210+
211+
# no matching category
212+
symbol, ok = renderer.symbolForValue2('xxxx')
213+
self.assertIsNone(symbol)
214+
self.assertFalse(ok)
215+
216+
renderer.stopRender(context)
217+
218+
def testOriginalSymbolForFeature(self):
219+
# test renderer with features
220+
fields = QgsFields()
221+
fields.append(QgsField('x'))
222+
223+
# setup renderer
224+
renderer = QgsCategorizedSymbolRenderer()
225+
renderer.setClassAttribute('x')
226+
227+
symbol_a = createMarkerSymbol()
228+
symbol_a.setColor(QColor(255, 0, 0))
229+
renderer.addCategory(QgsRendererCategory('a', symbol_a, 'a'))
230+
symbol_b = createMarkerSymbol()
231+
symbol_b.setColor(QColor(0, 255, 0))
232+
renderer.addCategory(QgsRendererCategory('b', symbol_b, 'b'))
233+
symbol_c = createMarkerSymbol()
234+
symbol_c.setColor(QColor(0, 0, 255))
235+
renderer.addCategory(QgsRendererCategory('c', symbol_c, 'c', False))
236+
# add default category
237+
default_symbol = createMarkerSymbol()
238+
default_symbol.setColor(QColor(255, 255, 255))
239+
renderer.addCategory(QgsRendererCategory('', default_symbol, 'default'))
240+
241+
context = QgsRenderContext()
242+
renderer.startRender(context, fields)
243+
244+
f = QgsFeature(fields)
245+
f.setAttributes(['a'])
246+
247+
symbol = renderer.originalSymbolForFeature(f, context)
248+
self.assertEqual(symbol.color(), QColor(255, 0, 0))
249+
250+
f.setAttributes(['b'])
251+
symbol = renderer.originalSymbolForFeature(f, context)
252+
self.assertEqual(symbol.color(), QColor(0, 255, 0))
253+
254+
# hidden category
255+
f.setAttributes(['c'])
256+
symbol = renderer.originalSymbolForFeature(f, context)
257+
self.assertIsNone(symbol)
258+
259+
# no matching category
260+
f.setAttributes(['xxx'])
261+
symbol = renderer.originalSymbolForFeature(f, context)
262+
self.assertEqual(symbol.color(), QColor(255, 255, 255)) # default symbol
263+
264+
renderer.stopRender(context)
265+
266+
def testLegendKeysWhileCounting(self):
267+
# test determining legend keys for features, while counting features
268+
fields = QgsFields()
269+
fields.append(QgsField('x'))
270+
271+
# setup renderer
272+
renderer = QgsCategorizedSymbolRenderer()
273+
renderer.setClassAttribute('x')
274+
275+
symbol_a = createMarkerSymbol()
276+
symbol_a.setColor(QColor(255, 0, 0))
277+
renderer.addCategory(QgsRendererCategory('a', symbol_a, 'a'))
278+
symbol_b = createMarkerSymbol()
279+
symbol_b.setColor(QColor(0, 255, 0))
280+
renderer.addCategory(QgsRendererCategory('b', symbol_b, 'b'))
281+
symbol_c = createMarkerSymbol()
282+
symbol_c.setColor(QColor(0, 0, 255))
283+
renderer.addCategory(QgsRendererCategory('c', symbol_c, 'c', False))
284+
# add default category
285+
default_symbol = createMarkerSymbol()
286+
default_symbol.setColor(QColor(255, 255, 255))
287+
renderer.addCategory(QgsRendererCategory('', default_symbol, 'default'))
288+
289+
context = QgsRenderContext()
290+
context.setRendererScale(0) # simulate counting
291+
renderer.startRender(context, fields)
292+
293+
f = QgsFeature(fields)
294+
f.setAttributes(['a'])
295+
296+
keys = renderer.legendKeysForFeature(f, context)
297+
self.assertEqual(keys, {'0'})
298+
299+
f.setAttributes(['b'])
300+
keys = renderer.legendKeysForFeature(f, context)
301+
self.assertEqual(keys, {'1'})
302+
303+
# hidden category, should still return keys
304+
f.setAttributes(['c'])
305+
keys = renderer.legendKeysForFeature(f, context)
306+
self.assertEqual(keys, {'2'})
307+
308+
# no matching category
309+
f.setAttributes(['xxx'])
310+
keys = renderer.legendKeysForFeature(f, context)
311+
self.assertFalse(keys)
312+
313+
renderer.stopRender(context)
314+
174315

175316
if __name__ == "__main__":
176317
unittest.main()

0 commit comments

Comments
 (0)