/[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 494 by jonathan, Mon Mar 10 10:45:33 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 20  import unittest Line 20  import unittest
20  import support  import support
21  support.initthuban()  support.initthuban()
22    
23  from Thuban.Model.table import *  import os
24  from Thuban.Model.classification import *  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    
 import copy  
37    
38    
39  class TestClassification(unittest.TestCase):  # A few colors for use by the test cases
40    red = Color(1, 0, 0)
41    green = Color(0, 1, 0)
42    blue = Color(0, 0, 1)
43    
44    
45      def test_ClassGroupProperties(self):  class TestClassGroupProperties(unittest.TestCase):
46    
47        def test(self):
48          """Test ClassGroupProperties"""          """Test ClassGroupProperties"""
49    
50          props = ClassGroupProperties()          props = ClassGroupProperties()
51          self.assertEqual(props.GetLineColor(), Color.Black)          self.assertEqual(props.GetLineColor(), Black)
52          self.assertEqual(props.GetLineWidth(), 1)          self.assertEqual(props.GetLineWidth(), 1)
53          self.assertEqual(props.GetFill(), Color.None)          self.assertEqual(props.GetFill(), Transparent)
54    
         red = Color(1, 0, 0)  
55          props.SetLineColor(red)          props.SetLineColor(red)
56          self.assertEqual(props.GetLineColor(), red)          self.assertEqual(props.GetLineColor(), red)
57    
         blue = Color(0, 0, 1)  
58          props.SetLineColor(blue)          props.SetLineColor(blue)
59          self.assertEqual(props.GetLineColor(), blue)          self.assertEqual(props.GetLineColor(), blue)
60    
# Line 56  class TestClassification(unittest.TestCa Line 69  class TestClassification(unittest.TestCa
69          self.assertNotEqual(newProps1, props)          self.assertNotEqual(newProps1, props)
70          self.assertEqual(newProps1, newProps2)          self.assertEqual(newProps1, newProps2)
71    
72      def test_ClassGroup(self):  
73    class TestClassGroup(unittest.TestCase):
74    
75        def test(self):
76          """Test ClassGroup"""          """Test ClassGroup"""
77    
78          # test constructor with no label          # test constructor with no label
# Line 76  class TestClassification(unittest.TestCa Line 92  class TestClassification(unittest.TestCa
92          self.assertEqual(group.GetLabel(), "")          self.assertEqual(group.GetLabel(), "")
93    
94          # test Matches          # test Matches
95          self.assertEqual(group.Matches(None), False)          # Matches() is a virtual function...can't test it here
96          self.assertEqual(group.Matches(1), False)          #
97          self.assertEqual(group.Matches("hallo"), False)          #self.assertEqual(group.Matches(None), False)
98          self.assertEqual(group.Matches([]), False)          #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          # test GetProperties  class TestClassGroupDefault(unittest.TestCase):
         self.assertEqual(group.GetProperties(), None)  
107    
108      def test_ClassGroupDefault(self):      def test(self):
109          """Test ClassGroupDefault"""          """Test ClassGroupDefault"""
110    
111          defProps = ClassGroupProperties()          defProps = ClassGroupProperties()
# Line 124  class TestClassification(unittest.TestCa Line 145  class TestClassification(unittest.TestCa
145          groupCopy = copy.copy(group)          groupCopy = copy.copy(group)
146          self.assertEqual(group, groupCopy)          self.assertEqual(group, groupCopy)
147    
148      def test_ClassGroupRange(self):  
149    class TestClassGroupRange(unittest.TestCase):
150    
151        def test(self):
152          """Test ClassGroupRange"""          """Test ClassGroupRange"""
153    
154          defProps = ClassGroupProperties()          defProps = ClassGroupProperties()
# Line 140  class TestClassification(unittest.TestCa Line 164  class TestClassification(unittest.TestCa
164          self.assertEqual(group.GetMax(), 1)          self.assertEqual(group.GetMax(), 1)
165          self.assertEqual(group.GetProperties(), defProps)          self.assertEqual(group.GetProperties(), defProps)
166          self.assertEqual(group.GetLabel(), "")          self.assertEqual(group.GetLabel(), "")
167            
168          # test SetMax()          # test SetMax()
169          self.assertRaises(ValueError, group.SetMax, 0)          self.assertRaises(ValueError, group.SetMax, 0)
170          self.assertRaises(ValueError, group.SetMax, -1)          self.assertRaises(ValueError, group.SetMax, -1)
# Line 160  class TestClassification(unittest.TestCa Line 184  class TestClassification(unittest.TestCa
184          self.assertEqual(group.GetProperties(), newProps)          self.assertEqual(group.GetProperties(), newProps)
185    
186          # test SetRange()          # test SetRange()
187          self.assertRaises(ValueError, group.SetRange, 1, 0)          self.assertRaises(ValueError, group.SetRange, (1, 0))
188          group.SetRange(-5, 5)          group.SetRange(Range("]-oo;6]"))
189          self.assertEqual(group.GetRange(), (-5, 5))          self.assertEqual(group.GetRange(), "]-oo;6]")
190            group.SetRange((-5, 5))
191            self.assertEqual(group.GetRange(), "[-5;5[")
192    
193          # test Matches()          # test Matches()
194          self.assertEqual(group.Matches(-6), False)          self.assertEqual(group.Matches(-6), False)
# Line 175  class TestClassification(unittest.TestCa Line 201  class TestClassification(unittest.TestCa
201          groupCopy = copy.copy(group)          groupCopy = copy.copy(group)
202          self.assertEqual(group, groupCopy)          self.assertEqual(group, groupCopy)
203    
204      def test_ClassGroupSingleton(self):  
205    class TestClassGroupSingleton(unittest.TestCase):
206    
207        def test(self):
208          """Test ClassGroupSingleton"""          """Test ClassGroupSingleton"""
209    
210          defProps = ClassGroupProperties()          defProps = ClassGroupProperties()
# Line 220  class TestClassification(unittest.TestCa Line 249  class TestClassification(unittest.TestCa
249          # test copy          # test copy
250          groupCopy = copy.copy(group)          groupCopy = copy.copy(group)
251          self.assertEqual(group, groupCopy)          self.assertEqual(group, groupCopy)
           
252    
     def test_ClassIterator(self):  
         """Test ClassIterator"""  
253    
254          groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),  class TestClassification(unittest.TestCase):
                   ClassGroupRange(-3, 3), ClassGroupSingleton(-5),  
                   ClassGroupDefault()]  
