Skip to content

Commit 9edafd9

Browse files
committed
TST: Use capture_stderr in testing
1 parent 3db0cd9 commit 9edafd9

File tree

5 files changed

+62
-60
lines changed

5 files changed

+62
-60
lines changed

pandas/tests/io/parser/common.py

+16-21
Original file line numberDiff line numberDiff line change
@@ -1694,6 +1694,7 @@ class InvalidBuffer(object):
16941694
with tm.assertRaisesRegexp(ValueError, msg):
16951695
self.read_csv(mock.Mock())
16961696

1697+
@tm.capture_stderr
16971698
def test_skip_bad_lines(self):
16981699
# see gh-15925
16991700
data = 'a\n1\n1,2,3\n4\n5,6,7'
@@ -1704,30 +1705,24 @@ def test_skip_bad_lines(self):
17041705
with tm.assertRaises(ParserError):
17051706
self.read_csv(StringIO(data), error_bad_lines=True)
17061707

1707-
stderr = sys.stderr
17081708
expected = DataFrame({'a': [1, 4]})
17091709

1710-
sys.stderr = StringIO()
1711-
try:
1712-
out = self.read_csv(StringIO(data),
1713-
error_bad_lines=False,
1714-
warn_bad_lines=False)
1715-
tm.assert_frame_equal(out, expected)
1710+
out = self.read_csv(StringIO(data),
1711+
error_bad_lines=False,
1712+
warn_bad_lines=False)
1713+
tm.assert_frame_equal(out, expected)
17161714

1717-
val = sys.stderr.getvalue()
1718-
self.assertEqual(val, '')
1719-
finally:
1720-
sys.stderr = stderr
1715+
val = sys.stderr.getvalue()
1716+
self.assertEqual(val, '')
17211717

1718+
# Reset the stderr buffer.
17221719
sys.stderr = StringIO()
1723-
try:
1724-
out = self.read_csv(StringIO(data),
1725-
error_bad_lines=False,
1726-
warn_bad_lines=True)
1727-
tm.assert_frame_equal(out, expected)
17281720

1729-
val = sys.stderr.getvalue()
1730-
self.assertTrue('Skipping line 3' in val)
1731-
self.assertTrue('Skipping line 5' in val)
1732-
finally:
1733-
sys.stderr = stderr
1721+
out = self.read_csv(StringIO(data),
1722+
error_bad_lines=False,
1723+
warn_bad_lines=True)
1724+
tm.assert_frame_equal(out, expected)
1725+
1726+
val = sys.stderr.getvalue()
1727+
self.assertTrue('Skipping line 3' in val)
1728+
self.assertTrue('Skipping line 5' in val)

pandas/tests/io/parser/test_textreader.py

+9-13
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ def test_integer_thousands_alt(self):
142142
expected = DataFrame([123456, 12500])
143143
tm.assert_frame_equal(result, expected)
144144

145+
@tm.capture_stderr
145146
def test_skip_bad_lines(self):
146147
# too many lines, see #2430 for why
147148
data = ('a:b:c\n'
@@ -165,19 +166,14 @@ def test_skip_bad_lines(self):
165166
2: ['c', 'f', 'i', 'n']}
166167
assert_array_dicts_equal(result, expected)
167168

168-
stderr = sys.stderr
169-
sys.stderr = StringIO()
170-
try:
171-
reader = TextReader(StringIO(data), delimiter=':',
172-
header=None,
173-
error_bad_lines=False,
174-
warn_bad_lines=True)
175-
reader.read()
176-
val = sys.stderr.getvalue()
177-
self.assertTrue('Skipping line 4' in val)
178-
self.assertTrue('Skipping line 6' in val)
179-
finally:
180-
sys.stderr = stderr
169+
reader = TextReader(StringIO(data), delimiter=':',
170+
header=None,
171+
error_bad_lines=False,
172+
warn_bad_lines=True)
173+
reader.read()
174+
val = sys.stderr.getvalue()
175+
self.assertTrue('Skipping line 4' in val)
176+
self.assertTrue('Skipping line 6' in val)
181177

