test_iostream.py revision 12391
112391Sjason@lowepower.comfrom pybind11_tests import iostream as m 212391Sjason@lowepower.comimport sys 312391Sjason@lowepower.com 412391Sjason@lowepower.comfrom contextlib import contextmanager 512391Sjason@lowepower.com 612391Sjason@lowepower.comtry: 712391Sjason@lowepower.com # Python 3 812391Sjason@lowepower.com from io import StringIO 912391Sjason@lowepower.comexcept ImportError: 1012391Sjason@lowepower.com # Python 2 1112391Sjason@lowepower.com try: 1212391Sjason@lowepower.com from cStringIO import StringIO 1312391Sjason@lowepower.com except ImportError: 1412391Sjason@lowepower.com from StringIO import StringIO 1512391Sjason@lowepower.com 1612391Sjason@lowepower.comtry: 1712391Sjason@lowepower.com # Python 3.4 1812391Sjason@lowepower.com from contextlib import redirect_stdout 1912391Sjason@lowepower.comexcept ImportError: 2012391Sjason@lowepower.com @contextmanager 2112391Sjason@lowepower.com def redirect_stdout(target): 2212391Sjason@lowepower.com original = sys.stdout 2312391Sjason@lowepower.com sys.stdout = target 2412391Sjason@lowepower.com yield 2512391Sjason@lowepower.com sys.stdout = original 2612391Sjason@lowepower.com 2712391Sjason@lowepower.comtry: 2812391Sjason@lowepower.com # Python 3.5 2912391Sjason@lowepower.com from contextlib import redirect_stderr 3012391Sjason@lowepower.comexcept ImportError: 3112391Sjason@lowepower.com @contextmanager 3212391Sjason@lowepower.com def redirect_stderr(target): 3312391Sjason@lowepower.com original = sys.stderr 3412391Sjason@lowepower.com sys.stderr = target 3512391Sjason@lowepower.com yield 3612391Sjason@lowepower.com sys.stderr = original 3712391Sjason@lowepower.com 3812391Sjason@lowepower.com 3912391Sjason@lowepower.comdef test_captured(capsys): 4012391Sjason@lowepower.com msg = "I've been redirected to Python, I hope!" 4112391Sjason@lowepower.com m.captured_output(msg) 4212391Sjason@lowepower.com stdout, stderr = capsys.readouterr() 4312391Sjason@lowepower.com assert stdout == msg 4412391Sjason@lowepower.com assert stderr == '' 4512391Sjason@lowepower.com 4612391Sjason@lowepower.com m.captured_output_default(msg) 4712391Sjason@lowepower.com stdout, stderr = capsys.readouterr() 4812391Sjason@lowepower.com assert stdout == msg 4912391Sjason@lowepower.com assert stderr == '' 5012391Sjason@lowepower.com 5112391Sjason@lowepower.com m.captured_err(msg) 5212391Sjason@lowepower.com stdout, stderr = capsys.readouterr() 5312391Sjason@lowepower.com assert stdout == '' 5412391Sjason@lowepower.com assert stderr == msg 5512391Sjason@lowepower.com 5612391Sjason@lowepower.com 5712391Sjason@lowepower.comdef test_guard_capture(capsys): 5812391Sjason@lowepower.com msg = "I've been redirected to Python, I hope!" 5912391Sjason@lowepower.com m.guard_output(msg) 6012391Sjason@lowepower.com stdout, stderr = capsys.readouterr() 6112391Sjason@lowepower.com assert stdout == msg 6212391Sjason@lowepower.com assert stderr == '' 6312391Sjason@lowepower.com 6412391Sjason@lowepower.com 6512391Sjason@lowepower.comdef test_series_captured(capture): 6612391Sjason@lowepower.com with capture: 6712391Sjason@lowepower.com m.captured_output("a") 6812391Sjason@lowepower.com m.captured_output("b") 6912391Sjason@lowepower.com assert capture == "ab" 7012391Sjason@lowepower.com 7112391Sjason@lowepower.com 7212391Sjason@lowepower.comdef test_flush(capfd): 7312391Sjason@lowepower.com msg = "(not flushed)" 7412391Sjason@lowepower.com msg2 = "(flushed)" 7512391Sjason@lowepower.com 7612391Sjason@lowepower.com with m.ostream_redirect(): 7712391Sjason@lowepower.com m.noisy_function(msg, flush=False) 7812391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 7912391Sjason@lowepower.com assert stdout == '' 8012391Sjason@lowepower.com 8112391Sjason@lowepower.com m.noisy_function(msg2, flush=True) 8212391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 8312391Sjason@lowepower.com assert stdout == msg + msg2 8412391Sjason@lowepower.com 8512391Sjason@lowepower.com m.noisy_function(msg, flush=False) 8612391Sjason@lowepower.com 8712391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 8812391Sjason@lowepower.com assert stdout == msg 8912391Sjason@lowepower.com 9012391Sjason@lowepower.com 9112391Sjason@lowepower.comdef test_not_captured(capfd): 9212391Sjason@lowepower.com msg = "Something that should not show up in log" 9312391Sjason@lowepower.com stream = StringIO() 9412391Sjason@lowepower.com with redirect_stdout(stream): 9512391Sjason@lowepower.com m.raw_output(msg) 9612391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 9712391Sjason@lowepower.com assert stdout == msg 9812391Sjason@lowepower.com assert stderr == '' 9912391Sjason@lowepower.com assert stream.getvalue() == '' 10012391Sjason@lowepower.com 10112391Sjason@lowepower.com stream = StringIO() 10212391Sjason@lowepower.com with redirect_stdout(stream): 10312391Sjason@lowepower.com m.captured_output(msg) 10412391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 10512391Sjason@lowepower.com assert stdout == '' 10612391Sjason@lowepower.com assert stderr == '' 10712391Sjason@lowepower.com assert stream.getvalue() == msg 10812391Sjason@lowepower.com 10912391Sjason@lowepower.com 11012391Sjason@lowepower.comdef test_err(capfd): 11112391Sjason@lowepower.com msg = "Something that should not show up in log" 11212391Sjason@lowepower.com stream = StringIO() 11312391Sjason@lowepower.com with redirect_stderr(stream): 11412391Sjason@lowepower.com m.raw_err(msg) 11512391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 11612391Sjason@lowepower.com assert stdout == '' 11712391Sjason@lowepower.com assert stderr == msg 11812391Sjason@lowepower.com assert stream.getvalue() == '' 11912391Sjason@lowepower.com 12012391Sjason@lowepower.com stream = StringIO() 12112391Sjason@lowepower.com with redirect_stderr(stream): 12212391Sjason@lowepower.com m.captured_err(msg) 12312391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 12412391Sjason@lowepower.com assert stdout == '' 12512391Sjason@lowepower.com assert stderr == '' 12612391Sjason@lowepower.com assert stream.getvalue() == msg 12712391Sjason@lowepower.com 12812391Sjason@lowepower.com 12912391Sjason@lowepower.comdef test_multi_captured(capfd): 13012391Sjason@lowepower.com stream = StringIO() 13112391Sjason@lowepower.com with redirect_stdout(stream): 13212391Sjason@lowepower.com m.captured_output("a") 13312391Sjason@lowepower.com m.raw_output("b") 13412391Sjason@lowepower.com m.captured_output("c") 13512391Sjason@lowepower.com m.raw_output("d") 13612391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 13712391Sjason@lowepower.com assert stdout == 'bd' 13812391Sjason@lowepower.com assert stream.getvalue() == 'ac' 13912391Sjason@lowepower.com 14012391Sjason@lowepower.com 14112391Sjason@lowepower.comdef test_dual(capsys): 14212391Sjason@lowepower.com m.captured_dual("a", "b") 14312391Sjason@lowepower.com stdout, stderr = capsys.readouterr() 14412391Sjason@lowepower.com assert stdout == "a" 14512391Sjason@lowepower.com assert stderr == "b" 14612391Sjason@lowepower.com 14712391Sjason@lowepower.com 14812391Sjason@lowepower.comdef test_redirect(capfd): 14912391Sjason@lowepower.com msg = "Should not be in log!" 15012391Sjason@lowepower.com stream = StringIO() 15112391Sjason@lowepower.com with redirect_stdout(stream): 15212391Sjason@lowepower.com m.raw_output(msg) 15312391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 15412391Sjason@lowepower.com assert stdout == msg 15512391Sjason@lowepower.com assert stream.getvalue() == '' 15612391Sjason@lowepower.com 15712391Sjason@lowepower.com stream = StringIO() 15812391Sjason@lowepower.com with redirect_stdout(stream): 15912391Sjason@lowepower.com with m.ostream_redirect(): 16012391Sjason@lowepower.com m.raw_output(msg) 16112391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 16212391Sjason@lowepower.com assert stdout == '' 16312391Sjason@lowepower.com assert stream.getvalue() == msg 16412391Sjason@lowepower.com 16512391Sjason@lowepower.com stream = StringIO() 16612391Sjason@lowepower.com with redirect_stdout(stream): 16712391Sjason@lowepower.com m.raw_output(msg) 16812391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 16912391Sjason@lowepower.com assert stdout == msg 17012391Sjason@lowepower.com assert stream.getvalue() == '' 17112391Sjason@lowepower.com 17212391Sjason@lowepower.com 17312391Sjason@lowepower.comdef test_redirect_err(capfd): 17412391Sjason@lowepower.com msg = "StdOut" 17512391Sjason@lowepower.com msg2 = "StdErr" 17612391Sjason@lowepower.com 17712391Sjason@lowepower.com stream = StringIO() 17812391Sjason@lowepower.com with redirect_stderr(stream): 17912391Sjason@lowepower.com with m.ostream_redirect(stdout=False): 18012391Sjason@lowepower.com m.raw_output(msg) 18112391Sjason@lowepower.com m.raw_err(msg2) 18212391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 18312391Sjason@lowepower.com assert stdout == msg 18412391Sjason@lowepower.com assert stderr == '' 18512391Sjason@lowepower.com assert stream.getvalue() == msg2 18612391Sjason@lowepower.com 18712391Sjason@lowepower.com 18812391Sjason@lowepower.comdef test_redirect_both(capfd): 18912391Sjason@lowepower.com msg = "StdOut" 19012391Sjason@lowepower.com msg2 = "StdErr" 19112391Sjason@lowepower.com 19212391Sjason@lowepower.com stream = StringIO() 19312391Sjason@lowepower.com stream2 = StringIO() 19412391Sjason@lowepower.com with redirect_stdout(stream): 19512391Sjason@lowepower.com with redirect_stderr(stream2): 19612391Sjason@lowepower.com with m.ostream_redirect(): 19712391Sjason@lowepower.com m.raw_output(msg) 19812391Sjason@lowepower.com m.raw_err(msg2) 19912391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 20012391Sjason@lowepower.com assert stdout == '' 20112391Sjason@lowepower.com assert stderr == '' 20212391Sjason@lowepower.com assert stream.getvalue() == msg 20312391Sjason@lowepower.com assert stream2.getvalue() == msg2 204