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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26