182178
def test_header_not_enough_lines(self):
183179
data = ('skip this\n'

pandas/tests/plotting/test_frame.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from pandas import (Series, DataFrame, MultiIndex, PeriodIndex, date_range,
1313
bdate_range)
1414
from pandas.types.api import is_list_like
15-
from pandas.compat import (range, lrange, StringIO, lmap, lzip, u, zip, PY3)
15+
from pandas.compat import range, lrange, lmap, lzip, u, zip, PY3
1616
from pandas.formats.printing import pprint_thing
1717
import pandas.util.testing as tm
1818
from pandas.util.testing import slow
@@ -1558,8 +1558,8 @@ def test_line_label_none(self):
15581558
self.assertEqual(ax.get_legend().get_texts()[0].get_text(), 'None')
15591559

15601560
@slow
1561+
@tm.capture_stdout
15611562
def test_line_colors(self):
1562-
import sys
15631563
from matplotlib import cm
15641564

15651565
custom_colors = 'rgcby'
@@ -1568,16 +1568,13 @@ def test_line_colors(self):
15681568
ax = df.plot(color=custom_colors)
15691569
self._check_colors(ax.get_lines(), linecolors=custom_colors)
15701570

1571-
tmp = sys.stderr
1572-
sys.stderr = StringIO()
1573-
try:
1574-
tm.close()
1575-
ax2 = df.plot(colors=custom_colors)
1576-
lines2 = ax2.get_lines()
1577-
for l1, l2 in zip(ax.get_lines(), lines2):
1578-
self.assertEqual(l1.get_color(), l2.get_color())
1579-
finally:
1580-
sys.stderr = tmp
1571+
tm.close()
1572+
1573+
ax2 = df.plot(colors=custom_colors)
1574+
lines2 = ax2.get_lines()
1575+
1576+
for l1, l2 in zip(ax.get_lines(), lines2):
1577+
self.assertEqual(l1.get_color(), l2.get_color())
15811578

15821579
tm.close()
15831580

pandas/tests/series/test_repr.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33

44
from datetime import datetime, timedelta
55

6+
import sys
7+
68
import numpy as np
79
import pandas as pd
810

911
from pandas import (Index, Series, DataFrame, date_range)
1012
from pandas.core.index import MultiIndex
1113

12-
from pandas.compat import StringIO, lrange, range, u
14+
from pandas.compat import lrange, range, u
1315
from pandas import compat
1416
import pandas.util.testing as tm
1517

@@ -112,20 +114,15 @@ def test_tidy_repr(self):
112114
a.name = 'title1'
113115
repr(a) # should not raise exception
114116

117+
@tm.capture_stderr
115118
def test_repr_bool_fails(self):
116119
s = Series([DataFrame(np.random.randn(2, 2)) for i in range(5)])
117120

118-
import sys
119-
120-
buf = StringIO()
121-
tmp = sys.stderr
122-
sys.stderr = buf
123-
try:
124-
# it works (with no Cython exception barf)!
125-
repr(s)
126-
finally:
127-
sys.stderr = tmp
128-
self.assertEqual(buf.getvalue(), '')
121+
# It works (with no Cython exception barf)!
122+
repr(s)
123+
124+
output = sys.stderr.getvalue()
125+
self.assertEqual(output, '')
129126

130127
def test_repr_name_iterable_indexable(self):
131128
s = Series([1, 2, 3], name=np.int64(3))

pandas/util/testing.py

+19-2
Original file line numberDiff line numberDiff line change
@@ -2799,11 +2799,28 @@ def capture_stdout(f):
27992799
"""
28002800

28012801
@wraps(f)
2802-
def wrapped(*args, **kwargs):
2802+
def wrapper(*args, **kwargs):
28032803
try:
28042804
sys.stdout = StringIO()
28052805
f(*args, **kwargs)
28062806
finally:
28072807
sys.stdout = sys.__stdout__
28082808

2809-
return wrapped
2809+
return wrapper
2810+
2811+
2812+
def capture_stderr(f):
2813+
"""
2814+
Capture stderr in a buffer so that it can be checked
2815+
(or suppressed) during testing.
2816+
"""
2817+
2818+
@wraps(f)
2819+
def wrapper(*args, **kwargs):
2820+
try:
2821+
sys.stderr = StringIO()
2822+
f(*args, **kwargs)
2823+
finally:
2824+
sys.stderr = sys.__stderr__
2825+
2826+
return wrapper

0 commit comments

Comments
 (0)