mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
bpo-29741: Update some methods in the _pyio module to also accept integer types. Patch by Oren Milman. (#560)
This commit is contained in:
parent
13614e375c
commit
de50360ac2
3 changed files with 68 additions and 14 deletions
|
@ -11,6 +11,13 @@ import _pyio as pyio
|
|||
import pickle
|
||||
import sys
|
||||
|
||||
class IntLike:
|
||||
def __init__(self, num):
|
||||
self._num = num
|
||||
def __index__(self):
|
||||
return self._num
|
||||
__int__ = __index__
|
||||
|
||||
class MemorySeekTestMixin:
|
||||
|
||||
def testInit(self):
|
||||
|
@ -116,7 +123,10 @@ class MemoryTestMixin:
|
|||
memio = self.ioclass(buf)
|
||||
|
||||
self.assertRaises(ValueError, memio.truncate, -1)
|
||||
self.assertRaises(ValueError, memio.truncate, IntLike(-1))
|
||||
memio.seek(6)
|
||||
self.assertEqual(memio.truncate(IntLike(8)), 8)
|
||||
self.assertEqual(memio.getvalue(), buf[:8])
|
||||
self.assertEqual(memio.truncate(), 6)
|
||||
self.assertEqual(memio.getvalue(), buf[:6])
|
||||
self.assertEqual(memio.truncate(4), 4)
|
||||
|
@ -131,6 +141,7 @@ class MemoryTestMixin:
|
|||
self.assertRaises(TypeError, memio.truncate, '0')
|
||||
memio.close()
|
||||
self.assertRaises(ValueError, memio.truncate, 0)
|
||||
self.assertRaises(ValueError, memio.truncate, IntLike(0))
|
||||
|
||||
def test_init(self):
|
||||
buf = self.buftype("1234567890")
|
||||
|
@ -154,12 +165,19 @@ class MemoryTestMixin:
|
|||
self.assertEqual(memio.read(900), buf[5:])
|
||||
self.assertEqual(memio.read(), self.EOF)
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.read(IntLike(0)), self.EOF)
|
||||
self.assertEqual(memio.read(IntLike(1)), buf[:1])
|
||||
self.assertEqual(memio.read(IntLike(4)), buf[1:5])
|
||||
self.assertEqual(memio.read(IntLike(900)), buf[5:])
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.read(), buf)
|
||||
self.assertEqual(memio.read(), self.EOF)
|
||||
self.assertEqual(memio.tell(), 10)
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.read(-1), buf)
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.read(IntLike(-1)), buf)
|
||||
memio.seek(0)
|
||||
self.assertEqual(type(memio.read()), type(buf))
|
||||
memio.seek(100)
|
||||
self.assertEqual(type(memio.read()), type(buf))
|
||||
|
@ -169,6 +187,8 @@ class MemoryTestMixin:
|
|||
memio.seek(len(buf) + 1)
|
||||
self.assertEqual(memio.read(1), self.EOF)
|
||||
memio.seek(len(buf) + 1)
|
||||
self.assertEqual(memio.read(IntLike(1)), self.EOF)
|
||||
memio.seek(len(buf) + 1)
|
||||
self.assertEqual(memio.read(), self.EOF)
|
||||
memio.close()
|
||||
self.assertRaises(ValueError, memio.read)
|
||||
|
@ -178,6 +198,7 @@ class MemoryTestMixin:
|
|||
memio = self.ioclass(buf * 2)
|
||||
|
||||
self.assertEqual(memio.readline(0), self.EOF)
|
||||
self.assertEqual(memio.readline(IntLike(0)), self.EOF)
|
||||
self.assertEqual(memio.readline(), buf)
|
||||
self.assertEqual(memio.readline(), buf)
|
||||
self.assertEqual(memio.readline(), self.EOF)
|
||||
|
@ -186,9 +207,16 @@ class MemoryTestMixin:
|
|||
self.assertEqual(memio.readline(5), buf[5:10])
|
||||
self.assertEqual(memio.readline(5), buf[10:15])
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.readline(IntLike(5)), buf[:5])
|
||||
self.assertEqual(memio.readline(IntLike(5)), buf[5:10])
|
||||
self.assertEqual(memio.readline(IntLike(5)), buf[10:15])
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.readline(-1), buf)
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.readline(IntLike(-1)), buf)
|
||||
memio.seek(0)
|
||||
self.assertEqual(memio.readline(0), self.EOF)
|
||||
self.assertEqual(memio.readline(IntLike(0)), self.EOF)
|
||||
# Issue #24989: Buffer overread
|
||||
memio.seek(len(buf) * 2 + 1)
|
||||
self.assertEqual(memio.readline(), self.EOF)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue