Commit e173d012 authored by R David Murray's avatar R David Murray

Merge #17987: properly document support.captured_xxx.

parents a155d40e 5a33f813
...@@ -362,17 +362,29 @@ The :mod:`test.support` module defines the following functions: ...@@ -362,17 +362,29 @@ The :mod:`test.support` module defines the following functions:
New optional arguments *filters* and *quiet*. New optional arguments *filters* and *quiet*.
.. function:: captured_stdout() .. function:: captured_stdin()
captured_stdout()
captured_stderr()
A context manager that runs the :keyword:`with` statement body using a A context managers that temporarily replaces the named stream with
:class:`io.StringIO` object as sys.stdout. That object can be retrieved :class:`io.StringIO` object.
using the ``as`` clause of the :keyword:`with` statement.
Example use:: Example use with output streams::
with captured_stdout() as s: with captured_stdout() as stdout, captured_stderr() as stderr:
print("hello") print("hello")
assert s.getvalue() == "hello\n" print("error", file=sys.stderr)
assert stdout.getvalue() == "hello\n"
assert stderr.getvalue() == "error\n"
Example use with input stream::
with captured_stdin() as stdin:
stdin.write('hello\n')
stdin.seek(0)
# call test code that consumes from sys.stdin
captured = input()
self.assertEqual(captured, "hello")
.. function:: temp_cwd(name='tempcwd', quiet=False, path=None) .. function:: temp_cwd(name='tempcwd', quiet=False, path=None)
......
...@@ -1186,16 +1186,31 @@ def captured_output(stream_name): ...@@ -1186,16 +1186,31 @@ def captured_output(stream_name):
def captured_stdout(): def captured_stdout():
"""Capture the output of sys.stdout: """Capture the output of sys.stdout:
with captured_stdout() as s: with captured_stdout() as stdout:
print("hello") print("hello")
self.assertEqual(s.getvalue(), "hello") self.assertEqual(stdout.getvalue(), "hello\n")
""" """
return captured_output("stdout") return captured_output("stdout")
def captured_stderr(): def captured_stderr():
"""Capture the output of sys.stderr:
with captured_stderr() as stderr:
print("hello", file=sys.stderr)
self.assertEqual(stderr.getvalue(), "hello\n")
"""
return captured_output("stderr") return captured_output("stderr")
def captured_stdin(): def captured_stdin():
"""Capture the input to sys.stdin:
with captured_stdin() as stdin:
stdin.write('hello\n')
stdin.seek(0)
# call test code that consumes from sys.stdin
captured = input()
self.assertEqual(captured, "hello")
"""
return captured_output("stdin") return captured_output("stdin")
......
...@@ -130,19 +130,22 @@ class TestSupport(unittest.TestCase): ...@@ -130,19 +130,22 @@ class TestSupport(unittest.TestCase):
self.assertNotIn("bar", sys.path) self.assertNotIn("bar", sys.path)
def test_captured_stdout(self): def test_captured_stdout(self):
with support.captured_stdout() as s: with support.captured_stdout() as stdout:
print("hello") print("hello")
self.assertEqual(s.getvalue(), "hello\n") self.assertEqual(stdout.getvalue(), "hello\n")
def test_captured_stderr(self): def test_captured_stderr(self):
with support.captured_stderr() as s: with support.captured_stderr() as stderr:
print("hello", file=sys.stderr) print("hello", file=sys.stderr)
self.assertEqual(s.getvalue(), "hello\n") self.assertEqual(stderr.getvalue(), "hello\n")
def test_captured_stdin(self): def test_captured_stdin(self):
with support.captured_stdin() as s: with support.captured_stdin() as stdin:
print("hello", file=sys.stdin) stdin.write('hello\n')
self.assertEqual(s.getvalue(), "hello\n") stdin.seek(0)
# call test code that consumes from sys.stdin
captured = input()
self.assertEqual(captured, "hello")
def test_gc_collect(self): def test_gc_collect(self):
support.gc_collect() support.gc_collect()
......
...@@ -66,6 +66,7 @@ Luigi Ballabio ...@@ -66,6 +66,7 @@ Luigi Ballabio
Jeff Balogh Jeff Balogh
Manuel Balsera Manuel Balsera
Matt Bandy Matt Bandy
Dmi Baranov
Michael J. Barber Michael J. Barber
Daniel Barclay Daniel Barclay
Nicolas Bareil Nicolas Bareil
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment