diff -r 7c717d423160 Lib/unittest/runner.py --- a/Lib/unittest/runner.py Wed Dec 19 15:28:46 2012 -0600 +++ b/Lib/unittest/runner.py Wed Jan 02 18:33:15 2013 -0600 @@ -36,7 +36,10 @@ def __init__(self, stream, descriptions, verbosity): super(TextTestResult, self).__init__(stream, descriptions, verbosity) - self.stream = stream + if hasattr(stream, "writeln"): + self.stream = stream + else: + self.stream = _WritelnDecorator(stream) self.showAll = verbosity > 1 self.dots = verbosity == 1 self.descriptions = descriptions diff -r 7c717d423160 Lib/unittest/test/test_result.py --- a/Lib/unittest/test/test_result.py Wed Dec 19 15:28:46 2012 -0600 +++ b/Lib/unittest/test/test_result.py Wed Jan 02 18:33:15 2013 -0600 @@ -294,6 +294,23 @@ self.assertTrue(result.failfast) result = runner.run(test) + def testStreamDecoratedWithWriteln(self): + stream_without_writeln = io.StringIO() + result = unittest.TextTestResult(stream=stream_without_writeln, + descriptions=True, verbosity=2) + result.stream.writeln('test') + self.assertEqual(result.stream.getvalue(), 'test\n') + with self.assertRaises(AttributeError): + stream_without_writeln.writeln + + def testStreamWithWritelnIsNotDecorated(self): + stream_with_writeln = io.StringIO() + stream_with_writeln.writeln = stream_with_writeln.write + result = unittest.TextTestResult(stream=stream_with_writeln, + descriptions=True, verbosity=2) + self.assertFalse( + isinstance(result.stream, unittest.runner._WritelnDecorator)) + classDict = dict(unittest.TestResult.__dict__) for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess',