[wwwsearch-commits] r35908 - wwwsearch/mechanize/trunk

jjlee at codespeak.net jjlee at codespeak.net
Wed Dec 20 01:59:47 CET 2006


Author: jjlee
Date: Wed Dec 20 01:59:44 2006
New Revision: 35908

Modified:
   wwwsearch/mechanize/trunk/test.py
Log:
Put in a hack to use text-mode cgitb in unittest tracebacks

Modified: wwwsearch/mechanize/trunk/test.py
==============================================================================
--- wwwsearch/mechanize/trunk/test.py	(original)
+++ wwwsearch/mechanize/trunk/test.py	Wed Dec 20 01:59:44 2006
@@ -8,6 +8,9 @@
 
 """
 
+import cgitb
+#cgitb.enable(format="text")
+
 # Modules containing tests to run -- a test is anything named *Tests, which
 # should be classes deriving from unittest.TestCase.
 MODULE_NAMES = ["test_date", "test_browser", "test_response", "test_cookies",
@@ -16,13 +19,33 @@
                 ]
 
 import sys, os, traceback, logging, glob
-from unittest import defaultTestLoader, TextTestRunner, TestSuite, TestCase
+from unittest import defaultTestLoader, TextTestRunner, TestSuite, TestCase, \
+     _TextTestResult
 
 level = logging.DEBUG
 #level = logging.INFO
 #level = logging.NOTSET
 #logging.getLogger("mechanize").setLevel(level)
 
+
+class CgitbTextResult(_TextTestResult):
+    def _exc_info_to_string(self, err, test):
+        """Converts a sys.exc_info()-style tuple of values into a string."""
+        exctype, value, tb = err
+        # Skip test runner traceback levels
+        while tb and self._is_relevant_tb_level(tb):
+            tb = tb.tb_next
+        if exctype is test.failureException:
+            # Skip assert*() traceback levels
+            length = self._count_relevant_tb_levels(tb)
+            return cgitb.text((exctype, value, tb))
+        return cgitb.text((exctype, value, tb))
+
+class CgitbTextTestRunner(TextTestRunner):
+    def _makeResult(self):
+        return CgitbTextResult(self.stream, self.descriptions, self.verbosity)
+
+
 class TestProgram:
     """A command-line program that runs a set of tests; this is primarily
        for making test modules conveniently executable.
@@ -110,9 +133,12 @@
     # XXX temporary stop-gap to run doctests
 
     # XXXX coverage output seems incorrect ATM
-    run_coverage = '-c' in sys.argv
+    run_coverage = "-c" in sys.argv
     if run_coverage:
         sys.argv.remove("-c")
+    use_cgitb = "-t" in sys.argv
+    if use_cgitb:
+        sys.argv.remove("-t")
 
     # import local copy of Python 2.5 doctest
     assert os.path.isdir("test")
@@ -173,7 +199,10 @@
     import unittest
     test_path = os.path.join(os.path.dirname(sys.argv[0]), "test")
     sys.path.insert(0, test_path)
-    prog = TestProgram(MODULE_NAMES)
+    test_runner = None
+    if use_cgitb:
+        test_runner = CgitbTextTestRunner()
+    prog = TestProgram(MODULE_NAMES, testRunner=test_runner)
     result = prog.runTests()
 
     if run_coverage:


More information about the wwwsearch-commits mailing list