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 5714299Sbbruce@ucdavis.edudef test_captured_large_string(capsys): 5814299Sbbruce@ucdavis.edu # Make this bigger than the buffer used on the C++ side: 1024 chars 5914299Sbbruce@ucdavis.edu msg = "I've been redirected to Python, I hope!" 6014299Sbbruce@ucdavis.edu msg = msg * (1024 // len(msg) + 1) 6114299Sbbruce@ucdavis.edu 6214299Sbbruce@ucdavis.edu m.captured_output_default(msg) 6314299Sbbruce@ucdavis.edu stdout, stderr = capsys.readouterr() 6414299Sbbruce@ucdavis.edu assert stdout == msg 6514299Sbbruce@ucdavis.edu assert stderr == '' 6614299Sbbruce@ucdavis.edu 6714299Sbbruce@ucdavis.edu 6812391Sjason@lowepower.comdef test_guard_capture(capsys): 6912391Sjason@lowepower.com msg = "I've been redirected to Python, I hope!" 7012391Sjason@lowepower.com m.guard_output(msg) 7112391Sjason@lowepower.com stdout, stderr = capsys.readouterr() 7212391Sjason@lowepower.com assert stdout == msg 7312391Sjason@lowepower.com assert stderr == '' 7412391Sjason@lowepower.com 7512391Sjason@lowepower.com 7612391Sjason@lowepower.comdef test_series_captured(capture): 7712391Sjason@lowepower.com with capture: 7812391Sjason@lowepower.com m.captured_output("a") 7912391Sjason@lowepower.com m.captured_output("b") 8012391Sjason@lowepower.com assert capture == "ab" 8112391Sjason@lowepower.com 8212391Sjason@lowepower.com 8312391Sjason@lowepower.comdef test_flush(capfd): 8412391Sjason@lowepower.com msg = "(not flushed)" 8512391Sjason@lowepower.com msg2 = "(flushed)" 8612391Sjason@lowepower.com 8712391Sjason@lowepower.com with m.ostream_redirect(): 8812391Sjason@lowepower.com m.noisy_function(msg, flush=False) 8912391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 9012391Sjason@lowepower.com assert stdout == '' 9112391Sjason@lowepower.com 9212391Sjason@lowepower.com m.noisy_function(msg2, flush=True) 9312391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 9412391Sjason@lowepower.com assert stdout == msg + msg2 9512391Sjason@lowepower.com 9612391Sjason@lowepower.com m.noisy_function(msg, flush=False) 9712391Sjason@lowepower.com 9812391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 9912391Sjason@lowepower.com assert stdout == msg 10012391Sjason@lowepower.com 10112391Sjason@lowepower.com 10212391Sjason@lowepower.comdef test_not_captured(capfd): 10312391Sjason@lowepower.com msg = "Something that should not show up in log" 10412391Sjason@lowepower.com stream = StringIO() 10512391Sjason@lowepower.com with redirect_stdout(stream): 10612391Sjason@lowepower.com m.raw_output(msg) 10712391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 10812391Sjason@lowepower.com assert stdout == msg 10912391Sjason@lowepower.com assert stderr == '' 11012391Sjason@lowepower.com assert stream.getvalue() == '' 11112391Sjason@lowepower.com 11212391Sjason@lowepower.com stream = StringIO() 11312391Sjason@lowepower.com with redirect_stdout(stream): 11412391Sjason@lowepower.com m.captured_output(msg) 11512391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 11612391Sjason@lowepower.com assert stdout == '' 11712391Sjason@lowepower.com assert stderr == '' 11812391Sjason@lowepower.com assert stream.getvalue() == msg 11912391Sjason@lowepower.com 12012391Sjason@lowepower.com 12112391Sjason@lowepower.comdef test_err(capfd): 12212391Sjason@lowepower.com msg = "Something that should not show up in log" 12312391Sjason@lowepower.com stream = StringIO() 12412391Sjason@lowepower.com with redirect_stderr(stream): 12512391Sjason@lowepower.com m.raw_err(msg) 12612391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 12712391Sjason@lowepower.com assert stdout == '' 12812391Sjason@lowepower.com assert stderr == msg 12912391Sjason@lowepower.com assert stream.getvalue() == '' 13012391Sjason@lowepower.com 13112391Sjason@lowepower.com stream = StringIO() 13212391Sjason@lowepower.com with redirect_stderr(stream): 13312391Sjason@lowepower.com m.captured_err(msg) 13412391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 13512391Sjason@lowepower.com assert stdout == '' 13612391Sjason@lowepower.com assert stderr == '' 13712391Sjason@lowepower.com assert stream.getvalue() == msg 13812391Sjason@lowepower.com 13912391Sjason@lowepower.com 14012391Sjason@lowepower.comdef test_multi_captured(capfd): 14112391Sjason@lowepower.com stream = StringIO() 14212391Sjason@lowepower.com with redirect_stdout(stream): 14312391Sjason@lowepower.com m.captured_output("a") 14412391Sjason@lowepower.com m.raw_output("b") 14512391Sjason@lowepower.com m.captured_output("c") 14612391Sjason@lowepower.com m.raw_output("d") 14712391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 14812391Sjason@lowepower.com assert stdout == 'bd' 14912391Sjason@lowepower.com assert stream.getvalue() == 'ac' 15012391Sjason@lowepower.com 15112391Sjason@lowepower.com 15212391Sjason@lowepower.comdef test_dual(capsys): 15312391Sjason@lowepower.com m.captured_dual("a", "b") 15412391Sjason@lowepower.com stdout, stderr = capsys.readouterr() 15512391Sjason@lowepower.com assert stdout == "a" 15612391Sjason@lowepower.com assert stderr == "b" 15712391Sjason@lowepower.com 15812391Sjason@lowepower.com 15912391Sjason@lowepower.comdef test_redirect(capfd): 16012391Sjason@lowepower.com msg = "Should not be in log!" 16112391Sjason@lowepower.com stream = StringIO() 16212391Sjason@lowepower.com with redirect_stdout(stream): 16312391Sjason@lowepower.com m.raw_output(msg) 16412391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 16512391Sjason@lowepower.com assert stdout == msg 16612391Sjason@lowepower.com assert stream.getvalue() == '' 16712391Sjason@lowepower.com 16812391Sjason@lowepower.com stream = StringIO() 16912391Sjason@lowepower.com with redirect_stdout(stream): 17012391Sjason@lowepower.com with m.ostream_redirect(): 17112391Sjason@lowepower.com m.raw_output(msg) 17212391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 17312391Sjason@lowepower.com assert stdout == '' 17412391Sjason@lowepower.com assert stream.getvalue() == msg 17512391Sjason@lowepower.com 17612391Sjason@lowepower.com stream = StringIO() 17712391Sjason@lowepower.com with redirect_stdout(stream): 17812391Sjason@lowepower.com m.raw_output(msg) 17912391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 18012391Sjason@lowepower.com assert stdout == msg 18112391Sjason@lowepower.com assert stream.getvalue() == '' 18212391Sjason@lowepower.com 18312391Sjason@lowepower.com 18412391Sjason@lowepower.comdef test_redirect_err(capfd): 18512391Sjason@lowepower.com msg = "StdOut" 18612391Sjason@lowepower.com msg2 = "StdErr" 18712391Sjason@lowepower.com 18812391Sjason@lowepower.com stream = StringIO() 18912391Sjason@lowepower.com with redirect_stderr(stream): 19012391Sjason@lowepower.com with m.ostream_redirect(stdout=False): 19112391Sjason@lowepower.com m.raw_output(msg) 19212391Sjason@lowepower.com m.raw_err(msg2) 19312391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 19412391Sjason@lowepower.com assert stdout == msg 19512391Sjason@lowepower.com assert stderr == '' 19612391Sjason@lowepower.com assert stream.getvalue() == msg2 19712391Sjason@lowepower.com 19812391Sjason@lowepower.com 19912391Sjason@lowepower.comdef test_redirect_both(capfd): 20012391Sjason@lowepower.com msg = "StdOut" 20112391Sjason@lowepower.com msg2 = "StdErr" 20212391Sjason@lowepower.com 20312391Sjason@lowepower.com stream = StringIO() 20412391Sjason@lowepower.com stream2 = StringIO() 20512391Sjason@lowepower.com with redirect_stdout(stream): 20612391Sjason@lowepower.com with redirect_stderr(stream2): 20712391Sjason@lowepower.com with m.ostream_redirect(): 20812391Sjason@lowepower.com m.raw_output(msg) 20912391Sjason@lowepower.com m.raw_err(msg2) 21012391Sjason@lowepower.com stdout, stderr = capfd.readouterr() 21112391Sjason@lowepower.com assert stdout == '' 21212391Sjason@lowepower.com assert stderr == '' 21312391Sjason@lowepower.com assert stream.getvalue() == msg 21412391Sjason@lowepower.com assert stream2.getvalue() == msg2 215