runner.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import unittest
  2. import time
  3. class TextTestRunner(unittest.TextTestRunner):
  4. """This is a wrapper class used to minimize the amount of blank lines
  5. printed to stdout. The method ``run`` is modified and it's original source
  6. is in Python Standard Library's ``unittest`` module."""
  7. def run(self, test):
  8. "Run the given test case or test suite."
  9. result = self._makeResult()
  10. result.failfast = getattr(self, 'failfast', None)
  11. result.buffer = getattr(self, 'buffer', None)
  12. startTime = time.time()
  13. startTestRun = getattr(result, 'startTestRun', None)
  14. if startTestRun is not None:
  15. startTestRun()
  16. try:
  17. test(result)
  18. finally:
  19. stopTestRun = getattr(result, 'stopTestRun', None)
  20. if stopTestRun is not None:
  21. stopTestRun()
  22. stopTime = time.time()
  23. timeTaken = stopTime - startTime
  24. result.printErrors()
  25. run = result.testsRun
  26. self.stream.write("Ran %d test%s in %.3fs " %
  27. (run, run != 1 and "s" or "", timeTaken))
  28. expectedFails = unexpectedSuccesses = skipped = 0
  29. try:
  30. results = map(len, (result.expectedFailures,
  31. result.unexpectedSuccesses,
  32. result.skipped))
  33. except AttributeError:
  34. pass
  35. else:
  36. expectedFails, unexpectedSuccesses, skipped = results
  37. infos = []
  38. if not result.wasSuccessful():
  39. self.stream.write("FAILED")
  40. failed, errored = map(len, (result.failures, result.errors))
  41. if failed:
  42. infos.append("failures=%d" % failed)
  43. if errored:
  44. infos.append("errors=%d" % errored)
  45. else:
  46. self.stream.write("OK")
  47. if skipped:
  48. infos.append("skipped=%d" % skipped)
  49. if expectedFails:
  50. infos.append("expected failures=%d" % expectedFails)
  51. if unexpectedSuccesses:
  52. infos.append("unexpected successes=%d" % unexpectedSuccesses)
  53. if infos:
  54. self.stream.writeln(" (%s)" % (", ".join(infos),))
  55. else:
  56. self.stream.write("\n")
  57. return result