Skip to content

Commit 5c6a4c9

Browse files
committed
capture: ensure name of EncodedFile being a string
Fixes #2555.
1 parent 70d9f86 commit 5c6a4c9

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

_pytest/capture.py

+5
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,11 @@ def writelines(self, linelist):
254254
data = ''.join(linelist)
255255
self.write(data)
256256

257+
@property
258+
def name(self):
259+
"""Ensure that file.name is a string."""
260+
return repr(self.buffer)
261+
257262
def __getattr__(self, name):
258263
return getattr(object.__getattribute__(self, "buffer"), name)
259264

changelog/2555.bugfix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
capture: ensure that EncodedFile.name is a string.

testing/test_capture.py

+10
Original file line numberDiff line numberDiff line change
@@ -716,27 +716,37 @@ def test_dupfile(tmpfile):
716716
assert nf not in flist
717717
print(i, end="", file=nf)
718718
flist.append(nf)
719+
720+
fname_open = flist[0].name
721+
assert fname_open == repr(flist[0].buffer)
722+
719723
for i in range(5):
720724
f = flist[i]
721725
f.close()
726+
fname_closed = flist[0].name
727+
assert fname_closed == repr(flist[0].buffer)
728+
assert fname_closed != fname_open
722729
tmpfile.seek(0)
723730
s = tmpfile.read()
724731
assert "01234" in repr(s)
725732
tmpfile.close()
733+
assert fname_closed == repr(flist[0].buffer)
726734

727735

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

734743

735744
def test_dupfile_on_textio():
736745
io = py.io.TextIO()
737746
f = capture.safe_text_dupfile(io, "wb")
738747
f.write("hello")
739748
assert io.getvalue() == "hello"
749+
assert not hasattr(f, 'name')
740750

741751

742752
@contextlib.contextmanager

0 commit comments

Comments
 (0)