/[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 1346 by jonathan, Tue Jul 1 16:11:55 2003 UTC revision 1907 by bh, Fri Oct 31 17:35:11 2003 UTC
# Line 13  __version__ = "$Revision$" Line 13  __version__ = "$Revision$"
13  # $Source$  # $Source$
14  # $Id$  # $Id$
15    
 from __future__ import nested_scopes  
   
16  import unittest  import unittest
17    
18  import support  import support
19  support.initthuban()  support.initthuban()
20    
21  import os  import copy
22    
23  from Thuban.Model.color import Color, Transparent, Black  from Thuban.Model.color import Color, Transparent, Black
 from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_STRING, FIELDTYPE_DOUBLE  
24  from Thuban.Model.classification import \  from Thuban.Model.classification import \
25      Classification, ClassGroup, \      Classification, ClassGroup, \
26      ClassGroupDefault, ClassGroupSingleton, ClassGroupRange,\      ClassGroupDefault, ClassGroupSingleton, ClassGroupRange,\
27      ClassGroupProperties      ClassGroupProperties
28    from Thuban.Model.messages import CLASS_CHANGED
29    
30    from Thuban.Model.range import Range
31    
 from Thuban.Model.session import Session  
 from Thuban.Model.layer import Layer  
32    
 import copy  
33    
34    # A few colors for use by the test cases
35    red = Color(1, 0, 0)
36    green = Color(0, 1, 0)
37    blue = Color(0, 0, 1)
38    
 class TestClassification(unittest.TestCase):  
39    
40      def test_ClassGroupProperties(self):  class TestClassGroupProperties(unittest.TestCase):
41    
42        def test(self):
43          """Test ClassGroupProperties"""          """Test ClassGroupProperties"""
44    
45          props = ClassGroupProperties()          props = ClassGroupProperties()
# Line 44  class TestClassification(unittest.TestCa Line 47  class TestClassification(unittest.TestCa
47          self.assertEqual(props.GetLineWidth(), 1)          self.assertEqual(props.GetLineWidth(), 1)
48          self.assertEqual(props.GetFill(), Transparent)          self.assertEqual(props.GetFill(), Transparent)
49    
         red = Color(1, 0, 0)  
50          props.SetLineColor(red)          props.SetLineColor(red)
51          self.assertEqual(props.GetLineColor(), red)          self.assertEqual(props.GetLineColor(), red)
52    
         blue = Color(0, 0, 1)  
53          props.SetLineColor(blue)          props.SetLineColor(blue)
54          self.assertEqual(props.GetLineColor(), blue)          self.assertEqual(props.GetLineColor(), blue)
55    
# Line 63  class TestClassification(unittest.TestCa Line 64  class TestClassification(unittest.TestCa
64          self.assertNotEqual(newProps1, props)          self.assertNotEqual(newProps1, props)
65          self.assertEqual(newProps1, newProps2)          self.assertEqual(newProps1, newProps2)
66    
67      def test_ClassGroup(self):  
68    class TestClassGroup(unittest.TestCase):
69    
70        def test(self):
71          """Test ClassGroup"""          """Test ClassGroup"""
72    
73          # test constructor with no label          # test constructor with no label
# Line 93  class TestClassification(unittest.TestCa Line 97  class TestClassification(unittest.TestCa
97          # test GetProperties...also a virtual function          # test GetProperties...also a virtual function
98          #self.assertEqual(group.GetProperties(), None)          #self.assertEqual(group.GetProperties(), None)
99    
100      def test_ClassGroupDefault(self):  
101    class TestClassGroupDefault(unittest.TestCase):
102    
103        def test(self):
104          """Test ClassGroupDefault"""          """Test ClassGroupDefault"""
105    
106          defProps = ClassGroupProperties()          defProps = ClassGroupProperties()
# Line 133  class TestClassification(unittest.TestCa Line 140  class TestClassification(unittest.TestCa
140          groupCopy = copy.copy(group)          groupCopy = copy.copy(group)
141          self.assertEqual(group, groupCopy)          self.assertEqual(group, groupCopy)
142    
143      def test_ClassGroupRange(self):  
144    class TestClassGroupRange(unittest.TestCase):
145    
146        def test(self):
147          """Test ClassGroupRange"""          """Test ClassGroupRange"""
148    
149          defProps = ClassGroupProperties()          defProps = ClassGroupProperties()
# Line 149  class TestClassification(unittest.TestCa Line 159  class TestClassification(unittest.TestCa
159          self.assertEqual(group.GetMax(), 1)          self.assertEqual(group.GetMax(), 1)
160          self.assertEqual(group.GetProperties(), defProps)          self.assertEqual(group.GetProperties(), defProps)
161          self.assertEqual(group.GetLabel(), "")          self.assertEqual(group.GetLabel(), "")
162            
163          # test SetMax()          # test SetMax()
164          self.assertRaises(ValueError, group.SetMax, 0)          self.assertRaises(ValueError, group.SetMax, 0)
165          self.assertRaises(ValueError, group.SetMax, -1)          self.assertRaises(ValueError, group.SetMax, -1)
# Line 169  class TestClassification(unittest.TestCa Line 179  class TestClassification(unittest.TestCa
179          self.assertEqual(group.GetProperties(), newProps)          self.assertEqual(group.GetProperties(), newProps)
180    
181          # test SetRange()          # test SetRange()
182          self.assertRaises(ValueError, group.SetRange, 1, 0)          self.assertRaises(ValueError, group.SetRange, (1, 0))
183          group.SetRange(-5, 5)          group.SetRange(Range("]-oo;6]"))
184            self.assertEqual(group.GetRange(), "]-oo;6]")
185            group.SetRange((-5, 5))
186          self.assertEqual(group.GetRange(), "[-5;5[")          self.assertEqual(group.GetRange(), "[-5;5[")
187    
188          # test Matches()          # test Matches()
# Line 184  class TestClassification(unittest.TestCa Line 196  class TestClassification(unittest.TestCa
196          groupCopy = copy.copy(group)          groupCopy = copy.copy(group)
197          self.assertEqual(group, groupCopy)          self.assertEqual(group, groupCopy)
198    
199      def test_ClassGroupSingleton(self):  
200    class TestClassGroupSingleton(unittest.TestCase):
201    
202        def test(self):
203          """Test ClassGroupSingleton"""          """Test ClassGroupSingleton"""
204    
205          defProps = ClassGroupProperties()          defProps = ClassGroupProperties()
# Line 229  class TestClassification(unittest.TestCa Line 244  class TestClassification(unittest.TestCa
244          # test copy          # test copy
245          groupCopy = copy.copy(group)          groupCopy = copy.copy(group)
246          self.assertEqual(group, groupCopy)          self.assertEqual(group, groupCopy)
           
247    
     def test_ClassIterator(self):  
         """Test ClassIterator"""  
248    
249          groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),  class TestClassification(unittest.TestCase, support.SubscriberMixin):
                   ClassGroupRange(-3, 3), ClassGroupSingleton(-5),  
                   ClassGroupDefault()]  
