mirror of
https://github.com/python/cpython.git
synced 2026-01-06 23:42:34 +00:00
Fix a weird use of try/finally to close a file.
(There are more places that don't close 'f' at all if an error occurs, but none have a bogus try/finally pattern.)
This commit is contained in:
parent
b358a2c423
commit
456fe5d3ca
1 changed files with 57 additions and 60 deletions
|
|
@ -29,86 +29,83 @@ def test_basic(self):
|
|||
f.write(b'\0'* (PAGESIZE-3) )
|
||||
f.flush()
|
||||
m = mmap.mmap(f.fileno(), 2 * PAGESIZE)
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
# Simple sanity checks
|
||||
# Simple sanity checks
|
||||
|
||||
tp = str(type(m)) # SF bug 128713: segfaulted on Linux
|
||||
self.assertEqual(m.find('foo'), PAGESIZE)
|
||||
tp = str(type(m)) # SF bug 128713: segfaulted on Linux
|
||||
self.assertEqual(m.find('foo'), PAGESIZE)
|
||||
|
||||
self.assertEqual(len(m), 2*PAGESIZE)
|
||||
self.assertEqual(len(m), 2*PAGESIZE)
|
||||
|
||||
self.assertEqual(m[0], b'\0')
|
||||
self.assertEqual(m[0:3], b'\0\0\0')
|
||||
self.assertEqual(m[0], b'\0')
|
||||
self.assertEqual(m[0:3], b'\0\0\0')
|
||||
|
||||
# Modify the file's content
|
||||
m[0] = b'3'
|
||||
m[PAGESIZE +3: PAGESIZE +3+3] = b'bar'
|
||||
# Modify the file's content
|
||||
m[0] = b'3'
|
||||
m[PAGESIZE +3: PAGESIZE +3+3] = b'bar'
|
||||
|
||||
# Check that the modification worked
|
||||
self.assertEqual(m[0], b'3')
|
||||
self.assertEqual(m[0:3], b'3\0\0')
|
||||
self.assertEqual(m[PAGESIZE-1 : PAGESIZE + 7], b'\0foobar\0')
|
||||
# Check that the modification worked
|
||||
self.assertEqual(m[0], b'3')
|
||||
self.assertEqual(m[0:3], b'3\0\0')
|
||||
self.assertEqual(m[PAGESIZE-1 : PAGESIZE + 7], b'\0foobar\0')
|
||||
|
||||
m.flush()
|
||||
m.flush()
|
||||
|
||||
# Test doing a regular expression match in an mmap'ed file
|
||||
match = re.search('[A-Za-z]+', m)
|
||||
if match is None:
|
||||
self.fail('regex match on mmap failed!')
|
||||
else:
|
||||
start, end = match.span(0)
|
||||
length = end - start
|
||||
# Test doing a regular expression match in an mmap'ed file
|
||||
match = re.search('[A-Za-z]+', m)
|
||||
if match is None:
|
||||
self.fail('regex match on mmap failed!')
|
||||
else:
|
||||
start, end = match.span(0)
|
||||
length = end - start
|
||||
|
||||
self.assertEqual(start, PAGESIZE)
|
||||
self.assertEqual(end, PAGESIZE + 6)
|
||||
self.assertEqual(start, PAGESIZE)
|
||||
self.assertEqual(end, PAGESIZE + 6)
|
||||
|
||||
# test seeking around (try to overflow the seek implementation)
|
||||
m.seek(0,0)
|
||||
self.assertEqual(m.tell(), 0)
|
||||
m.seek(42,1)
|
||||
self.assertEqual(m.tell(), 42)
|
||||
m.seek(0,2)
|
||||
self.assertEqual(m.tell(), len(m))
|
||||
# test seeking around (try to overflow the seek implementation)
|
||||
m.seek(0,0)
|
||||
self.assertEqual(m.tell(), 0)
|
||||
m.seek(42,1)
|
||||
self.assertEqual(m.tell(), 42)
|
||||
m.seek(0,2)
|
||||
self.assertEqual(m.tell(), len(m))
|
||||
|
||||
# Try to seek to negative position...
|
||||
self.assertRaises(ValueError, m.seek, -1)
|
||||
# Try to seek to negative position...
|
||||
self.assertRaises(ValueError, m.seek, -1)
|
||||
|
||||
# Try to seek beyond end of mmap...
|
||||
self.assertRaises(ValueError, m.seek, 1, 2)
|
||||
# Try to seek beyond end of mmap...
|
||||
self.assertRaises(ValueError, m.seek, 1, 2)
|
||||
|
||||
# Try to seek to negative position...
|
||||
self.assertRaises(ValueError, m.seek, -len(m)-1, 2)
|
||||
# Try to seek to negative position...
|
||||
self.assertRaises(ValueError, m.seek, -len(m)-1, 2)
|
||||
|
||||
# Try resizing map
|
||||
# Try resizing map
|
||||
try:
|
||||
m.resize(512)
|
||||
except SystemError:
|
||||
# resize() not supported
|
||||
# No messages are printed, since the output of this test suite
|
||||
# would then be different across platforms.
|
||||
pass
|
||||
else:
|
||||
# resize() is supported
|
||||
self.assertEqual(len(m), 512)
|
||||
# Check that we can no longer seek beyond the new size.
|
||||
self.assertRaises(ValueError, m.seek, 513, 0)
|
||||
|
||||
# Check that the underlying file is truncated too
|
||||
# (bug #728515)
|
||||
f = open(TESTFN)
|
||||
try:
|
||||
m.resize(512)
|
||||
except SystemError:
|
||||
# resize() not supported
|
||||
# No messages are printed, since the output of this test suite
|
||||
# would then be different across platforms.
|
||||
pass
|
||||
else:
|
||||
# resize() is supported
|
||||
self.assertEqual(len(m), 512)
|
||||
# Check that we can no longer seek beyond the new size.
|
||||
self.assertRaises(ValueError, m.seek, 513, 0)
|
||||
|
||||
# Check that the underlying file is truncated too
|
||||
# (bug #728515)
|
||||
f = open(TESTFN)
|
||||
f.seek(0, 2)
|
||||
self.assertEqual(f.tell(), 512)
|
||||
finally:
|
||||
f.close()
|
||||
self.assertEqual(m.size(), 512)
|
||||
self.assertEqual(m.size(), 512)
|
||||
|
||||
m.close()
|
||||
|
||||
finally:
|
||||
try:
|
||||
f.close()
|
||||
except OSError:
|
||||
pass
|
||||
m.close()
|
||||
|
||||
def test_access_parameter(self):
|
||||
# Test for "access" keyword parameter
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue