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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 342 - (hide annotations)
Fri Oct 18 17:28:46 2002 UTC (22 years, 4 months ago) by bh
Original Path: trunk/thuban/test/support.py
File MIME type: text/x-python
File size: 4745 byte(s)
(FloatComparisonMixin.assertFloatEqual)
(FloatComparisonMixin.assertFloatSeqEqual): give a more useful
message if the assertion fails and don't return the return value
of self.assert_. In assertFloatSeqEqual the return meant that not
all items of the sequence were compared.

1 bh 292 # 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     Support classes and function for the test suite
10     """
11    
12     __version__ = "$Revision$"
13     # $Source$
14     # $Id$
15    
16     import os, sys
17     import unittest
18    
19     def thuban_dir():
20     """Return the directory containing the Thuban package"""
21     thisdir = os.path.dirname(__file__)
22     return os.path.join(thisdir, os.pardir)
23    
24    
25     def add_thuban_dir_to_path():
26     """Insert the Thuban directory at the beginning of the python path.
27    
28     If it's already part of the path, remove later occurrences.
29     """
30     dir = thuban_dir()
31     while 1:
32     try:
33     sys.path.remove(dir)
34     except ValueError:
35     break
36     sys.path.insert(0, dir)
37    
38    
39     _initthuban_done = 0
40     def initthuban():
41     """Initialize the interpreter for using Thuban modules
42     """
43     global _initthuban_done
44     if not _initthuban_done:
45     add_thuban_dir_to_path()
46     import thubaninit
47     _initthuban_done = 1
48    
49     def run_suite(suite):
50     """Run the test suite suite and return the result"""
51     runner = unittest.TextTestRunner(verbosity = 2)
52     return runner.run(suite)
53    
54    
55     def create_temp_dir():
56     """Create a temporary directory and return its name.
57    
58     The temporary directory is always called temp and is created in the
59     directory where support module is located.
60    
61     If the temp directory already exists, just return the name.
62     """
63     name = os.path.abspath(os.path.join(os.path.dirname(__file__), "temp"))
64    
65     # if the directory already exists, we're done
66     if os.path.isdir(name):
67     return name
68    
69     # create the directory
70     os.mkdir(name)
71     return name
72    
73    
74     class FileTestMixin:
75    
76     """Mixin class for tests that use files in the temporary directory
77     """
78    
79     def temp_file_name(self, basename):
80     """Return the full name of the file named basename in the temp. dir"""
81     return os.path.join(create_temp_dir(), basename)
82    
83     def temp_dir(self):
84     """Return the name of the directory for the temporary files"""
85     return create_temp_dir()
86 bh 324
87    
88     class FloatComparisonMixin:
89    
90     """
91     Mixin class for tests comparing floating point numbers.
92    
93     This class provides a few methods for testing floating point
94     operations.
95     """
96    
97     fp_epsilon = 1e-6
98    
99     def assertFloatEqual(self, test, value):
100     """Assert equality of test and value with some tolerance.
101    
102     Assert that the absolute difference between test and value is
103     less than self.fp_epsilon.
104     """
105 bh 342 self.assert_(self.fp_epsilon > abs(test - value),
106     "abs(%g - %g) >= %g" % (test, value, self.fp_epsilon))
107 bh 324
108     def assertFloatSeqEqual(self, test, value, epsilon = None):
109     """Assert equality of the sequences test and value with some tolerance.
110    
111     Assert that the absolute difference between each corresponding
112     value in test and value is less than the optional parameter
113     epsilon. If epsilon is not given use self.fp_epsilon.
114     """
115     if epsilon is None:
116     epsilon = self.fp_epsilon
117     for i in range(len(test)):
118 bh 342 self.assert_(epsilon > abs(test[i] - value[i]),
119     "abs(%g - %g) >= %g" % (test[i], value[i], epsilon))
120 bh 324
121    
122     class SubscriberMixin:
123    
124     """Mixin class for tests for messages sent through the Connector
125    
126     The SubscriberMixin has some methods that can be used as subscribers
127     of events that when called append information about the message into
128     a list of messages received.
129    
130     A derived class should call the clear_messages() method in both its
131     setUp and tearDown methods to clear the list of messages received.
132     """
133    
134     def clear_messages(self):
135     """Clear the list of received messages.
136    
137     Call this at least in the tests setUp and tearDown methods. It's
138     important to do it in tearDown too because otherwise there may
139     be cyclic references.
140     """
141     self.received_messages = []
142    
143     def subscribe_no_params(self):
144     """Method for subscriptions without parameters.
145    
146     Add an empty tuple to the list of received messages.
147     """
148     self.received_messages.append(())
149    
150     def subscribe_with_params(self, *args):
151     """Method for subscriptions with parameters.
152    
153     Append the tuple will all arguments to this function (except for
154     the self argument) to the list of received messages.
155     """
156     self.received_messages.append(args)
157    
158     def check_messages(self, messages):
159     """Check whether the messages received match the list messages"""
160     self.assertEquals(messages, self.received_messages)

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26