Skip to content

Commit

Permalink
Merge pull request #1866 from joguSD/bugfix-stdin-stub-buffer
Browse files Browse the repository at this point in the history
Add buffer attribute to DontReadFromInput
  • Loading branch information
RonnyPfannschmidt authored Aug 25, 2016
2 parents 3345ac9 + a152ea2 commit 9c45d6c
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 1 deletion.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Javier Domingo Cansino
Javier Romero
John Towler
Jon Sonesen
Jordan Guymon
Joshua Bronson
Jurko Gospodnetić
Justyna Janczyszyn
Expand Down
4 changes: 3 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
* Improve error message when passing non-string ids to ``pytest.mark.parametrize`` (`#1857`_).
Thanks `@okken`_ for the report and `@nicoddemus`_ for the PR.

*
* Add ``buffer`` attribute to stdin stub class ``pytest.capture.DontReadFromInput``
Thanks `@joguSD`_ for the PR.

*

.. _@joguSD: https://github.com/joguSD

.. _#1857: https://github.com/pytest-dev/pytest/issues/1857

Expand Down
7 changes: 7 additions & 0 deletions _pytest/capture.py
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,13 @@ def isatty(self):
def close(self):
pass

@property
def buffer(self):
if sys.version_info >= (3,0):
return self
else:
raise AttributeError('redirected stdin has no attribute buffer')


def _readline_workaround():
"""
Expand Down
22 changes: 22 additions & 0 deletions testing/test_capture.py
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,28 @@ def test_dontreadfrominput():
f.close() # just for completeness


@pytest.mark.skipif('sys.version_info < (3,)', reason='python2 has no buffer')
def test_dontreadfrominput_buffer_python3():
from _pytest.capture import DontReadFromInput
f = DontReadFromInput()
fb = f.buffer
assert not fb.isatty()
pytest.raises(IOError, fb.read)
pytest.raises(IOError, fb.readlines)
pytest.raises(IOError, iter, fb)
pytest.raises(ValueError, fb.fileno)
f.close() # just for completeness


@pytest.mark.skipif('sys.version_info >= (3,)', reason='python2 has no buffer')
def test_dontreadfrominput_buffer_python2():
from _pytest.capture import DontReadFromInput
f = DontReadFromInput()
with pytest.raises(AttributeError):
f.buffer
f.close() # just for completeness


@pytest.yield_fixture
def tmpfile(testdir):
f = testdir.makepyfile("").open('wb+')
Expand Down

0 comments on commit 9c45d6c

Please sign in to comment.