|
@@ -0,0 +1,69 @@
|
|
|
|
|
+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
|