~ubuntu-branches/ubuntu/lucid/thuban/lucid

« back to all changes in this revision

Viewing changes to test/test_base.py

  • Committer: Bazaar Package Importer
  • Author(s): Silke Reimer
  • Date: 2004-01-28 12:47:34 UTC
  • Revision ID: james.westby@ubuntu.com-20040128124734-6xotwcqilok6ngut
Tags: upstream-1.0.0
ImportĀ upstreamĀ versionĀ 1.0.0

Show diffs side-by-side

added added

removed removed

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