250    
251          clazz = Classification()      """Test cases for Classification"""
252    
253          for g in groups:      def setUp(self):
254              clazz.AppendGroup(g)          self.clazz = Classification()
255            self.clazz.Subscribe(CLASS_CHANGED, self.subscribe_with_params,
256                                 CLASS_CHANGED)
257            self.clear_messages()
258    
259        def tearDown(self):
260            self.clear_messages()
261            self.clazz.Destroy()
262            del self.clazz
263    
264        def test_defaults(self):
265            """Test Classification default settings"""
266            self.assertEqual(self.clazz.FindGroup(-1),
267                             self.clazz.GetDefaultGroup())
268            self.assertEqual(self.clazz.GetDefaultLineColor(), Black)
269            self.assertEqual(self.clazz.GetDefaultFill(), Transparent)
270            self.assertEqual(self.clazz.GetDefaultLineWidth(), 1)
271    
272            # The default group is not counted, hence 0 groups
273            self.assertEqual(self.clazz.GetNumGroups(), 0)
274    
275            # No messages should have been sent so far
276            self.check_messages([])
277    
278        def test_set_default_properties(self):
279            """Test Classification.SetDefaultLineColor and SetDefaultFill"""
280            # No messages so far
281            self.check_messages([])
282    
283            # Change the default line color
284            self.clazz.SetDefaultLineColor(red)
285            self.assertEqual(self.clazz.GetDefaultLineColor(), red)
286            self.assertEqual(self.clazz.GetDefaultFill(), Transparent)
287            self.assertEqual(self.clazz.GetDefaultLineWidth(), 1)
288    
289            self.check_messages([(CLASS_CHANGED,)])
290            self.clear_messages()
291    
292            self.clazz.SetDefaultFill(green)
293            self.assertEqual(self.clazz.GetDefaultFill(), green)
294            self.assertEqual(self.clazz.GetDefaultLineColor(), red)
295            self.assertEqual(self.clazz.GetDefaultLineWidth(), 1)
296            self.check_messages([(CLASS_CHANGED,)])
297    
298            self.check_messages([(CLASS_CHANGED,)])
299            self.clear_messages()
300    
301            self.clazz.SetDefaultLineWidth(10)
302            self.assertEqual(self.clazz.GetDefaultFill(), green)
303            self.assertEqual(self.clazz.GetDefaultLineColor(), red)
304            self.assertEqual(self.clazz.GetDefaultLineWidth(), 10)
305            self.check_messages([(CLASS_CHANGED,)])
306    
307        def test_add_singleton(self):
308            """Test Classification.AppendGroup(ClassGroupSingleton())"""
309            self.assertEquals(self.clazz.FindGroup(5),
310                              self.clazz.GetDefaultGroup())
311    
312          def convert(clazz):          s = ClassGroupSingleton(5)
313              if isinstance(clazz, ClassGroupDefault):   return 0          self.clazz.AppendGroup(s)
314              if isinstance(clazz, ClassGroupSingleton): return 1          self.check_messages([(CLASS_CHANGED,)])
315              if isinstance(clazz, ClassGroupRange):     return 2          self.assertEquals(self.clazz.FindGroup(5), s)
316            self.assertEquals(self.clazz.FindGroup(0),
317                              self.clazz.GetDefaultGroup())
318    
319        def test_add_range(self):
320            """Test Classification.AppendGroup(ClassGroupRange())"""
321            self.assertEquals(self.clazz.FindGroup(0),
322                              self.clazz.GetDefaultGroup())
323    
324            r = ClassGroupRange((-10, 10))
325            self.clazz.AppendGroup(r)
326            self.check_messages([(CLASS_CHANGED,)])
327            self.assertEquals(self.clazz.FindGroup(-11),
328                              self.clazz.GetDefaultGroup())
329            self.assertEquals(self.clazz.FindGroup(-10), r)
330            self.assertEquals(self.clazz.FindGroup(9), r)
331            self.assertEquals(self.clazz.FindGroup(5), r)
332            self.assertEquals(self.clazz.FindGroup(10),
333                              self.clazz.GetDefaultGroup())
334    
335        def test_multiple_groups(self):
336            """Test Classification with multiple groups"""
337            # two singletons matching 1 to test whether they're tested in
338            # the right order. Use a non default fill on the second to make
339            # it compare unequal to the first.
340            s1 = ClassGroupSingleton(1)
341            s1a = ClassGroupSingleton(1)
342            s1a.GetProperties().SetFill(blue)
343            # Sanity check: are they considered different?
344            self.assertNotEqual(s1, s1a)
345    
346            s2 = ClassGroupSingleton(2)
347            r = ClassGroupRange((-10, 10))
348    
349            self.clazz.AppendGroup(s1)
350            self.clazz.AppendGroup(s2)
351            self.clazz.AppendGroup(s1a)
352            self.clazz.AppendGroup(r)
353            self.check_messages([(CLASS_CHANGED,), (CLASS_CHANGED,),
354                                 (CLASS_CHANGED,), (CLASS_CHANGED,)])
355    
356            self.assertEquals(self.clazz.FindGroup(-11),
357                              self.clazz.GetDefaultGroup())
358            self.assertEquals(self.clazz.FindGroup(-10), r)
359            self.assertEquals(self.clazz.FindGroup(1), s1)
360            self.assertEquals(self.clazz.FindGroup(2), s2)
361            self.assertEquals(self.clazz.FindGroup(3), r)
362            self.assertEquals(self.clazz.FindGroup(9), r)
363            self.assertEquals(self.clazz.FindGroup(10),
364                              self.clazz.GetDefaultGroup())
365    
366        def test_deepcopy(self):
367            """Test deepcopy(Classification())"""
368            self.clazz.AppendGroup(ClassGroupSingleton(5))
369            self.clazz.AppendGroup(ClassGroupRange((-10, 10)))
370    
371          list = []          clazz = copy.deepcopy(self.clazz)
         for g in clazz:  
             list.append(convert(g))  
