/[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 1555 by bh, Thu Aug 7 15:41:05 2003 UTC revision 2642 by bh, Fri Jul 1 20:49:04 2005 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002, 2003 by Intevation GmbH  # Copyright (c) 2002, 2003, 2004, 2005 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 15  __version__ = "$Revision$" Line 15  __version__ = "$Revision$"
15    
16  import os, sys  import os, sys
17  import unittest  import unittest
18    import traceback
19    
20    import postgissupport
21    
22    
23  def thuban_dir():  def thuban_dir():
24      """Return the directory containing the Thuban package"""      """Return the directory containing the Thuban package"""
# Line 44  def initthuban(): Line 48  def initthuban():
48      """      """
49      global _initthuban_done      global _initthuban_done
50      if not _initthuban_done:      if not _initthuban_done:
51            # Thuban uses gettext to translate some strings. Some of these
52            # strings are tested for equality in some test cases. So we
53            # unset any LANG environment setting to make sure only the
54            # untranslated messages are used.
55            try:
56                del os.environ["LANG"]
57            except KeyError:
58                pass
59          add_thuban_dir_to_path()          add_thuban_dir_to_path()
60          import thubaninit          import thubaninit
61    
62            # Install a dummy translation function so that importing
63            # Thuban.UI doesn't install a wx specific one for which would
64            # need to import wxPython
65            import Thuban
66            Thuban.install_translation_function(lambda s: s)
67    
68            # For the time being the default encoding in the test suite is
69            # latin 1.  This is mostly for historical reasons.  Other
70            # encodings can be specified as an argument for runtests.py.
71            Thuban.set_internal_encoding("latin-1")
72    
73          _initthuban_done = 1          _initthuban_done = 1
74    
75    
# Line 98  class ThubanTestResult(unittest._TextTes Line 122  class ThubanTestResult(unittest._TextTes
122                  self.stream.writeln()                  self.stream.writeln()
123              self.stream.writeln("Skipped tests:")              self.stream.writeln("Skipped tests:")
124              for reason, tests in self.skipped_tests.items():              for reason, tests in self.skipped_tests.items():
125                  self.stream.writeln("%s:" % reason)                  self.stream.writeln("  %s:" % reason)
126                  for test in tests:                  for test in tests:
127                      self.stream.writeln("    " + test.id())                      self.stream.writeln("    " + test.id())
128          unittest._TextTestResult.printErrors(self)          unittest._TextTestResult.printErrors(self)
129    
130        def getDescription(self, test):
131            return test.id()
132    
133    
134  class ThubanTestRunner(unittest.TextTestRunner):  class ThubanTestRunner(unittest.TextTestRunner):
135    
# Line 119  class ThubanTestProgram(unittest.TestPro Line 146  class ThubanTestProgram(unittest.TestPro
146    
147      def runTests(self):      def runTests(self):
148          """Extend inherited method so that we use a ThubanTestRunner"""          """Extend inherited method so that we use a ThubanTestRunner"""
         print "ThubanTestProgram.runTests"  
149          self.testRunner = ThubanTestRunner(verbosity = self.verbosity)          self.testRunner = ThubanTestRunner(verbosity = self.verbosity)
150          unittest.TestProgram.runTests(self)          unittest.TestProgram.runTests(self)
151    
152    
153  def run_tests():  def execute_as_testsuite(callable, *args, **kw):
154      """Frontend for unittest.main that prints some additional debug information      """Call callable  with args as if it were the entry point to the test suite
155    
156      After calling unittest.main, run the garbage collector and print      Return watever callable returns.
157      uncollected objects. Also print any un-unsubscribed messages.  
158        This is a helper function for run_tests and runtests.py. Call
159        callable in a try-finally block and run some cleanup and print some
160        additional information in the finally block.
161    
162        The additionaly information include:
163    
164         - A list of uncollected objects (after an explicit garbage
165           collector call)
166    
167         - any unsubscribed messages
168      """      """
169      try:      try:
170          ThubanTestProgram()          return callable(*args, **kw)
171      finally:      finally:
172          # This has to be in a finally clause because unittest.main()          # This has to be in a finally clause because unittest.main()
173          # 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
174          # an appropriate exit code          # an appropriate exit code
175    
176            # Shutdown the postgis server if it's running
177            try:
178                postgissupport.shutdown_test_server()
179            except:
180                traceback.print_exc()
181    
182            # Print additional information
183          print_additional_summary()          print_additional_summary()
184    
185    def run_tests():
186        """Frontend for unittest.main that prints some additional debug information
187    
188        After calling unittest.main, run the garbage collector and print
189        uncollected objects. Also print any un-unsubscribed messages.
190        """
191        execute_as_testsuite(ThubanTestProgram)
192    
193    
194  def print_additional_summary():  def print_additional_summary():
195      """Print some additional summary information after tests have been run"""      """Print some additional summary information after tests have been run"""
196      print_garbage_information()      print_garbage_information()
# Line 150  def print_garbage_information(): Line 203  def print_garbage_information():
203      Run the garbage collector and print uncollected objects. Also print      Run the garbage collector and print uncollected objects. Also print
204      any un-unsubscribed messages.      any un-unsubscribed messages.
205      """      """
206        # this function may be called indirectly from test cases that test
207        # test support modules which do not use anything from thuban itself,
208        # so we call initthuban so that we can import the connector module
209        initthuban()
210      import gc, Thuban.Lib.connector      import gc, Thuban.Lib.connector
211      gc.collect()      gc.collect()
212      if gc.garbage:      if gc.garbage:
# Line 216  class FileLoadTestCase(unittest.TestCase Line 273  class FileLoadTestCase(unittest.TestCase
273      def filename(self):      def filename(self):
274          """Return the name of the test file to use.          """Return the name of the test file to use.
275    
276          The default implementation simply calls self.volatile_file_name          The default implementation simply calls self.temp_file_name with
277          with a basename derived from the class name by stripping off a          a basename derived from the class name by stripping off a
278          leading 'test_' and appending self.file_extension.          leading 'test_' and appending self.file_extension.
279          """          """
280          name = self.__class__.__name__          name = self.__class__.__name__
# Line 248  class FloatComparisonMixin: Line 305  class FloatComparisonMixin:
305    
306      fp_epsilon = 1e-6      fp_epsilon = 1e-6
307      fp_inf = float('1e1000')   # FIXME: hack for infinite      fp_inf = float('1e1000')   # FIXME: hack for infinite
308        
309      def assertFloatEqual(self, test, value, epsilon = None):      def assertFloatEqual(self, test, value, epsilon = None):
310          """Assert equality of test and value with some tolerance.          """Assert equality of test and value with some tolerance.
311    
# Line 270  class FloatComparisonMixin: Line 327  class FloatComparisonMixin:
327          value in test and value is less than the optional parameter          value in test and value is less than the optional parameter
328          epsilon. If epsilon is not given use self.fp_epsilon.          epsilon. If epsilon is not given use self.fp_epsilon.
329          """          """
330            self.assertEquals(len(test), len(value))
331          for i in range(len(test)):          for i in range(len(test)):
332              self.assertFloatEqual(test[i], value[i], epsilon)              self.assertFloatEqual(test[i], value[i], epsilon)
333    
334        def assertPointListEquals(self, test, value):
335            """Assert equality of two lists of lists of tuples of float
336    
337            This assertion is usually used to compare the geometry of shapes
338            as returned by a Shape object's Points() method, hence the name.
339            """
340            for i in range(len(test)):
341                self.assertEquals(len(test[i]), len(value[i]))
342                for j in range(len(test[i])):
343                    self.assertFloatSeqEqual(test[i][j], value[i][j])
344    
345    
346  class SubscriberMixin:  class SubscriberMixin:
347    
348      """Mixin class for tests for messages sent through the Connector      """Mixin class for tests for messages sent through the Connector

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26