[Python-checkins] CVS: python/dist/src/Lib/test test_descr.py,1.50,1.51
Tim Peters
tim_one@users.sourceforge.net
Wed, 12 Sep 2001 22:38:57 -0700
Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv20497/python/Lib/test
Modified Files:
test_descr.py
Log Message:
SF bug [#460467] file objects should be subclassable.
Preliminary support. What's here works, but needs fine-tuning.
Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_descr.py,v
retrieving revision 1.50
retrieving revision 1.51
diff -C2 -d -r1.50 -r1.51
*** test_descr.py 2001/09/12 19:53:15 1.50
--- test_descr.py 2001/09/13 05:38:55 1.51
***************
*** 1,5 ****
# Test descriptor-related enhancements
! from test_support import verify, verbose, TestFailed
from copy import deepcopy
--- 1,5 ----
# Test descriptor-related enhancements
! from test_support import verify, verbose, TestFailed, TESTFN
from copy import deepcopy
***************
*** 1636,1639 ****
--- 1636,1686 ----
verify(u[0:0].__class__ is unicode)
verify(u[0:0] == u"")
+
+ class CountedInput(file):
+ """Counts lines read by self.readline().
+
+ self.lineno is the 0-based ordinal of the last line read, up to
+ a maximum of one greater than the number of lines in the file.
+
+ self.ateof is true if and only if the final "" line has been read,
+ at which point self.lineno stops incrementing, and further calls
+ to readline() continue to return "".
+ """
+
+ lineno = 0
+ ateof = 0
+ def readline(self):
+ if self.ateof:
+ return ""
+ s = file.readline(self)
+ # Next line works too.
+ # s = super(CountedInput, self).readline()
+ self.lineno += 1
+ if s == "":
+ self.ateof = 1
+ return s
+
+ f = open(TESTFN, 'w')
+ lines = ['a\n', 'b\n', 'c\n']
+ try:
+ f.writelines(lines)
+ f.close()
+ f = CountedInput(TESTFN)
+ for (i, expected) in zip(range(1, 5) + [4], lines + 2 * [""]):
+ got = f.readline()
+ verify(expected == got)
+ verify(f.lineno == i)
+ verify(f.ateof == (i > len(lines)))
+ f.close()
+ finally:
+ try:
+ f.close()
+ except:
+ pass
+ try:
+ import os
+ os.unlink(TESTFN)
+ except:
+ pass
def all():