Use ImportError handling to import _TextTestResult which moved from
authorZac Medico <zmedico@gentoo.org>
Thu, 10 Dec 2009 01:04:18 +0000 (01:04 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 10 Dec 2009 01:04:18 +0000 (01:04 -0000)
unittest to unittest.runner in python-2.7. Thanks to Arfrever for the
suggestion. (trunk r14972)

svn path=/main/branches/2.1.7/; revision=15006

pym/portage/tests/__init__.py

index 0382a2fc1e772155b1901549b3a76b7ec01020cf..fec1e238ea85f01b924bded910ce4482ce6be6e8 100644 (file)
@@ -6,7 +6,11 @@
 import sys
 import time
 import unittest
-from unittest import TestResult
+
+try:
+       from unittest.runner import _TextTestResult # new in python-2.7
+except ImportError:
+       from unittest import _TextTestResult
 
 from portage import os
 from portage import _encodings
@@ -70,26 +74,17 @@ def getTests(path, base_path):
                result.append(unittest.TestLoader().loadTestsFromModule(mod))
        return result
 
-class TextTestResult(TestResult):
+class TextTestResult(_TextTestResult):
        """
-       We need a subclass of unittest.TestResult to handle tests with TODO
-       Most of this class is copied from the unittest._TextTestResult that's
-       included with python-2.6 (but not included with python-2.7).
+       We need a subclass of unittest._TextTestResult to handle tests with TODO
 
        This just adds an addTodo method that can be used to add tests
        that are marked TODO; these can be displayed later
        by the test runner.
        """
 
-       separator1 = '=' * 70
-       separator2 = '-' * 70
-
        def __init__(self, stream, descriptions, verbosity):
-               unittest.TestResult.__init__(self)
-               self.stream = stream
-               self.showAll = verbosity > 1
-               self.dots = verbosity == 1
-               self.descriptions = descriptions
+               super(TextTestResult, self).__init__(stream, descriptions, verbosity)
                self.todoed = []
 
        def addTodo(self, test, info):
@@ -106,50 +101,6 @@ class TextTestResult(TestResult):
                        self.printErrorList('FAIL', self.failures)
                        self.printErrorList('TODO', self.todoed)
 
-       def getDescription(self, test):
-               if self.descriptions:
-                       return test.shortDescription() or str(test)
-               else:
-                       return str(test)
-
-       def startTest(self, test):
-               TestResult.startTest(self, test)
-               if self.showAll:
-                       self.stream.write(self.getDescription(test))
-                       self.stream.write(" ... ")
-                       self.stream.flush()
-
-       def addSuccess(self, test):
-               TestResult.addSuccess(self, test)
-               if self.showAll:
-                       self.stream.writeln("ok")
-               elif self.dots:
-                       self.stream.write('.')
-                       self.stream.flush()
-
-       def addError(self, test, err):
-               TestResult.addError(self, test, err)
-               if self.showAll:
-                       self.stream.writeln("ERROR")
-               elif self.dots:
-                       self.stream.write('E')
-                       self.stream.flush()
-
-       def addFailure(self, test, err):
-               TestResult.addFailure(self, test, err)
-               if self.showAll:
-                       self.stream.writeln("FAIL")
-               elif self.dots:
-                       self.stream.write('F')
-                       self.stream.flush()
-
-       def printErrorList(self, flavour, errors):
-               for test, err in errors:
-                       self.stream.writeln(self.separator1)
-                       self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))
-                       self.stream.writeln(self.separator2)
-                       self.stream.writeln("%s" % err)
-
 class TestCase(unittest.TestCase):
        """
        We need a way to mark a unit test as "ok to fail"