import unittest import time class TextTestRunner(unittest.TextTestRunner): """This is a wrapper class used to minimize the amount of blank lines printed to stdout. The method ``run`` is modified and it's original source is in Python Standard Library's ``unittest`` module.""" def run(self, test): "Run the given test case or test suite." result = self._makeResult() result.failfast = getattr(self, 'failfast', None) result.buffer = getattr(self, 'buffer', None) startTime = time.time() startTestRun = getattr(result, 'startTestRun', None) if startTestRun is not None: startTestRun() try: test(result) finally: stopTestRun = getattr(result, 'stopTestRun', None) if stopTestRun is not None: stopTestRun() stopTime = time.time() timeTaken = stopTime - startTime result.printErrors() run = result.testsRun self.stream.write("Ran %d test%s in %.3fs " % (run, run != 1 and "s" or "", timeTaken)) expectedFails = unexpectedSuccesses = skipped = 0 try: results = map(len, (result.expectedFailures, result.unexpectedSuccesses, result.skipped)) except AttributeError: pass else: expectedFails, unexpectedSuccesses, skipped = results infos = [] if not result.wasSuccessful(): self.stream.write("FAILED") failed, errored = map(len, (result.failures, result.errors)) if failed: infos.append("failures=%d" % failed) if errored: infos.append("errors=%d" % errored) else: self.stream.write("OK") if skipped: infos.append("skipped=%d" % skipped) if expectedFails: infos.append("expected failures=%d" % expectedFails) if unexpectedSuccesses: infos.append("unexpected successes=%d" % unexpectedSuccesses) if infos: self.stream.writeln(" (%s)" % (", ".join(infos),)) else: self.stream.write("\n") return result