372    
373          self.assertEquals(list, [0, 1, 1, 2, 1, 0])          self.assertEquals(clazz.GetNumGroups(), self.clazz.GetNumGroups())
374    
375      def test_classification(self):          for i in range(clazz.GetNumGroups()):
376          """Test Classification"""              self.assertEquals(clazz.GetGroup(i), self.clazz.GetGroup(i))
377    
         defProps = ClassGroupProperties()  
         red   = Color(1, 0, 0)  
         green = Color(0, 1, 0)  
         blue  = Color(0, 0, 1)  
   
         session = Session("Test session")  
         filename = os.path.join("..", "Data", "iceland", "political.dbf")  
         layer = Layer("asdf", session.OpenShapefile(filename))  
378    
379          #      def test_iterator(self):
380          # init with no params          """Test Classification iteration"""
381          #          groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),
382          c = Classification()                    ClassGroupRange((-3, 3)), ClassGroupSingleton(-5),
383          self.assertEqual(c.GetField(), None)                    ClassGroupDefault()]
         self.assertEqual(c.GetFieldType(), None)  
         self.assertEqual(c.FindGroup(-1), c.GetDefaultGroup())  
   
         c.SetDefaultLineColor(red)  
         self.assertEqual(c.GetDefaultLineColor(), red)  
         self.assertEqual(c.GetDefaultFill(), Transparent)  
   
         c.SetDefaultFill(green)  
         self.assertEqual(c.GetDefaultFill(), green)  
         self.assertEqual(c.GetDefaultLineColor(), red)  
   
         c.SetFieldInfo("hallo", FIELDTYPE_STRING)  
         self.assertEqual(c.GetField(), "hallo")  
         self.assertEqual(c.GetFieldType(), FIELDTYPE_STRING)  
   
         # should raise an exception because 'hallo' doesn't  
         # exist in the table  
         self.assertRaises(ValueError, c._set_layer, layer)  
           
         c.SetFieldInfo("AREA", None)  
         layer.SetClassification(c)  
         self.assertEqual(c.GetLayer(), layer)  
         self.assertEqual(c.GetField(), "AREA")  
         self.assertEqual(c.GetFieldType(), FIELDTYPE_DOUBLE)  
   
         c.SetFieldInfo(None, None)  
         self.assertEquals(c.GetFieldType(), None)  
         self.assertEquals(c.FindGroup(5), c.GetDefaultGroup())  
