"cupy_backends/cuda/libs/cusparse.pyx" did not exist on "93bf084b3332e0d58c118590cc1722af6c810a8e"
test_iostream.py 5.66 KB
Newer Older
1
# -*- coding: utf-8 -*-
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pybind11_tests import iostream as m
import sys

from contextlib import contextmanager

try:
    # Python 3
    from io import StringIO
except ImportError:
    # Python 2
    try:
        from cStringIO import StringIO
    except ImportError:
        from StringIO import StringIO

try:
    # Python 3.4
    from contextlib import redirect_stdout
except ImportError:
21

22
23
24
25
26
27
28
    @contextmanager
    def redirect_stdout(target):
        original = sys.stdout
        sys.stdout = target
        yield
        sys.stdout = original

29

30
31
32
33
try:
    # Python 3.5
    from contextlib import redirect_stderr
except ImportError:
34

35
36
37
38
39
40
41
42
43
44
45
46
47
    @contextmanager
    def redirect_stderr(target):
        original = sys.stderr
        sys.stderr = target
        yield
        sys.stderr = original


def test_captured(capsys):
    msg = "I've been redirected to Python, I hope!"
    m.captured_output(msg)
    stdout, stderr = capsys.readouterr()
    assert stdout == msg
48
    assert stderr == ""
49
50
51
52

    m.captured_output_default(msg)
    stdout, stderr = capsys.readouterr()
    assert stdout == msg
53
    assert stderr == ""
54
55
56

    m.captured_err(msg)
    stdout, stderr = capsys.readouterr()
57
    assert stdout == ""
58
59
    assert stderr == msg

60

61
62
63
64
65
66
67
68
def test_captured_large_string(capsys):
    # Make this bigger than the buffer used on the C++ side: 1024 chars
    msg = "I've been redirected to Python, I hope!"
    msg = msg * (1024 // len(msg) + 1)

    m.captured_output_default(msg)
    stdout, stderr = capsys.readouterr()
    assert stdout == msg
69
    assert stderr == ""
70

71
72
73
74
75
76

def test_guard_capture(capsys):
    msg = "I've been redirected to Python, I hope!"
    m.guard_output(msg)
    stdout, stderr = capsys.readouterr()
    assert stdout == msg
77
    assert stderr == ""
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93


def test_series_captured(capture):
    with capture:
        m.captured_output("a")
        m.captured_output("b")
    assert capture == "ab"


def test_flush(capfd):
    msg = "(not flushed)"
    msg2 = "(flushed)"

    with m.ostream_redirect():
        m.noisy_function(msg, flush=False)
        stdout, stderr = capfd.readouterr()
94
        assert stdout == ""
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112

        m.noisy_function(msg2, flush=True)
        stdout, stderr = capfd.readouterr()
        assert stdout == msg + msg2

        m.noisy_function(msg, flush=False)

    stdout, stderr = capfd.readouterr()
    assert stdout == msg


def test_not_captured(capfd):
    msg = "Something that should not show up in log"
    stream = StringIO()
    with redirect_stdout(stream):
        m.raw_output(msg)
    stdout, stderr = capfd.readouterr()
    assert stdout == msg
113
114
    assert stderr == ""
    assert stream.getvalue() == ""
115
116
117
118
119

    stream = StringIO()
    with redirect_stdout(stream):
        m.captured_output(msg)
    stdout, stderr = capfd.readouterr()
120
121
    assert stdout == ""
    assert stderr == ""
122
123
124
125
126
127
128
129
130
    assert stream.getvalue() == msg


def test_err(capfd):
    msg = "Something that should not show up in log"
    stream = StringIO()
    with redirect_stderr(stream):
        m.raw_err(msg)
    stdout, stderr = capfd.readouterr()
131
    assert stdout == ""
132
    assert stderr == msg
133
    assert stream.getvalue() == ""
134
135
136
137
138

    stream = StringIO()
    with redirect_stderr(stream):
        m.captured_err(msg)
    stdout, stderr = capfd.readouterr()
139
140
    assert stdout == ""
    assert stderr == ""
141
142
143
144
145
146
147
148
149
150
151
    assert stream.getvalue() == msg


def test_multi_captured(capfd):
    stream = StringIO()
    with redirect_stdout(stream):
        m.captured_output("a")
        m.raw_output("b")
        m.captured_output("c")
        m.raw_output("d")
    stdout, stderr = capfd.readouterr()
152
153
    assert stdout == "bd"
    assert stream.getvalue() == "ac"
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169


def test_dual(capsys):
    m.captured_dual("a", "b")
    stdout, stderr = capsys.readouterr()
    assert stdout == "a"
    assert stderr == "b"


def test_redirect(capfd):
    msg = "Should not be in log!"
    stream = StringIO()
    with redirect_stdout(stream):
        m.raw_output(msg)
    stdout, stderr = capfd.readouterr()
    assert stdout == msg
170
    assert stream.getvalue() == ""
171
172
173
174
175
176

    stream = StringIO()
    with redirect_stdout(stream):
        with m.ostream_redirect():
            m.raw_output(msg)
    stdout, stderr = capfd.readouterr()
177
    assert stdout == ""
178
179
180
181
182
183
184
    assert stream.getvalue() == msg

    stream = StringIO()
    with redirect_stdout(stream):
        m.raw_output(msg)
    stdout, stderr = capfd.readouterr()
    assert stdout == msg
185
    assert stream.getvalue() == ""
186
187
188
189
190
191
192
193
194
195
196
197
198


def test_redirect_err(capfd):
    msg = "StdOut"
    msg2 = "StdErr"

    stream = StringIO()
    with redirect_stderr(stream):
        with m.ostream_redirect(stdout=False):
            m.raw_output(msg)
            m.raw_err(msg2)
    stdout, stderr = capfd.readouterr()
    assert stdout == msg
199
    assert stderr == ""
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
    assert stream.getvalue() == msg2


def test_redirect_both(capfd):
    msg = "StdOut"
    msg2 = "StdErr"

    stream = StringIO()
    stream2 = StringIO()
    with redirect_stdout(stream):
        with redirect_stderr(stream2):
            with m.ostream_redirect():
                m.raw_output(msg)
                m.raw_err(msg2)
    stdout, stderr = capfd.readouterr()
215
216
    assert stdout == ""
    assert stderr == ""
217
218
    assert stream.getvalue() == msg
    assert stream2.getvalue() == msg2
nickbridgechess's avatar
nickbridgechess committed
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241


def test_threading():
    with m.ostream_redirect(stdout=True, stderr=False):
        # start some threads
        threads = []

        # start some threads
        for _j in range(20):
            threads.append(m.TestThread())

        # give the threads some time to fail
        threads[0].sleep()

        # stop all the threads
        for t in threads:
            t.stop()

        for t in threads:
            t.join()

        # if a thread segfaults, we don't get here
        assert True