Kaydet (Commit) b3c728fd authored tarafından Nick Coghlan's avatar Nick Coghlan

Close #11577: Improve binhex test coverage and fix ResourceWarning

üst 4e432682
...@@ -52,14 +52,13 @@ class FInfo: ...@@ -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,19 +139,26 @@ class _Rlecoderengine: ...@@ -140,19 +139,26 @@ 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')
ofp.write(b'(This file must be converted with BinHex 4.0)\r\r:') close_on_error = True
hqxer = _Hqxcoderengine(ofp) try:
self.ofp = _Rlecoderengine(hqxer) ofp.write(b'(This file must be converted with BinHex 4.0)\r\r:')
self.crc = 0 hqxer = _Hqxcoderengine(ofp)
if finfo is None: self.ofp = _Rlecoderengine(hqxer)
finfo = FInfo() self.crc = 0
self.dlen = dlen if finfo is None:
self.rlen = rlen finfo = FInfo()
self._writeinfo(name, finfo) self.dlen = dlen
self.state = _DID_HEADER self.rlen = rlen
self._writeinfo(name, finfo)
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)
......
...@@ -15,10 +15,12 @@ class BinHexTestCase(unittest.TestCase): ...@@ -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): ...@@ -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)
......
...@@ -447,6 +447,7 @@ Tamito Kajiyama ...@@ -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
......
...@@ -40,6 +40,8 @@ Core and Builtins ...@@ -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 ...@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment