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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 956 by bh, Wed May 21 17:11:17 2003 UTC revision 1555 by bh, Thu Aug 7 15:41:05 2003 UTC
# Line 21  def thuban_dir(): Line 21  def thuban_dir():
21      thisdir = os.path.dirname(__file__)      thisdir = os.path.dirname(__file__)
22      return os.path.join(thisdir, os.pardir)      return os.path.join(thisdir, os.pardir)
23    
24    def resource_dir():
25        return os.path.join(thuban_dir(), "Resources")
26    
27  def add_thuban_dir_to_path():  def add_thuban_dir_to_path():
28      """Insert the Thuban directory at the beginning of the python path.      """Insert the Thuban directory at the beginning of the python path.
# Line 46  def initthuban(): Line 48  def initthuban():
48          import thubaninit          import thubaninit
49          _initthuban_done = 1          _initthuban_done = 1
50    
51    
52    #
53    # Special test runner and result that support skipping tests
54    #
55    
56    class SkipTest(Exception):
57        """Exception to raise in tests that are skipped for some reason
58    
59        For instance, since gdal support is optional, test cases that
60        require gdal raise this exception to indicate that they are skipped.
61        Skipped is different from failure or error in that it is expected
62        under certain circumstances.
63        """
64    
65    class ThubanTestResult(unittest._TextTestResult):
66    
67        def __init__(self, stream, descriptions, verbosity):
68            unittest._TextTestResult.__init__(self, stream, descriptions,
69                                              verbosity)
70            self.skipped_tests = {}
71    
72        def add_skipped_test(self, test, exc):
73            reason = str(exc)
74            self.skipped_tests.setdefault(reason, []).append(test)
75    
76        def count_skipped(self):
77            sum = 0
78            for tests in self.skipped_tests.values():
79                sum += len(tests)
80            return sum
81    
82        def addError(self, test, err):
83            """Extend inherited method to handle SkipTest exceptions specially
84            """
85            #print "addError", test, err
86            if isinstance(err[1], SkipTest):
87                self.add_skipped_test(test, err[1])
88                if self.showAll:
89                    self.stream.writeln("skipped")
90                elif self.dots:
91                    self.stream.write('S')
92            else:
93                unittest._TextTestResult.addError(self, test, err)
94    
95        def printErrors(self):
96            if self.skipped_tests:
97                if self.dots or self.showAll:
98                    self.stream.writeln()
99                self.stream.writeln("Skipped tests:")
100                for reason, tests in self.skipped_tests.items():
101                    self.stream.writeln("%s:" % reason)
102                    for test in tests:
103                        self.stream.writeln("    " + test.id())
104            unittest._TextTestResult.printErrors(self)
105    
106    
107    class ThubanTestRunner(unittest.TextTestRunner):
108    
109        def _makeResult(self):
110            return ThubanTestResult(self.stream, self.descriptions, self.verbosity)
111    
112        def run(self, test):
113            result = unittest.TextTestRunner.run(self, test)
114            self.stream.writeln("skipped = %d" % result.count_skipped())
115            return result
116    
117    
118    class ThubanTestProgram(unittest.TestProgram):
119    
120        def runTests(self):
121            """Extend inherited method so that we use a ThubanTestRunner"""
122            print "ThubanTestProgram.runTests"
123            self.testRunner = ThubanTestRunner(verbosity = self.verbosity)
124            unittest.TestProgram.runTests(self)
125    
126    
127  def run_tests():  def run_tests():
128      """Frontend for unittest.main that prints some additional debug information      """Frontend for unittest.main that prints some additional debug information
129    
# Line 53  def run_tests(): Line 131  def run_tests():
131      uncollected objects. Also print any un-unsubscribed messages.      uncollected objects. Also print any un-unsubscribed messages.
132      """      """
133      try:      try:
134          unittest.main()          ThubanTestProgram()
135      finally:      finally:
136          # This has to be in a finally clause because unittest.main()          # This has to be in a finally clause because unittest.main()
137          # ends with a sys.exit to make sure that the process exits with          # ends with a sys.exit to make sure that the process exits with
138          # an appropriate exit code          # an appropriate exit code
139          print_garbage_information()          print_additional_summary()
140    
141    def print_additional_summary():
142        """Print some additional summary information after tests have been run"""
143        print_garbage_information()
144        import xmlsupport
145        xmlsupport.print_summary_message()
146    
147  def print_garbage_information():  def print_garbage_information():
148      """Print information about things that haven't been cleaned up.      """Print information about things that haven't been cleaned up.
# Line 74  def print_garbage_information(): Line 158  def print_garbage_information():
158          print gc.garbage          print gc.garbage
159      Thuban.Lib.connector._the_connector.print_connections()      Thuban.Lib.connector._the_connector.print_connections()
160    
161    #
162    
163  def create_temp_dir():  def create_temp_dir():
164      """Create a temporary directory and return its name.      """Create a temporary directory and return its name.
# Line 162  class FloatComparisonMixin: Line 247  class FloatComparisonMixin:
247      """      """
248    
249      fp_epsilon = 1e-6      fp_epsilon = 1e-6
250        fp_inf = float('1e1000')   # FIXME: hack for infinite
251            
252      def assertFloatEqual(self, test, value):      def assertFloatEqual(self, test, value, epsilon = None):
253          """Assert equality of test and value with some tolerance.          """Assert equality of test and value with some tolerance.
254    
255          Assert that the absolute difference between test and value is          Assert that the absolute difference between test and value is
256          less than self.fp_epsilon.          less than self.fp_epsilon.
257          """          """
258          self.assert_(self.fp_epsilon > abs(test - value),          if epsilon is None:
259                       "abs(%g - %g) >= %g" % (test, value, self.fp_epsilon))              epsilon = self.fp_epsilon
260            if abs(test) == self.fp_inf:
261                self.assertEqual(test, value)
262            else:
263                self.assert_(epsilon > abs(test - value),
264                         "abs(%g - %g) >= %g" % (test, value, epsilon))
265    
266      def assertFloatSeqEqual(self, test, value, epsilon = None):      def assertFloatSeqEqual(self, test, value, epsilon = None):
267          """Assert equality of the sequences test and value with some tolerance.          """Assert equality of the sequences test and value with some tolerance.
# Line 179  class FloatComparisonMixin: Line 270  class FloatComparisonMixin:
270          value in test and value is less than the optional parameter          value in test and value is less than the optional parameter
271          epsilon. If epsilon is not given use self.fp_epsilon.          epsilon. If epsilon is not given use self.fp_epsilon.
272          """          """
         if epsilon is None:  
             epsilon = self.fp_epsilon  
273          for i in range(len(test)):          for i in range(len(test)):
274              self.assert_(epsilon > abs(test[i] - value[i]),              self.assertFloatEqual(test[i], value[i], epsilon)
                          "abs(%g - %g) >= %g" % (test[i], value[i], epsilon))  
   
275    
276  class SubscriberMixin:  class SubscriberMixin:
277    
# Line 226  class SubscriberMixin: Line 313  class SubscriberMixin:
313          """Check whether the messages received match the list messages"""          """Check whether the messages received match the list messages"""
314          self.assertEquals(messages, self.received_messages)          self.assertEquals(messages, self.received_messages)
315    
 class FloatTestCase(unittest.TestCase):  
     """TestCase with methods for testing floating point values"""  
                                                                                                                                                           
     fp_epsilon = 1e-6  
     fp_inf = float('1e1000')   # FIXME: hack for infinite  
                                                                                                                                                           
     def assertFloatEqual(self, first, second, msg=None):  
         """Fail if one float is greater than the other + fp_epsilon"""  
         if abs(first) == self.fp_inf:  
             self.assertEqual(first, second, msg)  
         else:  
             self.assert_(self.fp_epsilon > abs(first - second), msg)  
   

Legend:
Removed from v.956  
changed lines
  Added in v.1555

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26