/[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 395 by jonathan, Mon Feb 10 15:28:02 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  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_ClassGroupProperties(self):
40            """Test ClassGroupProperties"""
41    
42            props = ClassGroupProperties()
43            self.assertEqual(props.GetLineColor(), Color.Black)
44            self.assertEqual(props.GetLineWidth(), 1)
45            self.assertEqual(props.GetFill(), Color.Transparent)
46    
47            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])
256    
257      def test_classification(self):      def test_classification(self):
258          """Test Classification"""          """Test Classification"""
259    
260          layer = Layer("asdf", "../Data/iceland/political.shp")          defProps = ClassGroupProperties()
261            red   = Color(1, 0, 0)
262            green = Color(0, 1, 0)
263            blue  = Color(0, 0, 1)
264    
265            session = Session("Test session")
266            filename = os.path.join("..", "Data", "iceland", "political.dbf")
267            layer = Layer("asdf", session.OpenShapefile(filename))
268    
269          #          #
270          # init with no params          # init with no params
271          #          #
272          c = Classification(layer)          c = Classification()
273          self.assertEqual(c.field, None)          self.assertEqual(c.GetField(), None)
274          self.assertNotEqual(c.DefaultData, None)          self.assertEqual(c.GetFieldType(), None)
275            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    
         #  
         # SetField  
         #  
         c = Classification(layer)  
         c.SetField("Test")  
         self.assertEqual(c.field, "Test")  
301          c.SetField(None)          c.SetField(None)
302          self.assertEqual(c.field, None)          self.assertEquals(c.GetFieldType(), None)
303            self.assertEquals(c.FindGroup(5), c.GetDefaultGroup())
         #  
         # init with field  
         #  
         c = Classification(layer, "Test")  
         self.assertEqual(c.field, "Test")  
304    
305          #          c.SetField("AREA")
306          # AddRange          s = ClassGroupSingleton(5)
307          #          c.AppendGroup(s)
308          c0 = Classification(layer, "c0")          self.assertEquals(c.FindGroup(5), s)
309          default0 = c0.GetDefaultData()          self.assertEquals(c.FindGroup(0), c.GetDefaultGroup())
310          self.assertRaises(ValueError, c0.AddRange, 0, 0, None)  
311          self.assertRaises(ValueError, c0.AddRange, 10, 0, None)          r = ClassGroupRange(-10, 10)
312          c0.AddRange(-10, 0, "1")          c.AppendGroup(r)
313          c0.AddRange(0, 10, "2")          self.assertEquals(c.FindGroup(-11), c.GetDefaultGroup())
314            self.assertEquals(c.FindGroup(-10), r)
315          #          self.assertEquals(c.FindGroup(9), r)
316          # AddPoint          self.assertEquals(c.FindGroup(5), s)
317          #          self.assertEquals(c.FindGroup(10), c.GetDefaultGroup())
         c1 = Classification(layer, "c1")  
         default1 = c1.GetDefaultData()  
         c1.AddPoint(0, "1")  
         c1.AddPoint("0", "2")  
         self.assertRaises(TypeError, c1.AddPoint, {'monty':'python'}, "3")  
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), default0)  
         self.assertEqual(c0.GetProperties(0), "2") # min <= x < max  
         self.assertEqual(c0.GetProperties(10), default0)  
         self.assertEqual(c0.GetProperties(11), default0)  
   
         self.assertEqual(c1.GetProperties(0), "1")  
         self.assertEqual(c1.GetProperties("0"), "2")  
         self.assertEqual(c1.GetProperties(-1), default1)  
         self.assertEqual(c1.GetProperties(1), default1)  
         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), default0)  
         self.assertEqual(c0.GetProperties(11), default0)  
   
         c1.SetField(None)  
         self.assertEqual(c1.GetProperties(0), default1)  
         self.assertEqual(c1.GetProperties("0"), default1)  
   
         c0.SetField("c0")  
         self.assertEqual(c0.GetProperties(10), default0)  
         self.assertEqual(c0.GetProperties(11), default0)  
   
         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.395  
changed lines
  Added in v.884

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26