11
11
import pickle
12
12
import sys
13
13
14
+ class IntLike :
15
+ def __init__ (self , num ):
16
+ self ._num = num
17
+ def __index__ (self ):
18
+ return self ._num
19
+ __int__ = __index__
20
+
14
21
class MemorySeekTestMixin :
15
22
16
23
def testInit (self ):
@@ -116,7 +123,10 @@ def test_truncate(self):
116
123
memio = self .ioclass (buf )
117
124
118
125
self .assertRaises (ValueError , memio .truncate , - 1 )
126
+ self .assertRaises (ValueError , memio .truncate , IntLike (- 1 ))
119
127
memio .seek (6 )
128
+ self .assertEqual (memio .truncate (IntLike (8 )), 8 )
129
+ self .assertEqual (memio .getvalue (), buf [:8 ])
120
130
self .assertEqual (memio .truncate (), 6 )
121
131
self .assertEqual (memio .getvalue (), buf [:6 ])
122
132
self .assertEqual (memio .truncate (4 ), 4 )
@@ -131,6 +141,7 @@ def test_truncate(self):
131
141
self .assertRaises (TypeError , memio .truncate , '0' )
132
142
memio .close ()
133
143
self .assertRaises (ValueError , memio .truncate , 0 )
144
+ self .assertRaises (ValueError , memio .truncate , IntLike (0 ))
134
145
135
146
def test_init (self ):
136
147
buf = self .buftype ("1234567890" )
@@ -154,12 +165,19 @@ def test_read(self):
154
165
self .assertEqual (memio .read (900 ), buf [5 :])
155
166
self .assertEqual (memio .read (), self .EOF )
156
167
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 )
157
173
self .assertEqual (memio .read (), buf )
158
174
self .assertEqual (memio .read (), self .EOF )
159
175
self .assertEqual (memio .tell (), 10 )
160
176
memio .seek (0 )
161
177
self .assertEqual (memio .read (- 1 ), buf )
162
178
memio .seek (0 )
179
+ self .assertEqual (memio .read (IntLike (- 1 )), buf )
180
+ memio .seek (0 )
163
181
self .assertEqual (type (memio .read ()), type (buf ))
164
182
memio .seek (100 )
165
183
self .assertEqual (type (memio .read ()), type (buf ))
@@ -169,6 +187,8 @@ def test_read(self):
169
187
memio .seek (len (buf ) + 1 )
170
188
self .assertEqual (memio .read (1 ), self .EOF )
171
189
memio .seek (len (buf ) + 1 )
190
+ self .assertEqual (memio .read (IntLike (1 )), self .EOF )
191
+ memio .seek (len (buf ) + 1 )
172
192
self .assertEqual (memio .read (), self .EOF )
173
193
memio .close ()
174
194
self .assertRaises (ValueError , memio .read )
@@ -178,6 +198,7 @@ def test_readline(self):
178
198
memio = self .ioclass (buf * 2 )
179
199
180
200
self .assertEqual (memio .readline (0 ), self .EOF )
201
+ self .assertEqual (memio .readline (IntLike (0 )), self .EOF )
181
202
self .assertEqual (memio .readline (), buf )
182
203
self .assertEqual (memio .readline (), buf )
183
204
self .assertEqual (memio .readline (), self .EOF )
@@ -186,9 +207,16 @@ def test_readline(self):
186
207
self .assertEqual (memio .readline (5 ), buf [5 :10 ])
187
208
self .assertEqual (memio .readline (5 ), buf [10 :15 ])
188
209
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 )
189
214
self .assertEqual (memio .readline (- 1 ), buf )
190
215
memio .seek (0 )
216
+ self .assertEqual (memio .readline (IntLike (- 1 )), buf )
217
+ memio .seek (0 )
191
218
self .assertEqual (memio .readline (0 ), self .EOF )
219
+ self .assertEqual (memio .readline (IntLike (0 )), self .EOF )
192
220
# Issue #24989: Buffer overread
193
221
memio .seek (len (buf ) * 2 + 1 )
194
222
self .assertEqual (memio .readline (), self .EOF )
0 commit comments