[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)