/[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 1437 by jonathan, Wed Jul 16 13:25:16 2003 UTC revision 1910 by bh, Fri Oct 31 18:16:46 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    
 from Thuban.Model.session import Session  
 from Thuban.Model.layer import Layer  
30  from Thuban.Model.range import Range  from Thuban.Model.range import Range
31    
 import copy  
32    
33    
34  class TestClassification(unittest.TestCase):  # 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    
39    
40    class TestClassGroupProperties(unittest.TestCase):
41    
42      def test_ClassGroupProperties(self):      def test(self):
43          """Test ClassGroupProperties"""          """Test ClassGroupProperties"""
44    
45          props = ClassGroupProperties()          props = ClassGroupProperties()
# Line 45  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 64  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 94  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 134  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 150  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 187  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 232  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)
           
   
     def test_ClassIterator(self):  
         """Test ClassIterator"""  
247    
         groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),  
                   ClassGroupRange((-3, 3)), ClassGroupSingleton(-5),  
                   ClassGroupDefault()]  
248    
249          clazz = Classification()  class TestClassification(unittest.TestCase, support.SubscriberMixin):
250    
251          for g in groups:      """Test cases for Classification"""
             clazz.AppendGroup(g)  
252    
253          def convert(clazz):      def setUp(self):
254              if isinstance(clazz, ClassGroupDefault):   return 0          self.clazz = Classification()
255              if isinstance(clazz, ClassGroupSingleton): return 1          self.clazz.Subscribe(CLASS_CHANGED, self.subscribe_with_params,
256              if isinstance(clazz, ClassGroupRange):     return 2                               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_set_default_group(self):
308            """Test Classification.SetDefaultGroup()"""
309            prop = ClassGroupProperties()
310            prop.SetLineColor(blue)
311            prop.SetLineWidth(5)
312            prop.SetFill(red)
313    
314            self.clazz.SetDefaultGroup(ClassGroupDefault(prop))
315            self.assertEqual(self.clazz.GetDefaultFill(), red)
316            self.assertEqual(self.clazz.GetDefaultLineColor(), blue)
317            self.assertEqual(self.clazz.GetDefaultLineWidth(), 5)
318            self.check_messages([(CLASS_CHANGED,)])
319    
320        def test_add_singleton(self):
321            """Test Classification.AppendGroup(ClassGroupSingleton())"""
322            self.assertEquals(self.clazz.FindGroup(5),
323                              self.clazz.GetDefaultGroup())
324    
325          list = []          s = ClassGroupSingleton(5)
326          for g in clazz:          self.clazz.AppendGroup(s)
327              list.append(convert(g))          self.check_messages([(CLASS_CHANGED,)])
328            self.assertEquals(self.clazz.FindGroup(5), s)
329          self.assertEquals(list, [0, 1, 1, 2, 1, 0])          self.assertEquals(self.clazz.FindGroup(0),
330                              self.clazz.GetDefaultGroup())
331    
332        def test_add_range(self):
333            """Test Classification.AppendGroup(ClassGroupRange())"""
334            self.assertEquals(self.clazz.FindGroup(0),
335                              self.clazz.GetDefaultGroup())
336    
337      def test_classification(self):          r = ClassGroupRange((-10, 10))
338          """Test Classification"""          self.clazz.AppendGroup(r)
339            self.check_messages([(CLASS_CHANGED,)])
340            self.assertEquals(self.clazz.FindGroup(-11),
341                              self.clazz.GetDefaultGroup())
342            self.assertEquals(self.clazz.FindGroup(-10), r)
343            self.assertEquals(self.clazz.FindGroup(9), r)
344            self.assertEquals(self.clazz.FindGroup(5), r)
345            self.assertEquals(self.clazz.FindGroup(10),
346                              self.clazz.GetDefaultGroup())
347    
348        def test_multiple_groups(self):
349            """Test Classification with multiple groups"""
350            # two singletons matching 1 to test whether they're tested in
351            # the right order. Use a non default fill on the second to make
352            # it compare unequal to the first.
353            s1 = ClassGroupSingleton(1)
354            s1a = ClassGroupSingleton(1)
355            s1a.GetProperties().SetFill(blue)
356            # Sanity check: are they considered different?
357            self.assertNotEqual(s1, s1a)
358    
359          defProps = ClassGroupProperties()          s2 = ClassGroupSingleton(2)
360          red   = Color(1, 0, 0)          r = ClassGroupRange((-10, 10))
         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))  
