/[thuban]/branches/WIP-pyshapelib-bramz/test/test_classification.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/test/test_classification.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 369 by jonathan, Mon Jan 27 11:53:51 2003 UTC revision 1356 by jonathan, Wed Jul 2 09:37:59 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002 by Intevation GmbH  # Copyright (c) 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jonathan Coles <[email protected]>  # Jonathan Coles <[email protected]>
4  #  #
# Line 13  __version__ = "$Revision$" Line 13  __version__ = "$Revision$"
13  # $Source$  # $Source$
14  # $Id$  # $Id$
15    
16    from __future__ import nested_scopes
17    
18  import unittest  import unittest
19    
20  import support  import support
21  support.initthuban()  support.initthuban()
22    
23  from Thuban.Model.classification import Classification  import os
24    from Thuban.Model.color import Color, Transparent, Black
25    from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_STRING, FIELDTYPE_DOUBLE
26    from Thuban.Model.classification import \
27        Classification, ClassGroup, \
28        ClassGroupDefault, ClassGroupSingleton, ClassGroupRange,\
29        ClassGroupProperties
30    
31    from Thuban.Model.session import Session
32    from Thuban.Model.layer import Layer
33    from Thuban.Model.range import Range
34    
35    import copy
36    
37    
38  class TestClassification(unittest.TestCase):  class TestClassification(unittest.TestCase):
39    
40      def test_classification(self):      def test_ClassGroupProperties(self):
41          """Test Classification"""          """Test ClassGroupProperties"""
42    
43          #          props = ClassGroupProperties()
44          # init with no params          self.assertEqual(props.GetLineColor(), Black)
45          #          self.assertEqual(props.GetLineWidth(), 1)
46          c = Classification()          self.assertEqual(props.GetFill(), Transparent)
47          self.assertEquals(c.field, None)  
48          self.assertEquals(c.NullData, None)          red = Color(1, 0, 0)
49            props.SetLineColor(red)
50            self.assertEqual(props.GetLineColor(), red)
51    
52            blue = Color(0, 0, 1)
53            props.SetLineColor(blue)
54            self.assertEqual(props.GetLineColor(), blue)
55    
56            props.SetLineWidth(10)
57            self.assertEqual(props.GetLineWidth(), 10)
58    
59            self.assertRaises(ValueError, props.SetLineWidth, -10)
60            self.assertEqual(props.GetLineWidth(), 10)
61    
62            newProps1 = ClassGroupProperties()
63            newProps2 = ClassGroupProperties()
64            self.assertNotEqual(newProps1, props)
65            self.assertEqual(newProps1, newProps2)
66    
67        def test_ClassGroup(self):
68            """Test ClassGroup"""
69    
70            # test constructor with no label
71            group = ClassGroup()
72            self.assertEqual(group.GetLabel(), "")
73    
74            # test constructor with label
75            group = ClassGroup("hallo")
76            self.assertEqual(group.GetLabel(), "hallo")
77    
78            # test SetLabel()/GetLabel()
79            group = ClassGroup("welt")
80            group.SetLabel("hallo")
81            self.assertEqual(group.GetLabel(), "hallo")
82    
83            group.SetLabel("")
84            self.assertEqual(group.GetLabel(), "")
85    
86            # test Matches
87            # Matches() is a virtual function...can't test it here
88            #
89            #self.assertEqual(group.Matches(None), False)
90            #self.assertEqual(group.Matches(1), False)
91            #self.assertEqual(group.Matches("hallo"), False)
92            #self.assertEqual(group.Matches([]), False)
93    
94            # test GetProperties...also a virtual function
95            #self.assertEqual(group.GetProperties(), None)
96    
97        def test_ClassGroupDefault(self):
98            """Test ClassGroupDefault"""
99    
100            defProps = ClassGroupProperties()
101    
102            newProps = ClassGroupProperties()
103            newProps.SetLineColor(Color(.25, .5, .75))
104            newProps.SetLineWidth(5)
105            newProps.SetFill(Color(.12, .24, .36))
106    
107            # test constructor
108    
109            group = ClassGroupDefault(newProps)
110            self.assertEqual(group.GetProperties(), newProps)
111    
112            group = ClassGroupDefault(newProps, "hallo")
113            self.assertEqual(group.GetProperties(), newProps)
114            self.assertEqual(group.GetLabel(), "hallo")
115    
116            # test empty constructor
117            group = ClassGroupDefault()
118            props = group.GetProperties()
119    
120            self.assertEqual(group.GetLabel(), "")
121            self.assertEqual(defProps, props)
122    
123            # test Matches()
124            self.assertEqual(group.Matches(None), True)
125            self.assertEqual(group.Matches(1), True)
126            self.assertEqual(group.Matches("hallo"), True)
127            self.assertEqual(group.Matches([]), True)
128    
129            # test SetProperties()/GetProperties()
130            group.SetProperties(newProps)
131            self.assertEqual(group.GetProperties(), newProps)
132    
133            # test copy
134            groupCopy = copy.copy(group)
135            self.assertEqual(group, groupCopy)
136    
137        def test_ClassGroupRange(self):
138            """Test ClassGroupRange"""
139    
140            defProps = ClassGroupProperties()
141            newProps = ClassGroupProperties()
142            newProps.SetLineColor(Color(.25, .5, .75))
143            newProps.SetLineWidth(5)
144            newProps.SetFill(Color(.12, .24, .36))
145    
146            # test empty constructor
147            group = ClassGroupRange()
148    
149            self.assertEqual(group.GetMin(), 0)
150            self.assertEqual(group.GetMax(), 1)
151            self.assertEqual(group.GetProperties(), defProps)
152            self.assertEqual(group.GetLabel(), "")
153            
154            # test SetMax()
155            self.assertRaises(ValueError, group.SetMax, 0)
156            self.assertRaises(ValueError, group.SetMax, -1)
157            self.assertEquals(group.GetMax(), 1)
158            group.SetMax(2)
159            self.assertEquals(group.GetMax(), 2)
160    
161            # test SetMin()
162            self.assertRaises(ValueError, group.SetMin, 2)
163            self.assertRaises(ValueError, group.SetMin, 3)
164            self.assertEquals(group.GetMin(), 0)
165            group.SetMin(-5)
166            self.assertEquals(group.GetMin(), -5)
167    
168            # test SetProperties()/GetProperties()
169            group.SetProperties(newProps)
170            self.assertEqual(group.GetProperties(), newProps)
171    
172            # test SetRange()
173            self.assertRaises(ValueError, group.SetRange, (1, 0))
174            group.SetRange(Range("]-oo;6]"))
175            self.assertEqual(group.GetRange(), "]-oo;6]")
176            group.SetRange((-5, 5))
177            self.assertEqual(group.GetRange(), "[-5;5[")
178    
179            # test Matches()
180            self.assertEqual(group.Matches(-6), False)
181            self.assertEqual(group.Matches(-5), True)
182            self.assertEqual(group.Matches(0), True)
183            self.assertEqual(group.Matches(4), True)
184            self.assertEqual(group.Matches(5), False)
185    
186            # test copy
187            groupCopy = copy.copy(group)
188            self.assertEqual(group, groupCopy)
189    
190        def test_ClassGroupSingleton(self):
191            """Test ClassGroupSingleton"""
192    
193            defProps = ClassGroupProperties()
194            newProps = ClassGroupProperties()
195            newProps.SetLineColor(Color(.25, .5, .75))
196            newProps.SetLineWidth(5)
197            newProps.SetFill(Color(.12, .24, .36))
198    
199            # test empty constructor
200            group = ClassGroupSingleton()
201    
202            self.assertEqual(group.GetValue(), 0)
203            self.assertEqual(group.GetProperties(), defProps)
204            self.assertEqual(group.GetLabel(), "")
205    
206            # test SetProperties()/GetProperties()
207            group.SetProperties(newProps)
208            self.assertEqual(group.GetProperties(), newProps)
209    
210            # test SetValue()
211            group.SetValue(5)
212            self.assertEqual(group.GetValue(), 5)
213    
214            # test Matches()
215            self.assertEqual(group.Matches(0), False)
216            self.assertEqual(group.Matches(5), True)
217    
218            group.SetValue("5")
219            self.assertNotEqual(group.GetValue(), 5)
220    
221            # test Matches()
222            self.assertEqual(group.Matches(5), False)
223            self.assertEqual(group.Matches("5"), True)
224    
225            group.SetValue("hallo")
226            self.assertEqual(group.GetValue(), "hallo")
227    
228            # test Matches()
229            self.assertEqual(group.Matches("HALLO"), False)
230            self.assertEqual(group.Matches("hallo"), True)
231    
232            # test copy
233            groupCopy = copy.copy(group)
234            self.assertEqual(group, groupCopy)
235            
236    
237        def test_ClassIterator(self):
238            """Test ClassIterator"""
239    
240            groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),
241                      ClassGroupRange((-3, 3)), ClassGroupSingleton(-5),
242                      ClassGroupDefault()]
243    
244            clazz = Classification()
245    
246            for g in groups:
247                clazz.AppendGroup(g)
248    
249            def convert(clazz):
250                if isinstance(clazz, ClassGroupDefault):   return 0
251                if isinstance(clazz, ClassGroupSingleton): return 1
252                if isinstance(clazz, ClassGroupRange):     return 2
253    
254            list = []
255            for g in clazz:
256                list.append(convert(g))
257    
258          #          self.assertEquals(list, [0, 1, 1, 2, 1, 0])
         # setField  
         #  
         c = Classification()  
         c.setField("Test")  
         self.assertEquals(c.field, "Test")  
         c.setField(None)  
         self.assertEquals(c.field, None)  
