/[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 1346 by jonathan, Tue Jul 1 16:11:55 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  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          layer = Layer("asdf", "../Data/iceland/political.shp")          props = ClassGroupProperties()
43            self.assertEqual(props.GetLineColor(), Black)
44            self.assertEqual(props.GetLineWidth(), 1)
45            self.assertEqual(props.GetFill(), 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])
         # init with no params  
         #  
         c = Classification(layer)  
         self.assertEqual(c.field, None)  
         self.assertNotEqual(c.DefaultData, None)  
   
         #  
         # SetField  
         #  
         c = Classification(layer)  
         c.SetField("Test")  
         self.assertEqual(c.field, "Test")  
         c.SetField(None)  
         self.assertEqual(c.field, None)  
256    
257          #      def test_classification(self):
258          # init with field          """Test Classification"""
         #  
         c = Classification(layer, "Test")  
         self.assertEqual(c.field, "Test")  
259    
260          #          defProps = ClassGroupProperties()
261          # AddRange          red   = Color(1, 0, 0)
262          #          green = Color(0, 1, 0)
263          c0 = Classification(layer, "c0")          blue  = Color(0, 0, 1)
264          default0 = c0.GetDefaultData()  
265          self.assertRaises(ValueError, c0.AddRange, 0, 0, None)          session = Session("Test session")
266          self.assertRaises(ValueError, c0.AddRange, 10, 0, None)          filename = os.path.join("..", "Data", "iceland", "political.dbf")
267          c0.AddRange(-10, 0, "1")          layer = Layer("asdf", session.OpenShapefile(filename))
         c0.AddRange(0, 10, "2")  
268    
269          #          #
270          # AddPoint          # init with no params
271          #          #
272          c1 = Classification(layer, "c1")          c = Classification()
273          default1 = c1.GetDefaultData()          self.assertEqual(c.GetField(), None)
274          c1.AddPoint(0, "1")          self.assertEqual(c.GetFieldType(), None)
275          c1.AddPoint("0", "2")          self.assertEqual(c.FindGroup(-1), c.GetDefaultGroup())
276          self.assertRaises(TypeError, c1.AddPoint, {'monty':'python'}, "3")  
277            c.SetDefaultLineColor(red)
278            self.assertEqual(c.GetDefaultLineColor(), red)
279            self.assertEqual(c.GetDefaultFill(), Transparent)
280    
281            c.SetDefaultFill(green)
282            self.assertEqual(c.GetDefaultFill(), green)
283            self.assertEqual(c.GetDefaultLineColor(), red)
284    
285            c.SetFieldInfo("hallo", FIELDTYPE_STRING)
286            self.assertEqual(c.GetField(), "hallo")
287            self.assertEqual(c.GetFieldType(), FIELDTYPE_STRING)
288    
289            # should raise an exception because 'hallo' doesn't
290            # exist in the table
291            self.assertRaises(ValueError, c._set_layer, layer)
292            
293            c.SetFieldInfo("AREA", None)
294            layer.SetClassification(c)
295            self.assertEqual(c.GetLayer(), layer)
296            self.assertEqual(c.GetField(), "AREA")
297            self.assertEqual(c.GetFieldType(), FIELDTYPE_DOUBLE)
298    
299            c.SetFieldInfo(None, None)
300            self.assertEquals(c.GetFieldType(), None)
301            self.assertEquals(c.FindGroup(5), c.GetDefaultGroup())
302    
303            c.SetFieldInfo("AREA", None)
304            s = ClassGroupSingleton(5)
305            c.AppendGroup(s)
306            self.assertEquals(c.FindGroup(5), s)
307            self.assertEquals(c.FindGroup(0), c.GetDefaultGroup())
308    
309            r = ClassGroupRange(-10, 10)
310            c.AppendGroup(r)
311            self.assertEquals(c.FindGroup(-11), c.GetDefaultGroup())
312            self.assertEquals(c.FindGroup(-10), r)
313            self.assertEquals(c.FindGroup(9), r)
314            self.assertEquals(c.FindGroup(5), s)
315            self.assertEquals(c.FindGroup(10), c.GetDefaultGroup())
316    
317          #          clazz = copy.deepcopy(c)
         # GetProperties  
         #  
318    
319          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'})  
320    
321          #          for i in range(clazz.GetNumGroups()):
322          # toggle field              self.assertEquals(clazz.GetGroup(i), c.GetGroup(i))
         #  
323    
324          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")  
325    
326  if __name__ == "__main__":  if __name__ == "__main__":
327      unittest.main()      support.run_tests()

Legend:
Removed from v.395  
changed lines
  Added in v.1346

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26