[Test] PyQgsCategorizedSymbolRenderer: add more complex usedAttributes test

This commit is contained in:
rldhont 2019-07-19 12:43:25 +02:00 committed by Nyall Dawson
parent a0f3ceefce
commit 12df8d187a

View File

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
"""QGIS Unit tests for QgsCategorizedSymbolRenderer
From build dir, run: ctest -R PyQgsCategorizedSymbolRenderer -V
.. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
@ -12,6 +14,8 @@ __copyright__ = 'Copyright 2015, The QGIS Project'
import qgis # NOQA
import os
from qgis.testing import unittest, start_app
from qgis.core import (QgsCategorizedSymbolRenderer,
QgsRendererCategory,
@ -26,14 +30,25 @@ from qgis.core import (QgsCategorizedSymbolRenderer,
QgsStyle,
QgsVectorLayer,
QgsEditorWidgetSetup,
QgsReadWriteContext
QgsReadWriteContext,
QgsProject,
QgsSimpleMarkerSymbolLayer,
QgsSymbolLayer,
QgsProperty,
QgsMapSettings,
QgsRectangle,
QgsRenderContext
)
from qgis.PyQt.QtCore import QVariant
from qgis.PyQt.QtCore import Qt, QVariant, QSize
from qgis.PyQt.QtGui import QColor
from qgis.PyQt.QtXml import QDomDocument
from utilities import unitTestDataPath
start_app()
TEST_DATA_DIR = unitTestDataPath()
def createMarkerSymbol():
symbol = QgsMarkerSymbol.createSimple({
@ -574,6 +589,56 @@ class TestQgsCategorizedSymbolRenderer(unittest.TestCase):
renderer.setClassAttribute("valuea - valueb")
self.assertEqual(renderer.usedAttributes(ctx), {"valuea", "valuea - valueb", "valueb"})
def testPointsUsedAttributes(self):
points_shp = os.path.join(TEST_DATA_DIR, 'points.shp')
points_layer = QgsVectorLayer(points_shp, 'Points', 'ogr')
QgsProject.instance().addMapLayer(points_layer)
cats = []
sym1 = QgsMarkerSymbol()
l1 = QgsSimpleMarkerSymbolLayer(QgsSimpleMarkerSymbolLayer.Triangle, 5)
l1.setColor(QColor(255, 0, 0))
l1.setStrokeStyle(Qt.NoPen)
l1.setDataDefinedProperty(QgsSymbolLayer.PropertyAngle, QgsProperty.fromField("Heading"))
sym1.changeSymbolLayer(0, l1)
cats.append(QgsRendererCategory("B52", sym1, "B52"))
sym2 = QgsMarkerSymbol()
l2 = QgsSimpleMarkerSymbolLayer(QgsSimpleMarkerSymbolLayer.Triangle, 5)
l2.setColor(QColor(0, 255, 0))
l2.setStrokeStyle(Qt.NoPen)
l2.setDataDefinedProperty(QgsSymbolLayer.PropertyAngle, QgsProperty.fromField("Heading"))
sym2.changeSymbolLayer(0, l2)
cats.append(QgsRendererCategory("Biplane", sym2, "Biplane"))
sym3 = QgsMarkerSymbol()
l3 = QgsSimpleMarkerSymbolLayer(QgsSimpleMarkerSymbolLayer.Triangle, 5)
l3.setColor(QColor(0, 0, 255))
l3.setStrokeStyle(Qt.NoPen)
l3.setDataDefinedProperty(QgsSymbolLayer.PropertyAngle, QgsProperty.fromField("Heading"))
sym3.changeSymbolLayer(0, l3)
cats.append(QgsRendererCategory("Jet", sym3, "Jet"))
renderer = QgsCategorizedSymbolRenderer("Class", cats)
points_layer.setRenderer(renderer)
ms = QgsMapSettings()
ms.setOutputSize(QSize(400, 400))
ms.setOutputDpi(96)
ms.setExtent(QgsRectangle(-133, 22, -70, 52))
ms.setLayers([points_layer])
ctx = QgsRenderContext.fromMapSettings(ms)
ctx.expressionContext().appendScope(points_layer.createExpressionContextScope())
# for symbol layer
self.assertCountEqual(l1.usedAttributes(ctx), {'Heading'})
# for symbol
self.assertCountEqual(sym1.usedAttributes(ctx), {'Heading'})
# for symbol renderer
self.assertCountEqual(renderer.usedAttributes(ctx), {'Class', 'Heading'})
QgsProject.instance().removeMapLayer(points_layer)
def testFilterNeedsGeometry(self):
renderer = QgsCategorizedSymbolRenderer()