summaryrefslogtreecommitdiff
path: root/Lib/test/test_mmap.py
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-05-10 20:03:04 +0000
committerTim Peters <tim.peters@gmail.com>2001-05-10 20:03:04 +0000
commitfd69208b78de964f978b6a070c0fa0729e8d5285 (patch)
tree52c8f6be59c2f168d2ef7eb8f4712a1f5c4a4a18 /Lib/test/test_mmap.py
parent8c3e91efaf6508e73fa997b95ef85b66f7cb5d63 (diff)
downloadcpython-git-fd69208b78de964f978b6a070c0fa0729e8d5285.tar.gz
Change test_mmap.py to use test_support.TESTFN instead of hardcoded "foo",
and wrap the body in try/finally to ensure TESTFN gets cleaned up no matter what.
Diffstat (limited to 'Lib/test/test_mmap.py')
-rw-r--r--Lib/test/test_mmap.py227
1 files changed, 119 insertions, 108 deletions
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index 8066285167..427f4e6945 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -1,4 +1,4 @@
-from test_support import verify
+from test_support import verify, TESTFN, unlink
import mmap
import os, re, sys
@@ -7,118 +7,129 @@ PAGESIZE = mmap.PAGESIZE
def test_both():
"Test mmap module on Unix systems and Windows"
- # Create an mmap'ed file
- f = open('foo', 'w+')
-
- # Write 2 pages worth of data to the file
- f.write('\0'* PAGESIZE)
- f.write('foo')
- f.write('\0'* (PAGESIZE-3) )
-
- m = mmap.mmap(f.fileno(), 2 * PAGESIZE)
- f.close()
-
- # Simple sanity checks
-
- print type(m) # SF bug 128713: segfaulted on Linux
- print ' Position of foo:', m.find('foo') / float(PAGESIZE), 'pages'
- verify(m.find('foo') == PAGESIZE)
-
- print ' Length of file:', len(m) / float(PAGESIZE), 'pages'
- verify(len(m) == 2*PAGESIZE)
-
- print ' Contents of byte 0:', repr(m[0])
- verify(m[0] == '\0')
- print ' Contents of first 3 bytes:', repr(m[0:3])
- verify(m[0:3] == '\0\0\0')
-
- # Modify the file's content
- print "\n Modifying file's content..."
- m[0] = '3'
- m[PAGESIZE +3: PAGESIZE +3+3]='bar'
-
- # Check that the modification worked
- print ' Contents of byte 0:', repr(m[0])
- verify(m[0] == '3')
- print ' Contents of first 3 bytes:', repr(m[0:3])
- verify(m[0:3] == '3\0\0')
- print ' Contents of second page:', repr(m[PAGESIZE-1 : PAGESIZE + 7])
- verify(m[PAGESIZE-1 : PAGESIZE + 7] == '\0foobar\0')
-
- m.flush()
-
- # Test doing a regular expression match in an mmap'ed file
- match=re.search('[A-Za-z]+', m)
- if match is None:
- print ' ERROR: regex match on mmap failed!'
- else:
- start, end = match.span(0)
- length = end - start
-
- print ' Regex match on mmap (page start, length of match):',
- print start / float(PAGESIZE), length
-
- verify(start == PAGESIZE)
- verify(end == PAGESIZE + 6)
-
- # test seeking around (try to overflow the seek implementation)
- m.seek(0,0)
- print ' Seek to zeroth byte'
- verify(m.tell() == 0)
- m.seek(42,1)
- print ' Seek to 42nd byte'
- verify(m.tell() == 42)
- m.seek(0,2)
- print ' Seek to last byte'
- verify(m.tell() == len(m))
-
- print ' Try to seek to negative position...'
- try:
- m.seek(-1)
- except ValueError:
- pass
- else:
- verify(0, 'expected a ValueError but did not get it')
-
- print ' Try to seek beyond end of mmap...'
- try:
- m.seek(1,2)
- except ValueError:
- pass
- else:
- verify(0, 'expected a ValueError but did not get it')
-
- print ' Try to seek to negative position...'
- try:
- m.seek(-len(m)-1,2)
- except ValueError:
- pass
- else:
- verify(0, 'expected a ValueError but did not get it')
-
- # Try resizing map
- print ' Attempting resize()'
- 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
- verify(len(m) == 512,
- "len(m) is %d, but expecting 512" % (len(m),) )
- # Check that we can no longer seek beyond the new size.
+ # Create a file to be mmap'ed.
+ f = open(TESTFN, 'w+')
+
+ try: # unlink TESTFN no matter what
+ # Write 2 pages worth of data to the file
+ f.write('\0'* PAGESIZE)
+ f.write('foo')
+ f.write('\0'* (PAGESIZE-3) )
+
+ m = mmap.mmap(f.fileno(), 2 * PAGESIZE)
+ f.close()
+
+ # Simple sanity checks
+
+ print type(m) # SF bug 128713: segfaulted on Linux
+ print ' Position of foo:', m.find('foo') / float(PAGESIZE), 'pages'
+ verify(m.find('foo') == PAGESIZE)
+
+ print ' Length of file:', len(m) / float(PAGESIZE), 'pages'
+ verify(len(m) == 2*PAGESIZE)
+
+ print ' Contents of byte 0:', repr(m[0])
+ verify(m[0] == '\0')
+ print ' Contents of first 3 bytes:', repr(m[0:3])
+ verify(m[0:3] == '\0\0\0')
+
+ # Modify the file's content
+ print "\n Modifying file's content..."
+ m[0] = '3'
+ m[PAGESIZE +3: PAGESIZE +3+3]='bar'
+
+ # Check that the modification worked
+ print ' Contents of byte 0:', repr(m[0])
+ verify(m[0] == '3')
+ print ' Contents of first 3 bytes:', repr(m[0:3])
+ verify(m[0:3] == '3\0\0')
+ print ' Contents of second page:', repr(m[PAGESIZE-1 : PAGESIZE + 7])
+ verify(m[PAGESIZE-1 : PAGESIZE + 7] == '\0foobar\0')
+
+ m.flush()
+
+ # Test doing a regular expression match in an mmap'ed file
+ match=re.search('[A-Za-z]+', m)
+ if match is None:
+ print ' ERROR: regex match on mmap failed!'
+ else:
+ start, end = match.span(0)
+ length = end - start
+
+ print ' Regex match on mmap (page start, length of match):',
+ print start / float(PAGESIZE), length
+
+ verify(start == PAGESIZE)
+ verify(end == PAGESIZE + 6)
+
+ # test seeking around (try to overflow the seek implementation)
+ m.seek(0,0)
+ print ' Seek to zeroth byte'
+ verify(m.tell() == 0)
+ m.seek(42,1)
+ print ' Seek to 42nd byte'
+ verify(m.tell() == 42)
+ m.seek(0,2)
+ print ' Seek to last byte'
+ verify(m.tell() == len(m))
+
+ print ' Try to seek to negative position...'
try:
- m.seek(513,0)
+ m.seek(-1)
except ValueError:
pass
else:
- verify(0, 'Could seek beyond the new size')
+ verify(0, 'expected a ValueError but did not get it')
+
+ print ' Try to seek beyond end of mmap...'
+ try:
+ m.seek(1,2)
+ except ValueError:
+ pass
+ else:
+ verify(0, 'expected a ValueError but did not get it')
+
+ print ' Try to seek to negative position...'
+ try:
+ m.seek(-len(m)-1,2)
+ except ValueError:
+ pass
+ else:
+ verify(0, 'expected a ValueError but did not get it')
+
+ # Try resizing map
+ print ' Attempting resize()'
+ 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
+ verify(len(m) == 512,
+ "len(m) is %d, but expecting 512" % (len(m),) )
+ # Check that we can no longer seek beyond the new size.
+ try:
+ m.seek(513,0)
+ except ValueError:
+ pass
+ else:
+ verify(0, 'Could seek beyond the new size')
+
+ m.close()
+
+ finally:
+ try:
+ f.close()
+ except OSError:
+ pass
+ try:
+ unlink(TESTFN)
+ except OSError:
+ pass
- m.close()
- os.unlink("foo")
print ' Test passed'
test_both()