Skip to content

Commit 43aaaf6

Browse files
committedOct 16, 2014
Adding python unit tests for graduated renderer - part 1
1 parent dfafa5d commit 43aaaf6

File tree

2 files changed

+159
-0
lines changed

2 files changed

+159
-0
lines changed
 

‎tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,4 @@ ADD_PYTHON_TEST(PyQgsSpatialiteProvider test_qgsspatialiteprovider.py)
4040
ADD_PYTHON_TEST(PyQgsZonalStatistics test_qgszonalstatistics.py)
4141
ADD_PYTHON_TEST(PyQgsAppStartup test_qgsappstartup.py)
4242
ADD_PYTHON_TEST(PyQgsDistanceArea test_qgsdistancearea.py)
43+
ADD_PYTHON_TEST(PyQgsGraduatedSymbolRendererV2 test_qgsgraduatedsymbolrendererv2.py)
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for QgsGraduatedSymbolRendererV2
3+
4+
.. note:: This program is free software; you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation; either version 2 of the License, or
7+
(at your option) any later version.
8+
"""
9+
__author__ = 'Chris Crook'
10+
__date__ = '3/10/2014'
11+
__copyright__ = 'Copyright 2014, The QGIS Project'
12+
# This will get replaced with a git SHA1 when you do a git archive
13+
__revision__ = '$Format:%H$'
14+
15+
import qgis
16+
from utilities import unittest, TestCase
17+
from qgis.core import QgsGraduatedSymbolRendererV2, QgsRendererRangeV2, QgsRendererRangeV2LabelFormat
18+
from qgis.core import QgsMarkerSymbolV2
19+
20+
class TestGSRUtilities:
21+
22+
@staticmethod
23+
def createMarkerSymbol():
24+
symbol=QgsMarkerSymbolV2.createSimple({
25+
"color":"100,150,50",
26+
"name":"square",
27+
"size":"3.0"
28+
})
29+
return symbol
30+
31+
class TestQgsGraduatedSymbolRendererV2(TestCase):
32+
33+
34+
def testQgsRendererRangeV2_1(self):
35+
"""Test QgsRendererRangeV2 getter/setter functions"""
36+
range=QgsRendererRangeV2()
37+
self.assertTrue(range)
38+
lower=123.45
39+
upper=234.56
40+
label="Test label"
41+
symbol=TestGSRUtilities.createMarkerSymbol()
42+
range.setLowerValue(lower)
43+
self.assertEqual(range.lowerValue(),lower,"Lower value getter/setter failed")
44+
range.setUpperValue(upper)
45+
self.assertEqual(range.upperValue(),upper,"Upper value getter/setter failed")
46+
range.setLabel(label)
47+
self.assertEqual(range.label(),label,"Label getter/setter failed")
48+
range.setRenderState(True)
49+
self.assertTrue(range.renderState(),"Render state getter/setter failed")
50+
range.setRenderState(False)
51+
self.assertFalse(range.renderState(),"Render state getter/setter failed")
52+
range.setSymbol(symbol.clone())
53+
self.assertEqual(symbol.dump(),range.symbol().dump(),"Symbol getter/setter failed")
54+
range2=QgsRendererRangeV2(lower,upper,symbol.clone(),label,False)
55+
self.assertEqual(range2.lowerValue(),lower,"Lower value from constructor failed")
56+
self.assertEqual(range2.upperValue(),upper,"Upper value from constructor failed")
57+
self.assertEqual(range2.label(),label,"Label from constructor failed")
58+
self.assertEqual(range2.symbol().dump(),symbol.dump(),"Symbol from constructor failed")
59+
self.assertFalse(range2.renderState(),"Render state getter/setter failed")
60+
61+
def testQgsRendererRangeV2LabelFormat_1(self):
62+
"""Test QgsRendererRangeV2LabelFormat getter/setter functions"""
63+
format=QgsRendererRangeV2LabelFormat()
64+
self.assertTrue(format,"QgsRendererRangeV2LabelFomat construction failed")
65+
template="%1 - %2 metres"
66+
precision=5
67+
format.setFormat(template)
68+
self.assertEqual(format.format(),template,"Format getter/setter failed")
69+
format.setPrecision(precision)
70+
self.assertEqual(format.precision(),precision,"Precision getter/setter failed")
71+
format.setTrimTrailingZeroes(True)
72+
self.assertTrue(format.trimTrailingZeroes(),"TrimTrailingZeroes getter/setter failed")
73+
format.setTrimTrailingZeroes(False)
74+
self.assertFalse(format.trimTrailingZeroes(),"TrimTrailingZeroes getter/setter failed")
75+
minprecision=-6;
76+
maxprecision=15;
77+
self.assertEqual(QgsRendererRangeV2LabelFormat.MinPrecision,minprecision,"Minimum precision != -6")
78+
self.assertEqual(QgsRendererRangeV2LabelFormat.MaxPrecision,maxprecision,"Maximum precision != 15")
79+
format.setPrecision(-10)
80+
self.assertEqual(format.precision(),minprecision,"Minimum precision not enforced")
81+
format.setPrecision(20)
82+
self.assertEqual(format.precision(),maxprecision,"Maximum precision not enforced")
83+
84+
def testQgsRendererRangeV2LabelFormat_2(self):
85+
"""Test QgsRendererRangeV2LabelFormat number format"""
86+
format=QgsRendererRangeV2LabelFormat()
87+
# Tests have precision, trim, value, expected
88+
# (Note: Not sure what impact of locale is on these tests)
89+
tests=(
90+
(2,False,1.0,'1.00'),
91+
(2,True,1.0,'1'),
92+
(2,False,1.234,'1.23'),
93+
(2,True,1.234,'1.23'),
94+
(2,False,1.236,'1.24'),
95+
(2,False,-1.236,'-1.24'),
96+
(2,False,-0.004,'0.00'),
97+
(2,True,1.002,'1'),
98+
(2,True,1.006,'1.01'),
99+
(2,True,1.096,'1.1'),
100+
(3,True,1.096,'1.096'),
101+
(-2,True,1496.45,'1500'),
102+
(-2,True,149.45,'100'),
103+
(-2,True,79.45,'100'),
104+
(-2,True,49.45,'0'),
105+
(-2,True,-49.45,'0'),
106+
(-2,True,-149.45,'-100'),
107+
)
108+
for f in tests:
109+
precision,trim,value,expected=f
110+
format.setPrecision(precision)
111+
format.setTrimTrailingZeroes(trim)
112+
result=format.formatNumber(value)
113+
testname="{0}:{1}:{2}".format(precision,trim,value)
114+
self.assertEqual(result,expected,
115+
"Number format error {0}:{1}:{2} => {3}".format(
116+
precision,trim,value,result))
117+
118+
# Label tests - label format, expected result.
119+
# Labels will be evaluated with lower=1.23 upper=2.34, precision=2
120+
ltests=(
121+
("%1 - %2","1.23 - 2.34"),
122+
("%1","1.23"),
123+
("%2","2.34"),
124+
("%2%","2.34%"),
125+
("%1%1","1.231.23"),
126+
("from %1 to %2 metres","from 1.23 to 2.34 metres"),
127+
("from %2 to %1 metres","from 2.34 to 1.23 metres"),
128+
)
129+
format.setPrecision(2)
130+
format.setTrimTrailingZeroes(False)
131+
lower=1.232
132+
upper=2.339
133+
for t in ltests:
134+
label,expected=t
135+
format.setFormat(label)
136+
result=format.labelForLowerUpper(lower,upper)
137+
self.assertEqual(result,expected,"Label format error {0} => {1}".format(
138+
label,result))
139+
140+
range=QgsRendererRangeV2()
141+
range.setLowerValue(lower)
142+
range.setUpperValue(upper)
143+
label=ltests[0][0]
144+
format.setFormat(label)
145+
result=format.labelForRange(range)
146+
self.assertEqual(result,ltests[0][1],"Label for range error {0} => {1}".format(
147+
label,result))
148+
149+
150+
def testQgsGraduatedSymbolRendererV2_1(self):
151+
"""Test QgsGraduatedSymbolRendererV2 """
152+
pass
153+
154+
155+
156+
157+
if __name__ == "__main__":
158+
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.