@@ -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,28 @@ def test_basic(self):
114115        # Try to seek to negative position... 
115116        self .assertRaises (ValueError , m .seek , - len (m )- 1 , 2 )
116117
118+     @unittest .skipUnless (hasattr (mmap .mmap , 'resize' ), 'requires mmap.resize' ) 
119+     def  test_resize (self ):
120+         # Create a file to be mmap'ed. 
121+         with  open (TESTFN , 'bw+' ) as  f :
122+             # Write 2 pages worth of data to the file 
123+             f .write (b'\0 ' *  2  *  PAGESIZE )
124+             f .flush ()
125+             m  =  mmap .mmap (f .fileno (), 2  *  PAGESIZE )
126+             self .addCleanup (m .close )
127+ 
117128        # Try resizing map 
118-         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 )
129+         m .resize (512 )
130+         self .assertEqual (len (m ), 512 )
131+         # Check that we can no longer seek beyond the new size. 
132+         self .assertRaises (ValueError , m .seek , 513 , 0 )
140133
141-         m .close ()
134+         # Check that the underlying file is truncated too 
135+         # (bug #728515) 
136+         with  open (TESTFN , 'rb' ) as  f :
137+             f .seek (0 , 2 )
138+             self .assertEqual (f .tell (), 512 )
139+         self .assertEqual (m .size (), 512 )
142140
143141    def  test_access_parameter (self ):
144142        # Test for "access" keyword parameter 
@@ -183,15 +181,10 @@ def test_access_parameter(self):
183181            else :
184182                self .fail ("Able to write to readonly memory map" )
185183
186-             # Ensuring that readonly mmap can't be resized 
187-             try :
188-                 m .resize (2 * mapsize )
189-             except  SystemError :   # resize is not universally supported 
190-                 pass 
191-             except  TypeError :
192-                 pass 
193-             else :
194-                 self .fail ("Able to resize readonly memory map" )
184+             if  hasattr (m , 'resize' ):
185+                 # Ensuring that readonly mmap can't be resized 
186+                 with  self .assertRaises (TypeError ):
187+                     m .resize (2  *  mapsize )
195188            with  open (TESTFN , "rb" ) as  fp :
196189                self .assertEqual (fp .read (), b'a' * mapsize ,
197190                                 "Readonly memory map data file was modified" )
@@ -242,8 +235,9 @@ def test_access_parameter(self):
242235            with  open (TESTFN , "rb" ) as  fp :
243236                self .assertEqual (fp .read (), b'c' * mapsize ,
244237                                 "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 )
238+             if  hasattr (m , 'resize' ):
239+                 # Ensuring copy-on-write maps cannot be resized 
240+                 self .assertRaises (TypeError , m .resize , 2  *  mapsize )
247241            m .close ()
248242
249243        # Ensuring invalid access parameter raises exception 
@@ -282,10 +276,11 @@ def test_trackfd_parameter(self, close_original_fd):
282276                self .assertEqual (len (m ), size )
283277                with  self .assertRaises (ValueError ):
284278                    m .size ()
285-                 with  self .assertRaises (ValueError ):
286-                     m .resize (size  *  2 )
287-                 with  self .assertRaises (ValueError ):
288-                     m .resize (size  //  2 )
279+                 if  hasattr (m , 'resize' ):
280+                     with  self .assertRaises (ValueError ):
281+                         m .resize (size  *  2 )
282+                     with  self .assertRaises (ValueError ):
283+                         m .resize (size  //  2 )
289284                self .assertIs (m .closed , False )
290285
291286                # Smoke-test other API 
@@ -313,8 +308,9 @@ def test_trackfd_neg1(self):
313308        with  mmap .mmap (- 1 , size , trackfd = False ) as  m :
314309            with  self .assertRaises (ValueError ):
315310                m .size ()
316-             with  self .assertRaises (ValueError ):
317-                 m .resize (size  //  2 )
311+             if  hasattr (m , 'resize' ):
312+                 with  self .assertRaises (ValueError ):
313+                     m .resize (size  //  2 )
318314            self .assertEqual (len (m ), size )
319315            m [0 ] =  ord ('a' )
320316            assert  m [0 ] ==  ord ('a' )
@@ -608,13 +604,9 @@ def test_offset (self):
608604            self .assertEqual (m [0 :3 ], b'foo' )
609605            f .close ()
610606
611-             # Try resizing map 
612-             try : 
607+             if   hasattr ( m ,  'resize' ): 
608+                  # Try resizing map 
613609                m .resize (512 )
614-             except  SystemError :
615-                 pass 
616-             else :
617-                 # resize() is supported 
618610                self .assertEqual (len (m ), 512 )
619611                # Check that we can no longer seek beyond the new size. 
620612                self .assertRaises (ValueError , m .seek , 513 , 0 )
@@ -806,14 +798,12 @@ def test_write_returning_the_number_of_bytes_written(self):
806798        self .assertEqual (mm .write (b"yz" ), 2 )
807799        self .assertEqual (mm .write (b"python" ), 6 )
808800
801+     @unittest .skipUnless (hasattr (mmap .mmap , 'resize' ), 'requires mmap.resize' ) 
809802    def  test_resize_past_pos (self ):
810803        m  =  mmap .mmap (- 1 , 8192 )
811804        self .addCleanup (m .close )
812805        m .read (5000 )
813-         try :
814-             m .resize (4096 )
815-         except  SystemError :
816-             self .skipTest ("resizing not supported" )
806+         m .resize (4096 )
817807        self .assertEqual (m .read (14 ), b'' )
818808        self .assertRaises (ValueError , m .read_byte )
819809        self .assertRaises (ValueError , m .write_byte , 42 )
@@ -895,6 +885,7 @@ def test_madvise(self):
895885        self .assertEqual (m .madvise (mmap .MADV_NORMAL , 0 , 2 ), None )
896886        self .assertEqual (m .madvise (mmap .MADV_NORMAL , 0 , size ), None )
897887
888+     @unittest .skipUnless (hasattr (mmap .mmap , 'resize' ), 'requires mmap.resize' ) 
898889    def  test_resize_up_anonymous_mapping (self ):
899890        """If the mmap is backed by the pagefile ensure a resize up can happen 
900891        and that the original data is still in place 
@@ -911,32 +902,26 @@ def test_resize_up_anonymous_mapping(self):
911902                with  self .assertRaises (ValueError ):
912903                    m .resize (new_size )
913904            else :
914-                 try :
915-                     m .resize (new_size )
916-                 except  SystemError :
917-                     pass 
918-                 else :
919-                     self .assertEqual (len (m ), new_size )
920-                     self .assertEqual (m [:start_size ], data )
921-                     self .assertEqual (m [start_size :], b'\0 '  *  (new_size  -  start_size ))
905+                 m .resize (new_size )
906+                 self .assertEqual (len (m ), new_size )
907+                 self .assertEqual (m [:start_size ], data )
908+                 self .assertEqual (m [start_size :], b'\0 '  *  (new_size  -  start_size ))
922909
923910    @unittest .skipUnless (os .name  ==  'posix' , 'requires Posix' ) 
911+     @unittest .skipUnless (hasattr (mmap .mmap , 'resize' ), 'requires mmap.resize' ) 
924912    def  test_resize_up_private_anonymous_mapping (self ):
925913        start_size  =  PAGESIZE 
926914        new_size  =  2  *  start_size 
927915        data  =  random .randbytes (start_size )
928916
929917        with  mmap .mmap (- 1 , start_size , flags = mmap .MAP_PRIVATE ) as  m :
930918            m [:] =  data 
931-             try :
932-                 m .resize (new_size )
933-             except  SystemError :
934-                 pass 
935-             else :
936-                 self .assertEqual (len (m ), new_size )
937-                 self .assertEqual (m [:start_size ], data )
938-                 self .assertEqual (m [start_size :], b'\0 '  *  (new_size  -  start_size ))
919+             m .resize (new_size )
920+             self .assertEqual (len (m ), new_size )
921+             self .assertEqual (m [:start_size ], data )
922+             self .assertEqual (m [start_size :], b'\0 '  *  (new_size  -  start_size ))
939923
924+     @unittest .skipUnless (hasattr (mmap .mmap , 'resize' ), 'requires mmap.resize' ) 
940925    def  test_resize_down_anonymous_mapping (self ):
941926        """If the mmap is backed by the pagefile ensure a resize down up can happen 
942927        and that a truncated form of the original data is still in place 
@@ -947,17 +932,13 @@ def test_resize_down_anonymous_mapping(self):
947932
948933        with  mmap .mmap (- 1 , start_size ) as  m :
949934            m [:] =  data 
950-             try :
951-                 m .resize (new_size )
952-             except  SystemError :
953-                 pass 
954-             else :
955-                 self .assertEqual (len (m ), new_size )
956-                 self .assertEqual (m [:], data [:new_size ])
957-                 if  sys .platform .startswith (('linux' , 'android' )):
958-                     # Can't expand to its original size. 
959-                     with  self .assertRaises (ValueError ):
960-                         m .resize (start_size )
935+             m .resize (new_size )
936+             self .assertEqual (len (m ), new_size )
937+             self .assertEqual (m [:], data [:new_size ])
938+             if  sys .platform .startswith (('linux' , 'android' )):
939+                 # Can't expand to its original size. 
940+                 with  self .assertRaises (ValueError ):
941+                     m .resize (start_size )
961942
962943    @unittest .skipUnless (os .name  ==  'nt' , 'requires Windows' ) 
963944    def  test_resize_fails_if_mapping_held_elsewhere (self ):
0 commit comments