[Python-checkins] python/dist/src/Lib/test test_largefile.py,1.12.6.3,1.12.6.4

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Wed, 30 Apr 2003 12:25:01 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv4120/Lib/test

Modified Files:
      Tag: release22-maint
	test_largefile.py 
Log Message:
file_truncate():  Backported 2.3 code so that file.truncate(n) works on
Windows when n is too big to fit in a 32-bit int.  This was a hole in
2.2's large file support on Windows, and turns out it's a bad hole at
least for ZODB.


Index: test_largefile.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_largefile.py,v
retrieving revision 1.12.6.3
retrieving revision 1.12.6.4
diff -C2 -d -r1.12.6.3 -r1.12.6.4
*** test_largefile.py	31 Mar 2003 17:42:52 -0000	1.12.6.3
--- test_largefile.py	30 Apr 2003 19:24:58 -0000	1.12.6.4
***************
*** 129,147 ****
  f.close()
  
  
! # XXX add tests for truncate if it exists
! # XXX has truncate ever worked on Windows? specifically on WinNT I get:
! #     "IOError: [Errno 13] Permission denied"
! ##try:
! ##      newsize = size - 10
! ##      f.seek(newsize)
! ##      f.truncate()
! ##      expect(f.tell(), newsize)
! ##      newsize = newsize - 1
! ##      f.seek(0)
! ##      f.truncate(newsize)
! ##      expect(f.tell(), newsize)
! ##except AttributeError:
! ##      pass
  
  os.unlink(name)
--- 129,162 ----
  f.close()
  
+ if hasattr(f, 'truncate'):
+     if test_support.verbose:
+         print 'try truncate'
+     f = open(name, 'r+b')
+     f.seek(0, 2)
+     expect(f.tell(), size+1)    # else we've lost track of the true size
+     # Cut it back via seek + truncate with no argument.
+     newsize = size - 10
+     f.seek(newsize)
+     f.truncate()
+     expect(f.tell(), newsize)   # else pointer moved
+     f.seek(0, 2)
+     expect(f.tell(), newsize)   # else wasn't truncated
+     # Ensure that truncate(smaller than true size) shrinks the file.
+     newsize -= 1
+     f.seek(42)
+     f.truncate(newsize)
+     expect(f.tell(), 42)        # else pointer moved
+     f.seek(0, 2)
+     expect(f.tell(), newsize)   # else wasn't truncated
  
!     # XXX truncate(larger than true size) is ill-defined across platforms
! 
!     # cut it waaaaay back
!     f.seek(0)
!     f.truncate(1)
!     expect(f.tell(), 0)         # else pointer moved
!     expect(len(f.read()), 1)    # else wasn't truncated
! 
!     f.close()
  
  os.unlink(name)