255    
256          clazz = Classification()      """Test cases for Classification"""
257    
258          for g in groups:      def setUp(self):
259              clazz.AddGroup(g)          self.clazz = Classification()
260    
261          def convert(clazz):      def test_defaults(self):
262              if isinstance(clazz, ClassGroupDefault):   return 0          """Test Classification default settings"""
263              if isinstance(clazz, ClassGroupSingleton): return 1          c = Classification()
264              if isinstance(clazz, ClassGroupRange):     return 2          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          list = []          # The default group is not counted, hence 0 groups
270          for g in clazz:          self.assertEqual(self.clazz.GetNumGroups(), 0)
             list.append(convert(g))  
271    
272          self.assertEquals(list, [0, 1, 1, 2, 1])      def test_set_default_properties(self):
273            """Test Classification.SetDefaultLineColor and SetDefaultFill"""
274            c = Classification()
275    
276      def test_classification(self):          self.clazz.SetDefaultLineColor(red)
277          """Test Classification"""          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          defProps = ClassGroupProperties()      def test_add_singleton(self):
285          red   = Color(1, 0, 0)          """Test Classification.AppendGroup(ClassGroupSingleton())"""
286          green = Color(0, 1, 0)          c = Classification()
287          blue  = Color(0, 0, 1)          self.assertEquals(self.clazz.FindGroup(5),
288                              self.clazz.GetDefaultGroup())
289    
290          layer = Layer("asdf", "../Data/iceland/political.dbf")          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          # init with no params          """Test Classification.AppendGroup(ClassGroupRange())"""
         #  
298          c = Classification()          c = Classification()
299          self.assertEqual(c.GetField(), None)          self.assertEquals(self.clazz.FindGroup(0),
300          self.assertEqual(c.GetFieldType(), None)                            self.clazz.GetDefaultGroup())
301          self.assertEqual(c.GetGroup(-1), c.GetDefaultGroup())  
302            r = ClassGroupRange((-10, 10))
303          c.SetDefaultLineColor(red)          self.clazz.AppendGroup(r)
304          self.assertEqual(c.GetDefaultLineColor(), red)          self.assertEquals(self.clazz.FindGroup(-11),
305          self.assertEqual(c.GetDefaultFill(), Color.None)                            self.clazz.GetDefaultGroup())
306            self.assertEquals(self.clazz.FindGroup(-10), r)
307          c.SetDefaultFill(green)          self.assertEquals(self.clazz.FindGroup(9), r)
308          self.assertEqual(c.GetDefaultFill(), green)          self.assertEquals(self.clazz.FindGroup(5), r)
309          self.assertEqual(c.GetDefaultLineColor(), red)          self.assertEquals(self.clazz.FindGroup(10),
310                              self.clazz.GetDefaultGroup())
311          c.SetField("hallo")  
312          self.assertEqual(c.GetField(), "hallo")      def test_multiple_groups(self):
313            """Test Classification with multiple groups"""
314          c.SetFieldType(FIELDTYPE_STRING)          c = Classification()
315          self.assertEqual(c.GetFieldType(), FIELDTYPE_STRING)  
316            # two singletons matching 1 to test whether they're tested in
317          # should raise an exception because 'hallo' doesn't          # the right order. Use a non default fill on the second to make
318          # exist in the table          # it compare unequal to the first.
319          self.assertRaises(ValueError, c.SetLayer, layer)          s1 = ClassGroupSingleton(1)
320                    s1a = ClassGroupSingleton(1)
321          c.SetField("AREA")          s1a.GetProperties().SetFill(blue)
322          c.SetLayer(layer)          # Sanity check: are they considered different?
323          self.assertEqual(c.GetLayer(), layer)          self.assertNotEqual(s1, s1a)
324          self.assertEqual(c.GetField(), "AREA")  
325          self.assertEqual(c.GetFieldType(), FIELDTYPE_DOUBLE)          s2 = ClassGroupSingleton(2)
326            r = ClassGroupRange((-10, 10))
327          c.SetField(None)  
328          self.assertEquals(c.GetFieldType(), None)          self.clazz.AppendGroup(s1)
329          self.assertEquals(c.GetGroup(5), c.GetDefaultGroup())          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    
         c.SetField("AREA")  
         s = ClassGroupSingleton(5)  
         c.AddGroup(s)  
         self.assertEquals(c.GetGroup(5), s)  
         self.assertEquals(c.GetGroup(0), c.GetDefaultGroup())  
   
         r = ClassGroupRange(-10, 10)  
         c.AddGroup(r)  
         self.assertEquals(c.GetGroup(-11), c.GetDefaultGroup())  
         self.assertEquals(c.GetGroup(-10), r)  
         self.assertEquals(c.GetGroup(9), r)  
         self.assertEquals(c.GetGroup(5), s)  
         self.assertEquals(c.GetGroup(10), c.GetDefaultGroup())  
376    
377  if __name__ == "__main__":  if __name__ == "__main__":
378      unittest.main()      support.run_tests()

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26