|
| 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