Skip to content

Commit 1264971

Browse files
committed
capture: ensure name of EncodedFile being a string
Fixes #2555.
1 parent db24a3b commit 1264971

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

_pytest/capture.py

+2
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ def writelines(self, linelist):
252252
self.write(data)
253253

254254
def __getattr__(self, name):
255+
if name == 'name':
256+
return '{!r}'.format(self.buffer)
255257
return getattr(object.__getattribute__(self, "buffer"), name)
256258

257259

testing/test_capture.py

+10
Original file line numberDiff line numberDiff line change
@@ -715,25 +715,35 @@ def test_dupfile(tmpfile):
715715
assert nf not in flist
716716
print(i, end="", file=nf)
717717
flist.append(nf)
718+
719+
fname_open = flist[0].name
720+
assert fname_open == repr(flist[0].buffer)
721+
718722
for i in range(5):
719723
f = flist[i]
720724
f.close()
725+
fname_closed = flist[0].name
726+
assert fname_closed == repr(flist[0].buffer)
727+
assert fname_closed != fname_open
721728
tmpfile.seek(0)
722729
s = tmpfile.read()
723730
assert "01234" in repr(s)
724731
tmpfile.close()
732+
assert fname_closed == repr(flist[0].buffer)
725733

726734
def test_dupfile_on_bytesio():
727735
io = py.io.BytesIO()
728736
f = capture.safe_text_dupfile(io, "wb")
729737
f.write("hello")
730738
assert io.getvalue() == b"hello"
739+
assert f.name.startswith('<_io.BytesIO object at')
731740

732741
def test_dupfile_on_textio():
733742
io = py.io.TextIO()
734743
f = capture.safe_text_dupfile(io, "wb")
735744
f.write("hello")
736745
assert io.getvalue() == "hello"
746+
assert not hasattr(f, 'name')
737747

738748

739749
@contextlib.contextmanager

0 commit comments

Comments
 (0)