/[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 723 by bh, Thu Apr 24 15:31:53 2003 UTC revision 1905 by bh, Fri Oct 31 17:09:58 2003 UTC
# Line 21  import support Line 21  import support
21  support.initthuban()  support.initthuban()
22    
23  import os  import os
24  from Thuban.Model.table import *  import copy
25  from Thuban.Model.classification import *  
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  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.Transparent)          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 58  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 88  class TestClassification(unittest.TestCa Line 102  class TestClassification(unittest.TestCa
102          # test GetProperties...also a virtual function          # test GetProperties...also a virtual function
103          #self.assertEqual(group.GetProperties(), None)          #self.assertEqual(group.GetProperties(), None)
104    
105      def test_ClassGroupDefault(self):  
106    class TestClassGroupDefault(unittest.TestCase):
107    
108        def test(self):
109          """Test ClassGroupDefault"""          """Test ClassGroupDefault"""
110    
111          defProps = ClassGroupProperties()          defProps = ClassGroupProperties()
# Line 128  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 144  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 164  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 179  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 224  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.AppendGroup(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, 0])      def test_set_default_properties(self):
273            """Test Classification.SetDefaultLineColor and SetDefaultFill"""
274      def test_classification(self):          c = Classification()
         """Test Classification"""  
275    
276          defProps = ClassGroupProperties()          self.clazz.SetDefaultLineColor(red)
277          red   = Color(1, 0, 0)          self.assertEqual(self.clazz.GetDefaultLineColor(), red)
278          green = Color(0, 1, 0)          self.assertEqual(self.clazz.GetDefaultFill(), Transparent)
279          blue  = Color(0, 0, 1)  
280            self.clazz.SetDefaultFill(green)
281          session = Session("Test session")          self.assertEqual(self.clazz.GetDefaultFill(), green)
282          filename = os.path.join("..", "Data", "iceland", "political.dbf")          self.assertEqual(self.clazz.GetDefaultLineColor(), red)
         layer = Layer("asdf", session.OpenShapefile(filename))  
283    
284          #      def test_add_singleton(self):
285          # init with no params          """Test Classification.AppendGroup(ClassGroupSingleton())"""
         #  
286          c = Classification()          c = Classification()
287          self.assertEqual(c.GetField(), None)          self.assertEquals(self.clazz.FindGroup(5),
288          self.assertEqual(c.GetFieldType(), None)                            self.clazz.GetDefaultGroup())
         self.assertEqual(c.FindGroup(-1), c.GetDefaultGroup())  
   
         c.SetDefaultLineColor(red)  
         self.assertEqual(c.GetDefaultLineColor(), red)  
         self.assertEqual(c.GetDefaultFill(), Color.Transparent)  
   
         c.SetDefaultFill(green)  
         self.assertEqual(c.GetDefaultFill(), green)  
         self.assertEqual(c.GetDefaultLineColor(), red)  
   
         c.SetField("hallo")  
         self.assertEqual(c.GetField(), "hallo")  
   
         c.SetFieldType(FIELDTYPE_STRING)  
         self.assertEqual(c.GetFieldType(), FIELDTYPE_STRING)  
   
         # should raise an exception because 'hallo' doesn't  
         # exist in the table  
         self.assertRaises(ValueError, c.SetLayer, layer)  
           
         c.SetField("AREA")  
         c.SetLayer(layer)  
         self.assertEqual(c.GetLayer(), layer)  
         self.assertEqual(c.GetField(), "AREA")  
         self.assertEqual(c.GetFieldType(), FIELDTYPE_DOUBLE)  
   
         c.SetField(None)  
         self.assertEquals(c.GetFieldType(), None)  
         self.assertEquals(c.FindGroup(5), c.GetDefaultGroup())  
289    
         c.SetField("AREA")  
290          s = ClassGroupSingleton(5)          s = ClassGroupSingleton(5)
291          c.AppendGroup(s)          self.clazz.AppendGroup(s)
292          self.assertEquals(c.FindGroup(5), s)          self.assertEquals(self.clazz.FindGroup(5), s)
293          self.assertEquals(c.FindGroup(0), c.GetDefaultGroup())          self.assertEquals(self.clazz.FindGroup(0),
294                              self.clazz.GetDefaultGroup())
295          r = ClassGroupRange(-10, 10)  
296          c.AppendGroup(r)      def test_add_range(self):
297          self.assertEquals(c.FindGroup(-11), c.GetDefaultGroup())          """Test Classification.AppendGroup(ClassGroupRange())"""
298          self.assertEquals(c.FindGroup(-10), r)          c = Classification()
299          self.assertEquals(c.FindGroup(9), r)          self.assertEquals(self.clazz.FindGroup(0),
300          self.assertEquals(c.FindGroup(5), s)                            self.clazz.GetDefaultGroup())
301          self.assertEquals(c.FindGroup(10), c.GetDefaultGroup())  
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(c)          clazz = copy.deepcopy(self.clazz)
349    
350          self.assertEquals(clazz.GetNumGroups(), c.GetNumGroups())          self.assertEquals(clazz.GetNumGroups(), self.clazz.GetNumGroups())
351    
352          for i in range(clazz.GetNumGroups()):          for i in range(clazz.GetNumGroups()):
353              self.assertEquals(clazz.GetGroup(i), c.GetGroup(i))              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    
         layer.Destroy()  
376    
377  if __name__ == "__main__":  if __name__ == "__main__":
378      support.run_tests()      support.run_tests()

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26