[3.10] bpo-13236: Flush the output stream more often in unittest (GH-29864) (GH-29929)
It can prevent some losses when output to buffered stream..
(cherry picked from commit f42a06ba279c916fb67289e47f9bc60dc5dee4ee)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
diff --git a/Lib/unittest/runner.py b/Lib/unittest/runner.py
index 45e7e4c..caf1590 100644
--- a/Lib/unittest/runner.py
+++ b/Lib/unittest/runner.py
@@ -59,6 +59,7 @@ def addSuccess(self, test):
super(TextTestResult, self).addSuccess(test)
if self.showAll:
self.stream.writeln("ok")
+ self.stream.flush()
elif self.dots:
self.stream.write('.')
self.stream.flush()
@@ -67,6 +68,7 @@ def addError(self, test, err):
super(TextTestResult, self).addError(test, err)
if self.showAll:
self.stream.writeln("ERROR")
+ self.stream.flush()
elif self.dots:
self.stream.write('E')
self.stream.flush()
@@ -75,6 +77,7 @@ def addFailure(self, test, err):
super(TextTestResult, self).addFailure(test, err)
if self.showAll:
self.stream.writeln("FAIL")
+ self.stream.flush()
elif self.dots:
self.stream.write('F')
self.stream.flush()
@@ -83,6 +86,7 @@ def addSkip(self, test, reason):
super(TextTestResult, self).addSkip(test, reason)
if self.showAll:
self.stream.writeln("skipped {0!r}".format(reason))
+ self.stream.flush()
elif self.dots:
self.stream.write("s")
self.stream.flush()
@@ -91,6 +95,7 @@ def addExpectedFailure(self, test, err):
super(TextTestResult, self).addExpectedFailure(test, err)
if self.showAll:
self.stream.writeln("expected failure")
+ self.stream.flush()
elif self.dots:
self.stream.write("x")
self.stream.flush()
@@ -99,6 +104,7 @@ def addUnexpectedSuccess(self, test):
super(TextTestResult, self).addUnexpectedSuccess(test)
if self.showAll:
self.stream.writeln("unexpected success")
+ self.stream.flush()
elif self.dots:
self.stream.write("u")
self.stream.flush()
@@ -106,6 +112,7 @@ def addUnexpectedSuccess(self, test):
def printErrors(self):
if self.dots or self.showAll:
self.stream.writeln()
+ self.stream.flush()
self.printErrorList('ERROR', self.errors)
self.printErrorList('FAIL', self.failures)
@@ -115,6 +122,7 @@ def printErrorList(self, flavour, errors):
self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))
self.stream.writeln(self.separator2)
self.stream.writeln("%s" % err)
+ self.stream.flush()
class TextTestRunner(object):
@@ -218,4 +226,5 @@ def run(self, test):
self.stream.writeln(" (%s)" % (", ".join(infos),))
else:
self.stream.write("\n")
+ self.stream.flush()
return result