/[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 446 by jonathan, Thu Feb 27 16:05:10 2003 UTC revision 1905 by bh, Fri Oct 31 17:09:58 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    import copy
25    
26    from Thuban.Model.color import Color, Transparent, Black
27    from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_STRING, FIELDTYPE_DOUBLE
28    from Thuban.Model.classification import \
29        Classification, ClassGroup, \
30        ClassGroupDefault, ClassGroupSingleton, ClassGroupRange,\
31        ClassGroupProperties
32    
33    from Thuban.Model.session import Session
34  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
35    from Thuban.Model.range import Range
36    
37    
 class TestClassification(unittest.TestCase):  
38    
39      def test_classification(self):  # A few colors for use by the test cases
40          """Test Classification"""  red = Color(1, 0, 0)
41    green = Color(0, 1, 0)
42    blue = Color(0, 0, 1)
43    
         layer = Layer("asdf", "../Data/iceland/political.shp")  
44    
45          #  class TestClassGroupProperties(unittest.TestCase):
         # init with no params  
         #  
         c = Classification(layer)  
         self.assertEqual(c.GetField(), None)  
         self.assertNotEqual(c.GetDefaultGroup(), None)  
46    
47          #      def test(self):
48          # SetField          """Test ClassGroupProperties"""
         #  
         c = Classification(layer)  
         c.SetField("Test")  
         self.assertEqual(c.field, "Test")  
         c.SetField(None)  
         self.assertEqual(c.field, None)  
49    
50          #          props = ClassGroupProperties()
51          # init with field          self.assertEqual(props.GetLineColor(), Black)
52          #          self.assertEqual(props.GetLineWidth(), 1)
53          c = Classification(layer, "Test")          self.assertEqual(props.GetFill(), Transparent)
         self.assertEqual(c.field, "Test")  
54    
55            props.SetLineColor(red)
56            self.assertEqual(props.GetLineColor(), red)
57    
58            props.SetLineColor(blue)
59            self.assertEqual(props.GetLineColor(), blue)
60    
61            props.SetLineWidth(10)
62            self.assertEqual(props.GetLineWidth(), 10)
63    
64            self.assertRaises(ValueError, props.SetLineWidth, -10)
65            self.assertEqual(props.GetLineWidth(), 10)
66    
67            newProps1 = ClassGroupProperties()
68            newProps2 = ClassGroupProperties()
69            self.assertNotEqual(newProps1, props)
70            self.assertEqual(newProps1, newProps2)
71    
72    
73    class TestClassGroup(unittest.TestCase):
74    
75        def test(self):
76            """Test ClassGroup"""
77    
78            # test constructor with no label
79            group = ClassGroup()
80            self.assertEqual(group.GetLabel(), "")
81    
82            # test constructor with label
83            group = ClassGroup("hallo")
84            self.assertEqual(group.GetLabel(), "hallo")
85    
86            # test SetLabel()/GetLabel()
87            group = ClassGroup("welt")
88            group.SetLabel("hallo")
89            self.assertEqual(group.GetLabel(), "hallo")
90    
91            group.SetLabel("")
92            self.assertEqual(group.GetLabel(), "")
93    
94            # test Matches
95            # Matches() is a virtual function...can't test it here
96          #          #
97          # GetProperties          #self.assertEqual(group.Matches(None), False)
98          #          #self.assertEqual(group.Matches(1), False)
99            #self.assertEqual(group.Matches("hallo"), False)
100            #self.assertEqual(group.Matches([]), False)
101    
102            # test GetProperties...also a virtual function
103            #self.assertEqual(group.GetProperties(), None)
104    
105    
106    class TestClassGroupDefault(unittest.TestCase):
107    
108        def test(self):
109            """Test ClassGroupDefault"""
110    
111            defProps = ClassGroupProperties()
112    
113            newProps = ClassGroupProperties()
114            newProps.SetLineColor(Color(.25, .5, .75))
115            newProps.SetLineWidth(5)
116            newProps.SetFill(Color(.12, .24, .36))
117    
118            # test constructor
119    
120            group = ClassGroupDefault(newProps)
121            self.assertEqual(group.GetProperties(), newProps)
122    
123            group = ClassGroupDefault(newProps, "hallo")
124            self.assertEqual(group.GetProperties(), newProps)
125            self.assertEqual(group.GetLabel(), "hallo")
126    
127            # test empty constructor
128            group = ClassGroupDefault()
129            props = group.GetProperties()
130    
131            self.assertEqual(group.GetLabel(), "")
132            self.assertEqual(defProps, props)
133    
134            # test Matches()
135            self.assertEqual(group.Matches(None), True)
136            self.assertEqual(group.Matches(1), True)
137            self.assertEqual(group.Matches("hallo"), True)
138            self.assertEqual(group.Matches([]), True)
139    
140            # test SetProperties()/GetProperties()
141            group.SetProperties(newProps)
142            self.assertEqual(group.GetProperties(), newProps)
143    
144            # test copy
145            groupCopy = copy.copy(group)
146            self.assertEqual(group, groupCopy)
147    
148    
149    class TestClassGroupRange(unittest.TestCase):
150    
151        def test(self):
152            """Test ClassGroupRange"""
153    
154            defProps = ClassGroupProperties()
155            newProps = ClassGroupProperties()
156            newProps.SetLineColor(Color(.25, .5, .75))
157            newProps.SetLineWidth(5)
158            newProps.SetFill(Color(.12, .24, .36))
159    
160            # test empty constructor
161            group = ClassGroupRange()
162    
163            self.assertEqual(group.GetMin(), 0)
164            self.assertEqual(group.GetMax(), 1)
165            self.assertEqual(group.GetProperties(), defProps)
166            self.assertEqual(group.GetLabel(), "")
167    
168            # test SetMax()
169            self.assertRaises(ValueError, group.SetMax, 0)
170            self.assertRaises(ValueError, group.SetMax, -1)
171            self.assertEquals(group.GetMax(), 1)
172            group.SetMax(2)
173            self.assertEquals(group.GetMax(), 2)
174    
175            # test SetMin()
176            self.assertRaises(ValueError, group.SetMin, 2)
177            self.assertRaises(ValueError, group.SetMin, 3)
178            self.assertEquals(group.GetMin(), 0)
179            group.SetMin(-5)
180            self.assertEquals(group.GetMin(), -5)
181    
182            # test SetProperties()/GetProperties()
183            group.SetProperties(newProps)
184            self.assertEqual(group.GetProperties(), newProps)
185    
186            # test SetRange()
187            self.assertRaises(ValueError, group.SetRange, (1, 0))
188            group.SetRange(Range("]-oo;6]"))
189            self.assertEqual(group.GetRange(), "]-oo;6]")
190            group.SetRange((-5, 5))
191            self.assertEqual(group.GetRange(), "[-5;5[")
192    
193            # test Matches()
194            self.assertEqual(group.Matches(-6), False)
195            self.assertEqual(group.Matches(-5), True)
196            self.assertEqual(group.Matches(0), True)
197            self.assertEqual(group.Matches(4), True)
198            self.assertEqual(group.Matches(5), False)
199    
200            # test copy
201            groupCopy = copy.copy(group)
202            self.assertEqual(group, groupCopy)
203    
204    
205    class TestClassGroupSingleton(unittest.TestCase):
206    
207        def test(self):
208            """Test ClassGroupSingleton"""
209    
210            defProps = ClassGroupProperties()
211            newProps = ClassGroupProperties()
212            newProps.SetLineColor(Color(.25, .5, .75))
213            newProps.SetLineWidth(5)
214            newProps.SetFill(Color(.12, .24, .36))
215    
216            # test empty constructor
217            group = ClassGroupSingleton()
218    
219            self.assertEqual(group.GetValue(), 0)
220            self.assertEqual(group.GetProperties(), defProps)
221            self.assertEqual(group.GetLabel(), "")
222    
223            # test SetProperties()/GetProperties()
224            group.SetProperties(newProps)
225            self.assertEqual(group.GetProperties(), newProps)
226    
227            # test SetValue()
228            group.SetValue(5)
229            self.assertEqual(group.GetValue(), 5)
230    
231            # test Matches()
232            self.assertEqual(group.Matches(0), False)
233            self.assertEqual(group.Matches(5), True)
234    
235            group.SetValue("5")
236            self.assertNotEqual(group.GetValue(), 5)
237    
238            # test Matches()
239            self.assertEqual(group.Matches(5), False)
240            self.assertEqual(group.Matches("5"), True)
241    
242            group.SetValue("hallo")
243            self.assertEqual(group.GetValue(), "hallo")
244    
245            # test Matches()
246            self.assertEqual(group.Matches("HALLO"), False)
247            self.assertEqual(group.Matches("hallo"), True)
248    
249            # test copy
250            groupCopy = copy.copy(group)
251            self.assertEqual(group, groupCopy)
252    
253    
254    class TestClassification(unittest.TestCase):
255    
256        """Test cases for Classification"""
257    
258        def setUp(self):
259            self.clazz = Classification()
260    
261        def test_defaults(self):
262            """Test Classification default settings"""
263            c = Classification()
264            self.assertEqual(self.clazz.FindGroup(-1),
265                             self.clazz.GetDefaultGroup())
266            self.assertEqual(self.clazz.GetDefaultLineColor(), Black)
267            self.assertEqual(self.clazz.GetDefaultFill(), Transparent)
268    
269            # The default group is not counted, hence 0 groups
270            self.assertEqual(self.clazz.GetNumGroups(), 0)
271    
272        def test_set_default_properties(self):
273            """Test Classification.SetDefaultLineColor and SetDefaultFill"""
274            c = Classification()
275    
276            self.clazz.SetDefaultLineColor(red)
277            self.assertEqual(self.clazz.GetDefaultLineColor(), red)
278            self.assertEqual(self.clazz.GetDefaultFill(), Transparent)
279    
280            self.clazz.SetDefaultFill(green)
281            self.assertEqual(self.clazz.GetDefaultFill(), green)
282            self.assertEqual(self.clazz.GetDefaultLineColor(), red)
283    
284        def test_add_singleton(self):
285            """Test Classification.AppendGroup(ClassGroupSingleton())"""
286            c = Classification()
287            self.assertEquals(self.clazz.FindGroup(5),
288                              self.clazz.GetDefaultGroup())
289    
290            s = ClassGroupSingleton(5)
291            self.clazz.AppendGroup(s)
292            self.assertEquals(self.clazz.FindGroup(5), s)
293            self.assertEquals(self.clazz.FindGroup(0),
294                              self.clazz.GetDefaultGroup())
295    
296        def test_add_range(self):
297            """Test Classification.AppendGroup(ClassGroupRange())"""
298            c = Classification()
299            self.assertEquals(self.clazz.FindGroup(0),
300                              self.clazz.GetDefaultGroup())
301    
302            r = ClassGroupRange((-10, 10))
303            self.clazz.AppendGroup(r)
304            self.assertEquals(self.clazz.FindGroup(-11),
305                              self.clazz.GetDefaultGroup())
306            self.assertEquals(self.clazz.FindGroup(-10), r)
307            self.assertEquals(self.clazz.FindGroup(9), r)
308            self.assertEquals(self.clazz.FindGroup(5), r)
309            self.assertEquals(self.clazz.FindGroup(10),
310                              self.clazz.GetDefaultGroup())
311    
312        def test_multiple_groups(self):
313            """Test Classification with multiple groups"""
314            c = Classification()
315    
316            # two singletons matching 1 to test whether they're tested in
317            # the right order. Use a non default fill on the second to make
318            # it compare unequal to the first.
319            s1 = ClassGroupSingleton(1)
320            s1a = ClassGroupSingleton(1)
321            s1a.GetProperties().SetFill(blue)
322            # Sanity check: are they considered different?
323            self.assertNotEqual(s1, s1a)
324    
325            s2 = ClassGroupSingleton(2)
326            r = ClassGroupRange((-10, 10))
327    
328            self.clazz.AppendGroup(s1)
329            self.clazz.AppendGroup(s2)
330            self.clazz.AppendGroup(s1a)
331            self.clazz.AppendGroup(r)
332    
333            self.assertEquals(self.clazz.FindGroup(-11),
334                              self.clazz.GetDefaultGroup())
335            self.assertEquals(self.clazz.FindGroup(-10), r)
336            self.assertEquals(self.clazz.FindGroup(1), s1)
337            self.assertEquals(self.clazz.FindGroup(2), s2)
338            self.assertEquals(self.clazz.FindGroup(3), r)
339            self.assertEquals(self.clazz.FindGroup(9), r)
340            self.assertEquals(self.clazz.FindGroup(10),
341                              self.clazz.GetDefaultGroup())
342    
343        def test_deepcopy(self):
344            """Test deepcopy(Classification())"""
345            self.clazz.AppendGroup(ClassGroupSingleton(5))
346            self.clazz.AppendGroup(ClassGroupRange((-10, 10)))
347    
348            clazz = copy.deepcopy(self.clazz)
349    
350            self.assertEquals(clazz.GetNumGroups(), self.clazz.GetNumGroups())
351    
352            for i in range(clazz.GetNumGroups()):
353                self.assertEquals(clazz.GetGroup(i), self.clazz.GetGroup(i))
354    
355    
356        def test_iterator(self):
357            """Test Classification iteration"""
358            groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),
359                      ClassGroupRange((-3, 3)), ClassGroupSingleton(-5),
360                      ClassGroupDefault()]
361    
362            for g in groups:
363                self.clazz.AppendGroup(g)
364    
365            def convert(group):
366                if isinstance(group, ClassGroupDefault):   return 0
367                if isinstance(group, ClassGroupSingleton): return 1
368                if isinstance(group, ClassGroupRange):     return 2
369    
370            list = []
371            for g in self.clazz:
372                list.append(convert(g))
373    
374            self.assertEquals(list, [0, 1, 1, 2, 1, 0])
375    
 #       self.assertEqual(c0.GetProperties(-10), "1")  
 #       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'})  
   
 #       #  
 #       # toggle field  
 #       #  
   
 #       c0.SetField(None)  
 #       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")  
376    
377  if __name__ == "__main__":  if __name__ == "__main__":
378      unittest.main()      support.run_tests()

Legend:
Removed from v.446  
changed lines
  Added in v.1905

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26