384    
385          c.SetFieldInfo("AREA", None)          for g in groups:
386          s = ClassGroupSingleton(5)              self.clazz.AppendGroup(g)
         c.AppendGroup(s)  
         self.assertEquals(c.FindGroup(5), s)  
         self.assertEquals(c.FindGroup(0), c.GetDefaultGroup())  
   
         r = ClassGroupRange(-10, 10)  
         c.AppendGroup(r)  
         self.assertEquals(c.FindGroup(-11), c.GetDefaultGroup())  
         self.assertEquals(c.FindGroup(-10), r)  
         self.assertEquals(c.FindGroup(9), r)  
         self.assertEquals(c.FindGroup(5), s)  
         self.assertEquals(c.FindGroup(10), c.GetDefaultGroup())  
387    
388          clazz = copy.deepcopy(c)          def convert(group):
389                if isinstance(group, ClassGroupDefault):   return 0
390                if isinstance(group, ClassGroupSingleton): return 1
391                if isinstance(group, ClassGroupRange):     return 2
392    
393          self.assertEquals(clazz.GetNumGroups(), c.GetNumGroups())          list = []
394            for g in self.clazz:
395                list.append(convert(g))
396    
397          for i in range(clazz.GetNumGroups()):          self.assertEquals(list, [0, 1, 1, 2, 1, 0])
             self.assertEquals(clazz.GetGroup(i), c.GetGroup(i))  
398    
         layer.Destroy()  
399    
400  if __name__ == "__main__":  if __name__ == "__main__":
401      support.run_tests()      support.run_tests()

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26