/[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 1905 by bh, Fri Oct 31 17:09:58 2003 UTC revision 2688 by frank, Fri Jun 30 12:27:20 2006 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    
 import os  
21  import copy  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      ClassGroupPattern, 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    
32    
# Line 251  class TestClassGroupSingleton(unittest.T Line 246  class TestClassGroupSingleton(unittest.T
246          self.assertEqual(group, groupCopy)          self.assertEqual(group, groupCopy)
247    
248    
249  class TestClassification(unittest.TestCase):  class TestClassGroupPattern(unittest.TestCase):
250    
251        def test(self):
252            """Test ClassGroupPattern"""
253    
254            defProps = ClassGroupProperties()
255            newProps = ClassGroupProperties()
256            newProps.SetLineColor(Color(.25, .5, .75))
257            newProps.SetLineWidth(5)
258            newProps.SetFill(Color(.12, .24, .36))
259    
260            # test empty constructor
261            group = ClassGroupPattern()
262    
263            self.assertEqual(group.GetPattern(), "")
264            self.assertEqual(group.GetProperties(), defProps)
265            self.assertEqual(group.GetLabel(), "")
266    
267            # test SetProperties()/GetProperties()
268            group.SetProperties(newProps)
269            self.assertEqual(group.GetProperties(), newProps)
270    
271            # test SetPattern()
272            group.SetPattern("A")
273            self.assertEqual(group.GetPattern(), "A")
274    
275            # test Matches()
276            self.assertEqual(group.Matches("CBA"), False)
277            self.assertEqual(group.Matches("ABC"), True)
278    
279            group.SetPattern("a")
280            self.assertNotEqual(group.GetPattern(), "A")
281    
282            # test Matches()
283            self.assertEqual(group.Matches("Abc"), False)
284            self.assertEqual(group.Matches("aBC"), True)
285    
286            group.SetPattern("hallo")
287            self.assertEqual(group.GetPattern(), "hallo")
288    
289            # test Matches()
290            self.assertEqual(group.Matches("HALLO"), False)
291            self.assertEqual(group.Matches("hallo"), True)
292    
293            # test copy
294            groupCopy = copy.copy(group)
295            self.assertEqual(group, groupCopy)
296    
297    
298    class TestClassification(unittest.TestCase, support.SubscriberMixin):
299    
300      """Test cases for Classification"""      """Test cases for Classification"""
301    
302      def setUp(self):      def setUp(self):
303          self.clazz = Classification()          self.clazz = Classification()
304            self.clazz.Subscribe(CLASS_CHANGED, self.subscribe_with_params,
305                                 CLASS_CHANGED)
306            self.clear_messages()
307    
308        def tearDown(self):
309            self.clear_messages()
310            self.clazz.Destroy()
311            del self.clazz
312    
313      def test_defaults(self):      def test_defaults(self):
314          """Test Classification default settings"""          """Test Classification default settings"""
         c = Classification()  
315          self.assertEqual(self.clazz.FindGroup(-1),          self.assertEqual(self.clazz.FindGroup(-1),
316                           self.clazz.GetDefaultGroup())                           self.clazz.GetDefaultGroup())
317          self.assertEqual(self.clazz.GetDefaultLineColor(), Black)          self.assertEqual(self.clazz.GetDefaultLineColor(), Black)
318          self.assertEqual(self.clazz.GetDefaultFill(), Transparent)          self.assertEqual(self.clazz.GetDefaultFill(), Transparent)
319            self.assertEqual(self.clazz.GetDefaultLineWidth(), 1)
320    
321          # The default group is not counted, hence 0 groups          # The default group is not counted, hence 0 groups
322          self.assertEqual(self.clazz.GetNumGroups(), 0)          self.assertEqual(self.clazz.GetNumGroups(), 0)
323    
324            # No messages should have been sent so far
325            self.check_messages([])
326    
327      def test_set_default_properties(self):      def test_set_default_properties(self):
328          """Test Classification.SetDefaultLineColor and SetDefaultFill"""          """Test Classification.SetDefaultLineColor and SetDefaultFill"""
329          c = Classification()          # No messages so far
330            self.check_messages([])
331    
332            # Change the default line color
333          self.clazz.SetDefaultLineColor(red)          self.clazz.SetDefaultLineColor(red)
334          self.assertEqual(self.clazz.GetDefaultLineColor(), red)          self.assertEqual(self.clazz.GetDefaultLineColor(), red)
335          self.assertEqual(self.clazz.GetDefaultFill(), Transparent)          self.assertEqual(self.clazz.GetDefaultFill(), Transparent)
336            self.assertEqual(self.clazz.GetDefaultLineWidth(), 1)
337    
338            self.check_messages([(CLASS_CHANGED,)])
339            self.clear_messages()
340    
341          self.clazz.SetDefaultFill(green)          self.clazz.SetDefaultFill(green)
342          self.assertEqual(self.clazz.GetDefaultFill(), green)          self.assertEqual(self.clazz.GetDefaultFill(), green)
343          self.assertEqual(self.clazz.GetDefaultLineColor(), red)          self.assertEqual(self.clazz.GetDefaultLineColor(), red)
344            self.assertEqual(self.clazz.GetDefaultLineWidth(), 1)
345            self.check_messages([(CLASS_CHANGED,)])
346    
347            self.check_messages([(CLASS_CHANGED,)])
348            self.clear_messages()
349    
350            self.clazz.SetDefaultLineWidth(10)
351            self.assertEqual(self.clazz.GetDefaultFill(), green)
352            self.assertEqual(self.clazz.GetDefaultLineColor(), red)
353            self.assertEqual(self.clazz.GetDefaultLineWidth(), 10)
354            self.check_messages([(CLASS_CHANGED,)])
355    
356        def test_set_default_group(self):
357            """Test Classification.SetDefaultGroup()"""
358            prop = ClassGroupProperties()
359            prop.SetLineColor(blue)
360            prop.SetLineWidth(5)
361            prop.SetFill(red)
362    
363            self.clazz.SetDefaultGroup(ClassGroupDefault(prop))
364            self.assertEqual(self.clazz.GetDefaultFill(), red)
365            self.assertEqual(self.clazz.GetDefaultLineColor(), blue)
366            self.assertEqual(self.clazz.GetDefaultLineWidth(), 5)
367            self.check_messages([(CLASS_CHANGED,)])
368    
369      def test_add_singleton(self):      def test_add_singleton(self):
370          """Test Classification.AppendGroup(ClassGroupSingleton())"""          """Test Classification.AppendGroup(ClassGroupSingleton())"""
         c = Classification()  
371          self.assertEquals(self.clazz.FindGroup(5),          self.assertEquals(self.clazz.FindGroup(5),
372                            self.clazz.GetDefaultGroup())                            self.clazz.GetDefaultGroup())
373    
374          s = ClassGroupSingleton(5)          s = ClassGroupSingleton(5)
375          self.clazz.AppendGroup(s)          self.clazz.AppendGroup(s)
376            self.check_messages([(CLASS_CHANGED,)])
377          self.assertEquals(self.clazz.FindGroup(5), s)          self.assertEquals(self.clazz.FindGroup(5), s)
378          self.assertEquals(self.clazz.FindGroup(0),          self.assertEquals(self.clazz.FindGroup(0),
379                            self.clazz.GetDefaultGroup())                            self.clazz.GetDefaultGroup())
380    
381      def test_add_range(self):      def test_add_range(self):
382          """Test Classification.AppendGroup(ClassGroupRange())"""          """Test Classification.AppendGroup(ClassGroupRange())"""
         c = Classification()  
383          self.assertEquals(self.clazz.FindGroup(0),          self.assertEquals(self.clazz.FindGroup(0),
384                            self.clazz.GetDefaultGroup())                            self.clazz.GetDefaultGroup())
385    
386          r = ClassGroupRange((-10, 10))          r = ClassGroupRange((-10, 10))
387          self.clazz.AppendGroup(r)          self.clazz.AppendGroup(r)
388            self.check_messages([(CLASS_CHANGED,)])
389          self.assertEquals(self.clazz.FindGroup(-11),          self.assertEquals(self.clazz.FindGroup(-11),
390                            self.clazz.GetDefaultGroup())                            self.clazz.GetDefaultGroup())
391          self.assertEquals(self.clazz.FindGroup(-10), r)          self.assertEquals(self.clazz.FindGroup(-10), r)
# Line 309  class TestClassification(unittest.TestCa Line 394  class TestClassification(unittest.TestCa
394          self.assertEquals(self.clazz.FindGroup(10),          self.assertEquals(self.clazz.FindGroup(10),
395                            self.clazz.GetDefaultGroup())                            self.clazz.GetDefaultGroup())
396    
397      def test_multiple_groups(self):      def test_add_pattern(self):
398          """Test Classification with multiple groups"""          """Test Classification.AppendGroup(ClassGroupPattern())"""
399          c = Classification()          self.assertEquals(self.clazz.FindGroup(5),
400                              self.clazz.GetDefaultGroup())
401    
402            s = ClassGroupPattern("A")
403            self.clazz.AppendGroup(s)
404            self.check_messages([(CLASS_CHANGED,)])
405            self.assertEquals(self.clazz.FindGroup("A"), s)
406            self.assertEquals(self.clazz.FindGroup("B"),
407                              self.clazz.GetDefaultGroup())
408    
409        def test_multiple_groups_numerical(self):
410            """Test numerical Classification with multiple groups"""
411          # two singletons matching 1 to test whether they're tested in          # two singletons matching 1 to test whether they're tested in
412          # the right order. Use a non default fill on the second to make          # the right order. Use a non default fill on the second to make
413          # it compare unequal to the first.          # it compare unequal to the first.
# Line 329  class TestClassification(unittest.TestCa Line 424  class TestClassification(unittest.TestCa
424          self.clazz.AppendGroup(s2)          self.clazz.AppendGroup(s2)
425          self.clazz.AppendGroup(s1a)          self.clazz.AppendGroup(s1a)
426          self.clazz.AppendGroup(r)          self.clazz.AppendGroup(r)
427            self.check_messages([(CLASS_CHANGED,), (CLASS_CHANGED,),
428                                 (CLASS_CHANGED,), (CLASS_CHANGED,)])
429    
430          self.assertEquals(self.clazz.FindGroup(-11),          self.assertEquals(self.clazz.FindGroup(-11),
431                            self.clazz.GetDefaultGroup())                            self.clazz.GetDefaultGroup())
# Line 340  class TestClassification(unittest.TestCa Line 437  class TestClassification(unittest.TestCa
437          self.assertEquals(self.clazz.FindGroup(10),          self.assertEquals(self.clazz.FindGroup(10),
438                            self.clazz.GetDefaultGroup())                            self.clazz.GetDefaultGroup())
439    
440      def test_deepcopy(self):      def test_multiple_groups_textual(self):
441          """Test deepcopy(Classification())"""          """Test textual Classification with multiple groups"""
442            # A singleton and a pattern matching 'A' to test whether
443            # they're tested in the right order. Use a non default fill
444            # on the pattern to make it compare unequal to the first.
445            s = ClassGroupSingleton("A")
446            p = ClassGroupPattern("A")
447            p.GetProperties().SetFill(blue)
448            # Sanity check: are they considered different?
449            self.assertNotEqual(s, p)
450    
451            self.clazz.AppendGroup(s)
452            self.clazz.AppendGroup(p)
453            self.check_messages([(CLASS_CHANGED,), (CLASS_CHANGED,)])
454    
455            self.assertEquals(self.clazz.FindGroup("bca"),
456                              self.clazz.GetDefaultGroup())
457            self.assertEquals(self.clazz.FindGroup("A"), s)
458            self.assertEquals(self.clazz.FindGroup("Abc"), p)
459            self.assertEquals(self.clazz.FindGroup("abc"),
460                              self.clazz.GetDefaultGroup())
461    
462        def test_insert_group(self):
463            """Test Classification.InsertGroup()"""
464            s1 = ClassGroupSingleton(1)
465            s2 = ClassGroupSingleton(2)
466            r = ClassGroupRange((0, 10))
467    
468            self.clazz.AppendGroup(s1)
469            self.clazz.AppendGroup(r)
470            self.assertEquals(self.clazz.FindGroup(2), r)
471            self.clear_messages()
472    
473            self.clazz.InsertGroup(1, s2)
474            self.assertEquals(self.clazz.FindGroup(2), s2)
475            self.check_messages([(CLASS_CHANGED,)])
476    
477        def test_remove_group(self):
478            """Test Classification.RemoveGroup()"""
479            s1 = ClassGroupSingleton(1)
480            s2 = ClassGroupSingleton(2)
481            r = ClassGroupRange((0, 10))
482    
483            self.clazz.AppendGroup(s1)
484            self.clazz.AppendGroup(s2)
485            self.clazz.AppendGroup(r)
486            self.assertEquals(self.clazz.FindGroup(2), s2)
487            self.clear_messages()
488    
489            self.clazz.RemoveGroup(1)
490            self.assertEquals(self.clazz.FindGroup(2), r)
491            self.check_messages([(CLASS_CHANGED,)])
492    
493        def test_replace_group(self):
494            """Test Classification.ReplaceGroup()"""
495            s1 = ClassGroupSingleton(1)
496            s2 = ClassGroupSingleton(2)
497            r = ClassGroupRange((0, 10))
498    
499            self.clazz.AppendGroup(s2)
500            self.clazz.AppendGroup(r)
501            self.assertEquals(self.clazz.FindGroup(2), s2)
502            self.assertEquals(self.clazz.FindGroup(1), r)
503            self.clear_messages()
504    
505            self.clazz.ReplaceGroup(0, s1)
506            self.assertEquals(self.clazz.FindGroup(2), r)
507            self.assertEquals(self.clazz.FindGroup(1), s1)
508            self.check_messages([(CLASS_CHANGED,)])
509    
510        def test_deepcopy_numerical(self):
511            """Test deepcopy(numerical Classification())"""
512          self.clazz.AppendGroup(ClassGroupSingleton(5))          self.clazz.AppendGroup(ClassGroupSingleton(5))
513          self.clazz.AppendGroup(ClassGroupRange((-10, 10)))          self.clazz.AppendGroup(ClassGroupRange((-10, 10)))
514    
515          clazz = copy.deepcopy(self.clazz)          clazz = copy.deepcopy(self.clazz)
516    
517            self.assertEquals(clazz.GetNumGroups(), self.clazz.GetNumGroups())
518    
519            for i in range(clazz.GetNumGroups()):
520                self.assertEquals(clazz.GetGroup(i), self.clazz.GetGroup(i))
521    
522        def test_deepcopy_textual(self):
523            """Test deepcopy(textual Classification())"""
524            self.clazz.AppendGroup(ClassGroupSingleton("A"))
525            self.clazz.AppendGroup(ClassGroupPattern("B"))
526    
527            clazz = copy.deepcopy(self.clazz)
528    
529          self.assertEquals(clazz.GetNumGroups(), self.clazz.GetNumGroups())          self.assertEquals(clazz.GetNumGroups(), self.clazz.GetNumGroups())
530    
531          for i in range(clazz.GetNumGroups()):          for i in range(clazz.GetNumGroups()):

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26