361    
362          #          self.clazz.AppendGroup(s1)
363          # init with no params          self.clazz.AppendGroup(s2)
364          #          self.clazz.AppendGroup(s1a)
365          c = Classification()          self.clazz.AppendGroup(r)
366          self.assertEqual(c.FindGroup(-1), c.GetDefaultGroup())          self.check_messages([(CLASS_CHANGED,), (CLASS_CHANGED,),
367                                 (CLASS_CHANGED,), (CLASS_CHANGED,)])
368    
369            self.assertEquals(self.clazz.FindGroup(-11),
370                              self.clazz.GetDefaultGroup())
371            self.assertEquals(self.clazz.FindGroup(-10), r)
372            self.assertEquals(self.clazz.FindGroup(1), s1)
373            self.assertEquals(self.clazz.FindGroup(2), s2)
374            self.assertEquals(self.clazz.FindGroup(3), r)
375            self.assertEquals(self.clazz.FindGroup(9), r)
376            self.assertEquals(self.clazz.FindGroup(10),
377                              self.clazz.GetDefaultGroup())
378    
379        def test_insert_group(self):
380            """Test Classification.InsertGroup()"""
381            s1 = ClassGroupSingleton(1)
382            s2 = ClassGroupSingleton(2)
383            r = ClassGroupRange((0, 10))
384    
385            self.clazz.AppendGroup(s1)
386            self.clazz.AppendGroup(r)
387            self.assertEquals(self.clazz.FindGroup(2), r)
388            self.clear_messages()
389    
390            self.clazz.InsertGroup(1, s2)
391            self.assertEquals(self.clazz.FindGroup(2), s2)
392            self.check_messages([(CLASS_CHANGED,)])
393    
394        def test_remove_group(self):
395            """Test Classification.RemoveGroup()"""
396            s1 = ClassGroupSingleton(1)
397            s2 = ClassGroupSingleton(2)
398            r = ClassGroupRange((0, 10))
399    
400            self.clazz.AppendGroup(s1)
401            self.clazz.AppendGroup(s2)
402            self.clazz.AppendGroup(r)
403            self.assertEquals(self.clazz.FindGroup(2), s2)
404            self.clear_messages()
405    
406            self.clazz.RemoveGroup(1)
407            self.assertEquals(self.clazz.FindGroup(2), r)
408            self.check_messages([(CLASS_CHANGED,)])
409    
410        def test_replace_group(self):
411            """Test Classification.ReplaceGroup()"""
412            s1 = ClassGroupSingleton(1)
413            s2 = ClassGroupSingleton(2)
414            r = ClassGroupRange((0, 10))
415    
416            self.clazz.AppendGroup(s2)
417            self.clazz.AppendGroup(r)
418            self.assertEquals(self.clazz.FindGroup(2), s2)
419            self.assertEquals(self.clazz.FindGroup(1), r)
420            self.clear_messages()
421    
422            self.clazz.ReplaceGroup(0, s1)
423            self.assertEquals(self.clazz.FindGroup(2), r)
424            self.assertEquals(self.clazz.FindGroup(1), s1)
425            self.check_messages([(CLASS_CHANGED,)])
426    
427        def test_deepcopy(self):
428            """Test deepcopy(Classification())"""
429            self.clazz.AppendGroup(ClassGroupSingleton(5))
430            self.clazz.AppendGroup(ClassGroupRange((-10, 10)))
431    
432          c.SetDefaultLineColor(red)          clazz = copy.deepcopy(self.clazz)
         self.assertEqual(c.GetDefaultLineColor(), red)  
         self.assertEqual(c.GetDefaultFill(), Transparent)  
433    
434          c.SetDefaultFill(green)          self.assertEquals(clazz.GetNumGroups(), self.clazz.GetNumGroups())
         self.assertEqual(c.GetDefaultFill(), green)  
         self.assertEqual(c.GetDefaultLineColor(), red)  
435    
436          layer.SetClassification(c)          for i in range(clazz.GetNumGroups()):
437                self.assertEquals(clazz.GetGroup(i), self.clazz.GetGroup(i))
438    
         self.assertEquals(c.FindGroup(5), c.GetDefaultGroup())  
439    
440          s = ClassGroupSingleton(5)      def test_iterator(self):
441          c.AppendGroup(s)          """Test Classification iteration"""
442          self.assertEquals(c.FindGroup(5), s)          groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),
443          self.assertEquals(c.FindGroup(0), c.GetDefaultGroup())                    ClassGroupRange((-3, 3)), ClassGroupSingleton(-5),
444                      ClassGroupDefault()]
445    
446          r = ClassGroupRange((-10, 10))          for g in groups:
447          c.AppendGroup(r)              self.clazz.AppendGroup(g)
         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())  
448    
449          clazz = copy.deepcopy(c)          def convert(group):
450                if isinstance(group, ClassGroupDefault):   return 0
451                if isinstance(group, ClassGroupSingleton): return 1
452                if isinstance(group, ClassGroupRange):     return 2
453    
454          self.assertEquals(clazz.GetNumGroups(), c.GetNumGroups())          list = []
455            for g in self.clazz:
456                list.append(convert(g))
457    
458          for i in range(clazz.GetNumGroups()):          self.assertEquals(list, [0, 1, 1, 2, 1, 0])
             self.assertEquals(clazz.GetGroup(i), c.GetGroup(i))  
459    
         session.Destroy()  
         layer.Destroy()  
460    
461  if __name__ == "__main__":  if __name__ == "__main__":
462      support.run_tests()      support.run_tests()

Legend:
Removed from v.1437  
changed lines
  Added in v.1910

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26