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