]> granicus.if.org Git - python/commitdiff
unittest.TestResult can now be used with the TextTestRunner. TextTestRunner compatibl...
authorMichael Foord <fuzzyman@voidspace.org.uk>
Tue, 23 Feb 2010 17:00:53 +0000 (17:00 +0000)
committerMichael Foord <fuzzyman@voidspace.org.uk>
Tue, 23 Feb 2010 17:00:53 +0000 (17:00 +0000)
Lib/test/test_unittest.py
Lib/unittest/result.py
Lib/unittest/runner.py

index d009bf9ce87c31626d96f2ffb341070bbc2e421a..048f67b0971f7509a41170119f030c9249799806 100644 (file)
@@ -2067,8 +2067,16 @@ class Test_TestResult(TestCase):
                 'docstring.'))
 
 classDict = dict(unittest.TestResult.__dict__)
-for m in 'addSkip', 'addExpectedFailure', 'addUnexpectedSuccess':
+for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess',
+           '__init__'):
     del classDict[m]
+
+def __init__(self, stream=None, descriptions=None, verbosity=None):
+    self.failures = []
+    self.errors = []
+    self.testsRun = 0
+    self.shouldStop = False
+classDict['__init__'] = __init__
 OldResult = type('OldResult', (object,), classDict)
 
 class Test_OldTestResult(unittest.TestCase):
@@ -2113,6 +2121,15 @@ class Test_OldTestResult(unittest.TestCase):
                 pass
         self.assertOldResultWarning(Test('testFoo'), 0)
 
+    def testOldResultWithRunner(self):
+        class Test(unittest.TestCase):
+            def testFoo(self):
+                pass
+        runner = unittest.TextTestRunner(resultclass=OldResult,
+                                          stream=StringIO())
+        # This will raise an exception if TextTestRunner can't handle old
+        # test result objects
+        runner.run(Test('testFoo'))
 
 ### Support code for Test_TestCase
 ################################################################
index bb2a47cf4dbdc82e253235d6113b63d3d8735cde..22e825ac61a671c60589d4382d65b3e2fb57d377 100644 (file)
@@ -16,7 +16,7 @@ class TestResult(object):
     contain tuples of (testcase, exceptioninfo), where exceptioninfo is the
     formatted traceback of the error that occurred.
     """
-    def __init__(self):
+    def __init__(self, stream=None, descriptions=None, verbosity=None):
         self.failures = []
         self.errors = []
         self.testsRun = 0
@@ -25,6 +25,9 @@ class TestResult(object):
         self.unexpectedSuccesses = []
         self.shouldStop = False
 
+    def printErrors(self):
+        "Called by TestRunner after test run"
+
     def startTest(self, test):
         "Called when the given test is about to be run"
         self.testsRun += 1
index cbec296927cc7864677c5b2a23ac204686935da0..2fe01f67271040c5b107748d63aa81f89188a36a 100644 (file)
@@ -148,15 +148,22 @@ class TextTestRunner(object):
         stopTime = time.time()
         timeTaken = stopTime - startTime
         result.printErrors()
-        self.stream.writeln(result.separator2)
+        if hasattr(result, 'separator2'):
+            self.stream.writeln(result.separator2)
         run = result.testsRun
         self.stream.writeln("Ran %d test%s in %.3fs" %
                             (run, run != 1 and "s" or "", timeTaken))
         self.stream.writeln()
-        results = map(len, (result.expectedFailures,
-                            result.unexpectedSuccesses,
-                            result.skipped))
-        expectedFails, unexpectedSuccesses, skipped = results
+
+        expectedFails = unexpectedSuccesses = skipped = 0
+        try:
+            results = map(len, (result.expectedFailures,
+                                result.unexpectedSuccesses,
+                                result.skipped))
+            expectedFails, unexpectedSuccesses, skipped = results
+        except AttributeError:
+            pass
+
         infos = []
         if not result.wasSuccessful():
             self.stream.write("FAILED")