/[thuban]/branches/WIP-pyshapelib-bramz/test/test_base.py
ViewVC logotype

Annotation of /branches/WIP-pyshapelib-bramz/test/test_base.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 327 - (hide annotations)
Fri Sep 20 14:06:41 2002 UTC (22 years, 5 months ago) by bh
Original Path: trunk/thuban/test/test_base.py
File MIME type: text/x-python
File size: 4967 byte(s)
New. Test cases for Thuban.Model.base

1 bh 327 # Copyright (c) 2002 by Intevation GmbH
2     # Authors:
3     # Bernhard Herzog <[email protected]>
4     #
5     # This program is free software under the GPL (>=v2)
6     # Read the file COPYING coming with Thuban for details.
7    
8     """
9     Test the TitledObject and Modifiable
10     """
11    
12     __version__ = "$Revision$"
13     # $Source$
14     # $Id$
15    
16     import unittest
17    
18     import support
19     support.initthuban()
20    
21     from Thuban.Model.base import TitledObject, Modifiable
22     from Thuban.Model.messages import TITLE_CHANGED, CHANGED
23     from Thuban.Lib.connector import Publisher
24    
25     SOMETHING_ELSE = "SOMETHING_ELSE"
26    
27     class SomeTitledObject(TitledObject, Publisher):
28    
29     """TitledObject for test purposes.
30    
31     TitledObject is not used directly. It's a mixin to be used together
32     with Publisher.
33     """
34    
35     class SomeModifiable(Modifiable):
36    
37     """Modifiable for test purposes.
38    
39     Modifiable is intended to be used as a base class for classes that
40     need to inform other classes when they change and that have to keep
41     track of whether they have changed. Thus we use a derived class for
42     testing that provides some methods that simulate modificatios.
43     """
44    
45     def do_something(self):
46     """Call self.changed without parameters"""
47     self.changed()
48    
49     def do_something_else(self):
50     """Call self.changed with a message parameter"""
51     self.changed(SOMETHING_ELSE)
52    
53    
54     class SubscriberTest(unittest.TestCase, support.SubscriberMixin):
55    
56     """Base class for test cases that use SubscriberMixin.
57    
58     Just provide the default implementations of setUp and tearDown.
59     """
60    
61     def setUp(self):
62     """Clear the list of received messages"""
63     self.clear_messages()
64    
65     def tearDown(self):
66     """Clear the list of received messages"""
67     self.clear_messages()
68    
69    
70     class TestTitledObject(SubscriberTest):
71    
72     """Test cases for TitledObject"""
73    
74     def test_titled_object(self):
75     """Test TitledObject"""
76     titled = SomeTitledObject("Some Title")
77     titled.Subscribe(TITLE_CHANGED,
78     self.subscribe_with_params, TITLE_CHANGED)
79    
80     self.assertEquals(titled.Title(), "Some Title")
81    
82     titled.SetTitle("New Title")
83     self.assertEquals(titled.Title(), "New Title")
84    
85     self.check_messages([(titled, TITLE_CHANGED)])
86    
87    
88     class TestModifiable(SubscriberTest):
89    
90     """Test cases for Modifiable"""
91    
92     def setUp(self):
93     """Extend the inherited method to create a Modifiable instance.
94    
95     Bind the Modifiable instance (actually an instance of
96     SomeModifiable) to self.modifiable and subscribe to its CHANGED
97     and SOMETHING_ELSE channels.
98     """
99     SubscriberTest.setUp(self)
100     self.modifiable = SomeModifiable()
101     self.modifiable.Subscribe(CHANGED, self.subscribe_with_params, CHANGED)
102     self.modifiable.Subscribe(SOMETHING_ELSE,
103     self.subscribe_with_params, SOMETHING_ELSE)
104    
105     def tearDown(self):
106     """Extend the inherited method to explicitly destroy self.modifiable.
107     """
108     self.modifiable.Destroy()
109     SubscriberTest.tearDown(self)
110    
111     def test_initial_state(self):
112     """Test Modifiable initial state"""
113     # initially a modifiable is unmodified
114     self.failIf(self.modifiable.WasModified())
115     # this test should not have resulted in any messages
116     self.check_messages([])
117    
118     def test_silent_change(self):
119     """Test Modifiable method which doesn't issue messages"""
120     self.modifiable.do_something()
121     # Now it should be modified and we should not have received any
122     # message
123     self.assert_(self.modifiable.WasModified())
124     self.check_messages([])
125    
126     def test_unset_modified(self):
127     """Test Modifiable.UnsetModified.
128    
129     Test whether the UnsetModified does in fact clear the modified
130     flag and whether it issues a CHANGED message if it changes the
131     modified flag from true to false.
132     """
133     # We start with an unmodified object, so when we call
134     # UnsetModified now it shouldn't result in any message.
135     self.modifiable.UnsetModified()
136     self.check_messages([])
137     self.failIf(self.modifiable.WasModified())
138    
139     # Call a method that modifies the object silently.
140     self.modifiable.do_something()
141     self.check_messages([])
142     self.assert_(self.modifiable.WasModified())
143    
144     # when we now call UnsetModified it should result in a CHANGED
145     # message
146     self.modifiable.UnsetModified()
147     self.check_messages([(CHANGED,)])
148     self.failIf(self.modifiable.WasModified())
149    
150     def test_issuing_change(self):
151     """Test Modifiable method that issues messages"""
152     self.modifiable.do_something_else()
153     # Now it should be modified and we should have received a
154     # CHANGED message
155     self.check_messages([(SOMETHING_ELSE,)])
156     self.assert_(self.modifiable.WasModified())
157    
158    
159    
160     if __name__ == "__main__":
161     unittest.main()

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26