From 12df8d187a5be83579750db68325a4279f006429 Mon Sep 17 00:00:00 2001 From: rldhont Date: Fri, 19 Jul 2019 12:43:25 +0200 Subject: [PATCH] [Test] PyQgsCategorizedSymbolRenderer: add more complex usedAttributes test --- .../test_qgscategorizedsymbolrenderer.py | 69 ++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/tests/src/python/test_qgscategorizedsymbolrenderer.py b/tests/src/python/test_qgscategorizedsymbolrenderer.py index 0b4dbd195ca..f144464e496 100644 --- a/tests/src/python/test_qgscategorizedsymbolrenderer.py +++ b/tests/src/python/test_qgscategorizedsymbolrenderer.py @@ -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()