Close #11577: Improve binhex test coverage and fix ResourceWarning

This commit is contained in:
Nick Coghlan 2011-03-16 21:26:40 -04:00
parent 4e4326829f
commit b3c728fd89
4 changed files with 40 additions and 18 deletions

View file

@ -52,14 +52,13 @@ class FInfo:
def getfileinfo(name): def getfileinfo(name):
finfo = FInfo() finfo = FInfo()
fp = io.open(name, 'rb') with io.open(name, 'rb') as fp:
# Quick check for textfile # Quick check for textfile
data = fp.read(512) data = fp.read(512)
if 0 not in data: if 0 not in data:
finfo.Type = 'TEXT' finfo.Type = 'TEXT'
fp.seek(0, 2) fp.seek(0, 2)
dsize = fp.tell() dsize = fp.tell()
fp.close()
dir, file = os.path.split(name) dir, file = os.path.split(name)
file = file.replace(':', '-', 1) file = file.replace(':', '-', 1)
return file, finfo, dsize, 0 return file, finfo, dsize, 0
@ -140,9 +139,12 @@ class _Rlecoderengine:
class BinHex: class BinHex:
def __init__(self, name_finfo_dlen_rlen, ofp): def __init__(self, name_finfo_dlen_rlen, ofp):
name, finfo, dlen, rlen = name_finfo_dlen_rlen name, finfo, dlen, rlen = name_finfo_dlen_rlen
close_on_error = False
if isinstance(ofp, str): if isinstance(ofp, str):
ofname = ofp ofname = ofp
ofp = io.open(ofname, 'wb') ofp = io.open(ofname, 'wb')
close_on_error = True
try:
ofp.write(b'(This file must be converted with BinHex 4.0)\r\r:') ofp.write(b'(This file must be converted with BinHex 4.0)\r\r:')
hqxer = _Hqxcoderengine(ofp) hqxer = _Hqxcoderengine(ofp)
self.ofp = _Rlecoderengine(hqxer) self.ofp = _Rlecoderengine(hqxer)
@ -153,6 +155,10 @@ class BinHex:
self.rlen = rlen self.rlen = rlen
self._writeinfo(name, finfo) self._writeinfo(name, finfo)
self.state = _DID_HEADER self.state = _DID_HEADER
except:
if close_on_error:
ofp.close()
raise
def _writeinfo(self, name, finfo): def _writeinfo(self, name, finfo):
nl = len(name) nl = len(name)

View file

@ -15,10 +15,12 @@ class BinHexTestCase(unittest.TestCase):
def setUp(self): def setUp(self):
self.fname1 = support.TESTFN + "1" self.fname1 = support.TESTFN + "1"
self.fname2 = support.TESTFN + "2" self.fname2 = support.TESTFN + "2"
self.fname3 = support.TESTFN + "very_long_filename__very_long_filename__very_long_filename__very_long_filename__"
def tearDown(self): def tearDown(self):
support.unlink(self.fname1) support.unlink(self.fname1)
support.unlink(self.fname2) support.unlink(self.fname2)
support.unlink(self.fname3)
DATA = b'Jack is my hero' DATA = b'Jack is my hero'
@ -37,6 +39,15 @@ class BinHexTestCase(unittest.TestCase):
self.assertEqual(self.DATA, finish) self.assertEqual(self.DATA, finish)
def test_binhex_error_on_long_filename(self):
"""
The testcase fails if no exception is raised when a filename parameter provided to binhex.binhex()
is too long, or if the exception raised in binhex.binhex() is not an instance of binhex.Error.
"""
f3 = open(self.fname3, 'wb')
f3.close()
self.assertRaises(binhex.Error, binhex.binhex, self.fname3, self.fname2)
def test_main(): def test_main():
support.run_unittest(BinHexTestCase) support.run_unittest(BinHexTestCase)

View file

@ -447,6 +447,7 @@ Tamito Kajiyama
Peter van Kampen Peter van Kampen
Rafe Kaplan Rafe Kaplan
Jacob Kaplan-Moss Jacob Kaplan-Moss
Arkady Koplyarov
Lou Kates Lou Kates
Hiroaki Kawai Hiroaki Kawai
Sebastien Keim Sebastien Keim

View file

@ -40,6 +40,8 @@ Core and Builtins
Library Library
------- -------
- Issue #11577: fix ResourceWarning triggered by improved binhex test coverage
- Issue #11401: fix handling of headers with no value; this fixes a regression - Issue #11401: fix handling of headers with no value; this fixes a regression
relative to Python2 and the result is now the same as it was in Python2. relative to Python2 and the result is now the same as it was in Python2.
@ -129,6 +131,8 @@ Tools/Demos
Tests Tests
----- -----
- Issue #11577: improve test coverage of binhex.py. Patch by Arkady Koplyarov.
- Issue #11578: added test for the timeit module. Patch Michael Henry. - Issue #11578: added test for the timeit module. Patch Michael Henry.
- Issue #11503: improve test coverage of posixpath.py. Patch by Evan Dandrea. - Issue #11503: improve test coverage of posixpath.py. Patch by Evan Dandrea.