@@ -57,6 +57,7 @@ def test_basic(self):
5757 f .write (b'\0 ' * (PAGESIZE - 3 ) )
5858 f .flush ()
5959 m = mmap .mmap (f .fileno (), 2 * PAGESIZE )
60+ self .addCleanup (m .close )
6061 finally :
6162 f .close ()
6263
@@ -114,31 +115,34 @@ def test_basic(self):
114115 # Try to seek to negative position...
115116 self .assertRaises (ValueError , m .seek , - len (m )- 1 , 2 )
116117
117- # Try resizing map
118+ @unittest .skipUnless (hasattr (mmap .mmap , 'resize' ), 'requires mmap.resize' )
119+ def test_resize (self ):
120+ # Create a file to be mmap'ed.
121+ f = open (TESTFN , 'bw+' )
118122 try :
119- m .resize (512 )
120- except SystemError :
121- # resize() not supported
122- # No messages are printed, since the output of this test suite
123- # would then be different across platforms.
124- pass
125- else :
126- # resize() is supported
127- self .assertEqual (len (m ), 512 )
128- # Check that we can no longer seek beyond the new size.
129- self .assertRaises (ValueError , m .seek , 513 , 0 )
130-
131- # Check that the underlying file is truncated too
132- # (bug #728515)
133- f = open (TESTFN , 'rb' )
134- try :
135- f .seek (0 , 2 )
136- self .assertEqual (f .tell (), 512 )
137- finally :
138- f .close ()
139- self .assertEqual (m .size (), 512 )
123+ # Write 2 pages worth of data to the file
124+ f .write (b'\0 ' * 2 * PAGESIZE )
125+ f .flush ()
126+ m = mmap .mmap (f .fileno (), 2 * PAGESIZE )
127+ self .addCleanup (m .close )
128+ finally :
129+ f .close ()
140130
141- m .close ()
131+ # Try resizing map
132+ m .resize (512 )
133+ self .assertEqual (len (m ), 512 )
134+ # Check that we can no longer seek beyond the new size.
135+ self .assertRaises (ValueError , m .seek , 513 , 0 )
136+
137+ # Check that the underlying file is truncated too
138+ # (bug #728515)
139+ f = open (TESTFN , 'rb' )
140+ try :
141+ f .seek (0 , 2 )
142+ self .assertEqual (f .tell (), 512 )
143+ finally :
144+ f .close ()
145+ self .assertEqual (m .size (), 512 )
142146
143147 def test_access_parameter (self ):
144148 # Test for "access" keyword parameter
@@ -186,7 +190,7 @@ def test_access_parameter(self):
186190 # Ensuring that readonly mmap can't be resized
187191 try :
188192 m .resize (2 * mapsize )
189- except SystemError : # resize is not universally supported
193+ except AttributeError : # resize is not universally supported
190194 pass
191195 except TypeError :
192196 pass
@@ -242,8 +246,9 @@ def test_access_parameter(self):
242246 with open (TESTFN , "rb" ) as fp :
243247 self .assertEqual (fp .read (), b'c' * mapsize ,
244248 "Copy-on-write test data file should not be modified." )
245- # Ensuring copy-on-write maps cannot be resized
246- self .assertRaises (TypeError , m .resize , 2 * mapsize )
249+ if hasattr (m , 'resize' ):
250+ # Ensuring copy-on-write maps cannot be resized
251+ self .assertRaises (TypeError , m .resize , 2 * mapsize )
247252 m .close ()
248253
249254 # Ensuring invalid access parameter raises exception
@@ -285,10 +290,11 @@ def test_trackfd_parameter(self):
285290 with self .assertRaises (OSError ) as err_cm :
286291 m .size ()
287292 self .assertEqual (err_cm .exception .errno , errno .EBADF )
288- with self .assertRaises (ValueError ):
289- m .resize (size * 2 )
290- with self .assertRaises (ValueError ):
291- m .resize (size // 2 )
293+ if hasattr (m , 'resize' ):
294+ with self .assertRaises (ValueError ):
295+ m .resize (size * 2 )
296+ with self .assertRaises (ValueError ):
297+ m .resize (size // 2 )
292298 self .assertEqual (m .closed , False )
293299
294300 # Smoke-test other API
@@ -311,8 +317,9 @@ def test_trackfd_neg1(self):
311317 with mmap .mmap (- 1 , size , trackfd = False ) as m :
312318 with self .assertRaises (OSError ):
313319 m .size ()
314- with self .assertRaises (ValueError ):
315- m .resize (size // 2 )
320+ if hasattr (m , 'resize' ):
321+ with self .assertRaises (ValueError ):
322+ m .resize (size // 2 )
316323 self .assertEqual (len (m ), size )
317324 m [0 ] = ord ('a' )
318325 assert m [0 ] == ord ('a' )
@@ -617,7 +624,7 @@ def test_offset (self):
617624 # Try resizing map
618625 try :
619626 m .resize (512 )
620- except SystemError :
627+ except AttributeError :
621628 pass
622629 else :
623630 # resize() is supported
@@ -812,14 +819,12 @@ def test_write_returning_the_number_of_bytes_written(self):
812819 self .assertEqual (mm .write (b"yz" ), 2 )
813820 self .assertEqual (mm .write (b"python" ), 6 )
814821
822+ @unittest .skipUnless (hasattr (mmap .mmap , 'resize' ), 'requires mmap.resize' )
815823 def test_resize_past_pos (self ):
816824 m = mmap .mmap (- 1 , 8192 )
817825 self .addCleanup (m .close )
818826 m .read (5000 )
819- try :
820- m .resize (4096 )
821- except SystemError :
822- self .skipTest ("resizing not supported" )
827+ m .resize (4096 )
823828 self .assertEqual (m .read (14 ), b'' )
824829 self .assertRaises (ValueError , m .read_byte )
825830 self .assertRaises (ValueError , m .write_byte , 42 )
0 commit comments