1111import pickle
1212import sys
1313
14+ class IntLike :
15+ def __init__ (self , num ):
16+ self ._num = num
17+ def __index__ (self ):
18+ return self ._num
19+ __int__ = __index__
20+
1421class MemorySeekTestMixin :
1522
1623 def testInit (self ):
@@ -116,7 +123,10 @@ def test_truncate(self):
116123 memio = self .ioclass (buf )
117124
118125 self .assertRaises (ValueError , memio .truncate , - 1 )
126+ self .assertRaises (ValueError , memio .truncate , IntLike (- 1 ))
119127 memio .seek (6 )
128+ self .assertEqual (memio .truncate (IntLike (8 )), 8 )
129+ self .assertEqual (memio .getvalue (), buf [:8 ])
120130 self .assertEqual (memio .truncate (), 6 )
121131 self .assertEqual (memio .getvalue (), buf [:6 ])
122132 self .assertEqual (memio .truncate (4 ), 4 )
@@ -131,6 +141,7 @@ def test_truncate(self):
131141 self .assertRaises (TypeError , memio .truncate , '0' )
132142 memio .close ()
133143 self .assertRaises (ValueError , memio .truncate , 0 )
144+ self .assertRaises (ValueError , memio .truncate , IntLike (0 ))
134145
135146 def test_init (self ):
136147 buf = self .buftype ("1234567890" )
@@ -154,12 +165,19 @@ def test_read(self):
154165 self .assertEqual (memio .read (900 ), buf [5 :])
155166 self .assertEqual (memio .read (), self .EOF )
156167 memio .seek (0 )
168+ self .assertEqual (memio .read (IntLike (0 )), self .EOF )
169+ self .assertEqual (memio .read (IntLike (1 )), buf [:1 ])
170+ self .assertEqual (memio .read (IntLike (4 )), buf [1 :5 ])
171+ self .assertEqual (memio .read (IntLike (900 )), buf [5 :])
172+ memio .seek (0 )
157173 self .assertEqual (memio .read (), buf )
158174 self .assertEqual (memio .read (), self .EOF )
159175 self .assertEqual (memio .tell (), 10 )
160176 memio .seek (0 )
161177 self .assertEqual (memio .read (- 1 ), buf )
162178 memio .seek (0 )
179+ self .assertEqual (memio .read (IntLike (- 1 )), buf )
180+ memio .seek (0 )
163181 self .assertEqual (type (memio .read ()), type (buf ))
164182 memio .seek (100 )
165183 self .assertEqual (type (memio .read ()), type (buf ))
@@ -169,6 +187,8 @@ def test_read(self):
169187 memio .seek (len (buf ) + 1 )
170188 self .assertEqual (memio .read (1 ), self .EOF )
171189 memio .seek (len (buf ) + 1 )
190+ self .assertEqual (memio .read (IntLike (1 )), self .EOF )
191+ memio .seek (len (buf ) + 1 )
172192 self .assertEqual (memio .read (), self .EOF )
173193 memio .close ()
174194 self .assertRaises (ValueError , memio .read )
@@ -178,6 +198,7 @@ def test_readline(self):
178198 memio = self .ioclass (buf * 2 )
179199
180200 self .assertEqual (memio .readline (0 ), self .EOF )
201+ self .assertEqual (memio .readline (IntLike (0 )), self .EOF )
181202 self .assertEqual (memio .readline (), buf )
182203 self .assertEqual (memio .readline (), buf )
183204 self .assertEqual (memio .readline (), self .EOF )
@@ -186,9 +207,16 @@ def test_readline(self):
186207 self .assertEqual (memio .readline (5 ), buf [5 :10 ])
187208 self .assertEqual (memio .readline (5 ), buf [10 :15 ])
188209 memio .seek (0 )
210+ self .assertEqual (memio .readline (IntLike (5 )), buf [:5 ])
211+ self .assertEqual (memio .readline (IntLike (5 )), buf [5 :10 ])
212+ self .assertEqual (memio .readline (IntLike (5 )), buf [10 :15 ])
213+ memio .seek (0 )
189214 self .assertEqual (memio .readline (- 1 ), buf )
190215 memio .seek (0 )
216+ self .assertEqual (memio .readline (IntLike (- 1 )), buf )
217+ memio .seek (0 )
191218 self .assertEqual (memio .readline (0 ), self .EOF )
219+ self .assertEqual (memio .readline (IntLike (0 )), self .EOF )
192220 # Issue #24989: Buffer overread
193221 memio .seek (len (buf ) * 2 + 1 )
194222 self .assertEqual (memio .readline (), self .EOF )
0 commit comments