259    
260          #      def test_classification(self):
261          # init with field          """Test Classification"""
         #  
         c = Classification("Test")  
         self.assertEquals(c.field, "Test")  
         self.assertEquals(c.NullData, None)  
262    
263          #          defProps = ClassGroupProperties()
264          # addRange          red   = Color(1, 0, 0)
265          #          green = Color(0, 1, 0)
266          c0 = Classification("c0")          blue  = Color(0, 0, 1)
267          self.assertRaises(ValueError, c0.addRange, 0, 0, None)  
268          self.assertRaises(ValueError, c0.addRange, 10, 0, None)          session = Session("Test session")
269          c0.addRange(-10, 0, "1")          filename = os.path.join("..", "Data", "iceland", "political.dbf")
270          c0.addRange(0, 10, "2")          layer = Layer("asdf", session.OpenShapefile(filename))
271    
272          #          #
273          # addPoint          # init with no params
274          #          #
275          c1 = Classification("c1")          c = Classification()
276          c1.addPoint(0, "1")          self.assertEqual(c.GetField(), None)
277          c1.addPoint("0", "2")          self.assertEqual(c.GetFieldType(), None)
278          self.assertRaises(TypeError, c1.addPoint, {'monty':'python'}, "3")          self.assertEqual(c.FindGroup(-1), c.GetDefaultGroup())
279    
280            c.SetDefaultLineColor(red)
281            self.assertEqual(c.GetDefaultLineColor(), red)
282            self.assertEqual(c.GetDefaultFill(), Transparent)
283    
284            c.SetDefaultFill(green)
285            self.assertEqual(c.GetDefaultFill(), green)
286            self.assertEqual(c.GetDefaultLineColor(), red)
287    
288            c.SetFieldInfo("hallo", FIELDTYPE_STRING)
289            self.assertEqual(c.GetField(), "hallo")
290            self.assertEqual(c.GetFieldType(), FIELDTYPE_STRING)
291    
292            # should raise an exception because 'hallo' doesn't
293            # exist in the table
294            self.assertRaises(ValueError, c._set_layer, layer)
295            
296            c.SetFieldInfo("AREA", None)
297            layer.SetClassification(c)
298            self.assertEqual(c.GetLayer(), layer)
299            self.assertEqual(c.GetField(), "AREA")
300            self.assertEqual(c.GetFieldType(), FIELDTYPE_DOUBLE)
301    
302            c.SetFieldInfo(None, None)
303            self.assertEquals(c.GetFieldType(), None)
304            self.assertEquals(c.FindGroup(5), c.GetDefaultGroup())
305    
306            c.SetFieldInfo("AREA", None)
307            s = ClassGroupSingleton(5)
308            c.AppendGroup(s)
309            self.assertEquals(c.FindGroup(5), s)
310            self.assertEquals(c.FindGroup(0), c.GetDefaultGroup())
311    
312            r = ClassGroupRange((-10, 10))
313            c.AppendGroup(r)
314            self.assertEquals(c.FindGroup(-11), c.GetDefaultGroup())
315            self.assertEquals(c.FindGroup(-10), r)
316            self.assertEquals(c.FindGroup(9), r)
317            self.assertEquals(c.FindGroup(5), s)
318            self.assertEquals(c.FindGroup(10), c.GetDefaultGroup())
319    
320          #          clazz = copy.deepcopy(c)
         # getProperties  
         #  
321    
322          self.assertEqual(c0.getProperties(-10), "1")          self.assertEquals(clazz.GetNumGroups(), c.GetNumGroups())
         self.assertEqual(c0.getProperties(-11), None)  
         self.assertEqual(c0.getProperties(0), "2") # min <= x < max  
         self.assertEqual(c0.getProperties(10), None)  
         self.assertEqual(c0.getProperties(11), None)  
   
         self.assertEqual(c1.getProperties(0), "1")  
         self.assertEqual(c1.getProperties("0"), "2")  
         self.assertEqual(c1.getProperties(-1), None)  
         self.assertEqual(c1.getProperties(1), None)  
         self.assertRaises(TypeError, c1.getProperties, {'monty':'python'})  
323    
324          #          for i in range(clazz.GetNumGroups()):
325          # toggle field              self.assertEquals(clazz.GetGroup(i), c.GetGroup(i))
         #  
326    
327          c0.setField(None)          layer.Destroy()
         self.assertEqual(c0.getProperties(10), None)  
         self.assertEqual(c0.getProperties(11), None)  
   
         c1.setField(None)  
         self.assertEqual(c1.getProperties(0), None)  
         self.assertEqual(c1.getProperties("0"), None)  
   
         c0.setField("c0")  
         self.assertEqual(c0.getProperties(10), None)  
         self.assertEqual(c0.getProperties(11), None)  
   
         c1.setField("c1")  
         self.assertEqual(c1.getProperties(0), "1")  
         self.assertEqual(c1.getProperties("0"), "2")  
328    
329  if __name__ == "__main__":  if __name__ == "__main__":
330      unittest.main()      support.run_tests()

Legend:
Removed from v.369  
changed lines
  Added in v.1356

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26